写Linux驱动的两种方法,希望高手进来做一下比较。

超级码栗 2013-12-13 02:09:59
/************************************************************************************/
方法一:
标准方法:用到一下函数等:
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
写好后然后编译入到内核。
/************************************************************************************/
方法二
操作目录 /sys/class/gpio ,里面有IO端口文件。
只要简单写入值就好,具体方法;http://blog.csdn.net/gqb_driver/article/details/8620828
/************************************************************************************/
问题是,两个方法的优缺点是什么?两者的应用范围是否不同?
希望高手进来做个阐述说明,谢谢~~~
...全文
143 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
布鲁克斯南南 2013-12-16
  • 打赏
  • 举报
回复
学习了,大牛
李迟 2013-12-15
  • 打赏
  • 举报
回复
刚好我前段时间学习了内核,谈谈我在实际中用到的第二种方法。 1、操作eeprom,内核集成到驱动,映射到/sys/目录下的一个名为eeprom的文件,对此文件操作即对eeprom设备操作,方便。 2、看门狗,一般来说,是用ioctl之类的操作函数,但我也将看门狗使能和超时时间的功能也做成/sys/下的一个文件,这样,方便使用。只要用echo 0 > /sys/.../enable就能禁止狗,不用写代码,方便。 3、寄存器操作,因为某个问题,需要观察设备某个寄存器的值,我也将寄存器操作的功能做成/sys下的文件,用echo和cat就能读写寄存器,方便。 实际应用中,sysfs还是比较实用的。 总之,两种方法都可以的情况下,我首选最方便的。
max_min_ 2013-12-14
  • 打赏
  • 举报
回复
我用第一种方法居多了。都是直接调用这几个api的
Carl_CCC 2013-12-14
  • 打赏
  • 举报
回复
而且第二种方法实现的功能很有限啊,比如有些驱动要时序啊,类内存的啊,你怎么搞。
炽热恒星 2013-12-13
  • 打赏
  • 举报
回复
第一种方法是运行在内核空间。 第二种方法运行在用户空间,其实就是个运行在用户空间的驱动和应用程序一样。 两者的区别就是内核空间的程序和用户空间程序的区别。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧