如何自动创建结点

来源:互联网 发布:企业网站源码带手机版 编辑:程序博客网 时间:2024/05/29 03:51
方法一. 在驱动里
   转 自学驱动以来,一直都是在加载模块后采用手动创建节点,虽然这个过程比较简单,毕竟还是有点麻烦,尤其是在调试模块的时候。
#insmod module_name.ko
#mknod /dev/module_name c MAJOR MINOR
#
在2.4里设备文件采用的是devfs,在2.6里已经用udev取代devfs,为解决上面那样手动创建节点的麻烦,我们可以在程序里加上创建节点这项,如下:
以字符设备char_dev为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备,这样的module被加载时,undev daemon就会自动在/dev下创建char_dev设备文件。大概方法如下:
struct class *myclass = class_create(THIS_MODULE, “char_dev”);
class_device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “char_dev”);

当然,在exit函数中要把创建的class移除:
device_destroy(myclass, MKDEV(major_num, 0));         //delete device node under /dev
class_destroy(myclass);

 

方法二,在脚本里

#!/bin/ash

rm -rf /tmp/dev/
mkdir /tmp/
mkdir /tmp/dev/

path="/lib/modules/2.6.32/kernel/drivers/char/dc/cxon2"
module="hx170dec"
device="/tmp/dev/hx170"
mode="666"

echo

#insert module
insmod $path/$module.ko base_port=0xf00c4000 irq=58 || exit 1

echo "module $module inserted"

#remove old nod
rm -f $device

#read the major asigned at loading time
major=`cat /proc/devices | grep $module | cut -c1-3`

echo "$module major = $major"

#create dev node
mknod $device c $major 0

echo "node $device created"

#give all 'rw' access
chmod $mode $device

echo "set node access to $mode"

#the end
echo      

0 0
原创粉丝点击