微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Linux内核模块中读取/写入字符设备

我自己在LKM中编写字符设备驱动程序,它只是简单地:

dev_open(struct inode *inode,struct file *filp); dev_read (struct file *filp,char __user *buf,size_t count,loff_t *f_pos) dev_write(struct file *filp,const char __user *buf,loff_t *f_pos) dev_release(struct inode *inode,struct file *filp)

然后在我的内核模块中,我也想写入字符设备,写入必须实际调用我的function:

dev_write(struct file *filp,loff_t *f_pos)

我在SE上发现了一个类似的链接 ,但是这样就不会调用我的dev_write()函数来写入,而是像vfs_write()那样更深一层,对吗?

内核sys_call_table地址与system.map中指定的地址不匹配

如果我中断了Linux内核的make过程,会发生什么?

Linux内核中的硬件中断堆栈上半部分?

获取群集大小

具有调制解调器PCM接口的Alsa

RT修补Linux内核的循环testing

为什么configfs不支持mmap?

在内核模块中无法从net_device中获取mac地址

printk loff_ttypes的格式说明符?

gr fat致命的错误:无法find合适的模板

不要试图从模块中调用dev_write() 。 你需要一个单独的方式让你的模块写入设备,如果这真的是你想要做的。 在进行内部写入时,您没有有效的filp或用户内存缓冲区。

例如, dev_write()将使用filp来确定用户正在写入哪个设备,并检查和复制用户缓冲区中的数据。 它可以调用一个单独的辅助函数来将数据粘贴到适当的内部缓冲区中。

你的内部代码调用这个辅助函数直接追加缓冲区。 如果您的驱动程序支持多个设备,那么当您执行内部写入时,您将需要知道并指定您正在写入的设备的哪个实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐