procfs只是一个内核和用户空间通信的接口,原则上可以实现cdev的信息交换,但是如果你仅仅想实现在用户空间操作物理寄存器的话,那大可不必非要用cdev,正如你说的,在proc留下一个接口,实现read和write函数即可,如果你不想用procfs的话,你就要用标准的做法了,有两种方 式,第一种就是实现一个字符设备,实现它的file_operations,然后在/dev/下面按照主次设备号用mknod创建一个设备,最终你只需要 操作这个设备文件就可以了;第二种方式就是利用你说的sysfs接口,利用sysfs的目的是为了自动的将你的物理设备信息导向用户空间而不是为了读写寄 存器,这个方法下你就不用mknod手工建立设备了,而可以用用户空间的udevd守护进程自动依据sysfs的信息来创建设备了,最终你还是要操作你创 建的设备。
当然,直接用sysfs导出物理寄存器的信息或者直接用sysfs导出寄存器的读写接口,那倒也可以,但是不是标准的做法,实际上,不光sysfs,只要是用户空间和内核通信的机制你都可以利用,比如用netlink也可以,这个时候,你读写物理寄存器就变成读写一个netlink套接字了。
实际上sysfs只是一个系统信息导出文件系统,它的信息一般都是用户空间的守护进程用的,比如udev,这样的话可以让用户空间第一时间了解内核空间发 生的事件,不太赞成用sysfs直接导出个别的物理设备的完整信息,比如,你只要能通过sysfs得知物理设备已经就绪并且知道了它的设备号就可以了,真 正读写设备和操作设备还是要用标准的file_operations的vfs的方式,我想这也就是unix/linux中“一切皆文件”的意义。
原文链接: https://blog.csdn.net/dog250/article/details/5303715
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/409926
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!