从设备文件中读取
Read from device file
我有一个内核模块 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
您需要确保设置从 cdev_alloc()
返回的 cdev
结构的 struct file_operations *ops
字段:
myModule->ops = &fops;
我有一个内核模块 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
您需要确保设置从 cdev_alloc()
返回的 cdev
结构的 struct file_operations *ops
字段:
myModule->ops = &fops;