我有一个内核模块myModule,主编号为100,次编号为120。 这是我做的:
make all
sudo insmod ./myModule.ko
mknod ~/myModule c 100 120
当我用
检查日志时cat /proc/syslog
然后它显示init函数中的printk()事项。
但我也实现了这个功能:
ssize_t myModule_read(struct file *f, char __user *user_buffer, size_t num, loff_t *offset);
当进程从设备文件中读取时,它提供了printk()。 由于我的设备文件位于我的主目录中,因此我尝试了以下操作:
cat ~/myModule
和
hexdump ~/myModule
但它说没有这样的设备或地址。
如何实际触发读取(或释放)功能呢?
编辑: 如果mknod是冗余的:设备文件也不在/ dev /目录中。 但它出现了:
cat /proc/devices
答案 0 :(得分:1)
您需要确保设置struct file_operations *ops
返回的cdev
结构的cdev_alloc()
字段:
myModule->ops = &fops;