我正在尝试开发Linux设备驱动程序,并且作为我的第一次尝试,我正在尝试开发具有以下文件选项的char设备驱动程序,
struct file_operations fops{
.open=open_fun,
.release=release_fun,
.write=write_fun,
.read=read_fun,
};
当我使用加载驱动程序时 insmod
, 我看到 /proc/devices
列出char设备下的驱动程序,但我找不到它 /dev
。谷歌搜索建议使用 mknod
在...创造一个deivce /dev
并将其与司机的主要和未成年人联系起来。但是,尝试这样做会导致“权限被拒绝”错误,即使以超级用户身份完成也是如此。
我该怎么做才能让设备出现 /dev
什么时候加载内核模块?我试过两个旧的(register_chrdev
)和更新的版本(cdev_init & cdev_add
注册设备,但没有一个工作。
谢谢,
米尔
你可能不得不这样做 创建一些udev规则 告诉系统您需要创建哪些设备节点。
我可以看到其中的条目 /dev
通过在控制台上运行以下命令创建节点后
sudo mknod -m 0666 / dev / msio c 22 0
用户不是root用户,所以我不得不使用sudo。我的条目是 msio
,分别是主要和次要编号22,0的字符设备。
如果可以以编程方式实现,我会告诉您。
如果您可以在发行版中使用它,那么CONFIG_DEVTMPFS非常好用。您可以在启动时使用内核自动挂载(CONFIG_DEVTMPFS_MOUNT)或手动挂载(mount -t devtmpfs none / dev)。
添加以下API的驱动程序内部__init功能
- cl = class_create(THIS_MODULE,“x”);
其中x - 加载驱动程序时在/ sys / class /中显示的名称。
- 将device_create()内核api与device_create一起使用(cl,NULL,dev,NULL,“d”);
其中d - 在/ dev下创建的设备文件。
其中dev对于在使用期间初始化的第一个设备号是可变的 alloc_chrdev_region 用于动态分配驱动程序主要编号的API
如需进一步参考,请浏览链接 http://opensourceforu.com/2011/04/character-device-files-creation-operations/
首先你必须使用:
sudo mknod / dev / devicename c 81 0
它在/ dev中创建设备文件,但您必须赋予它读/写权限。这样做,
sudo chmod 777 / dev / devicename
完成!!!