当前位置: 技术问答>linux和unix
写Linux驱动的两种方法,希望高手进来做一下比较。
来源: 互联网 发布时间:2017-05-05
本文导语: /************************************************************************************/ 方法一: 标准方法:用到一下函数等: ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t,...
/************************************************************************************/
方法一:
标准方法:用到一下函数等:
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
/************************************************************************************/
问题是,两个方法的优缺点是什么?两者的应用范围是否不同?
希望高手进来做个阐述说明,谢谢~~~
方法一:
标准方法:用到一下函数等:
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
/************************************************************************************/
问题是,两个方法的优缺点是什么?两者的应用范围是否不同?
希望高手进来做个阐述说明,谢谢~~~
|
第一种方法是运行在内核空间。
第二种方法运行在用户空间,其实就是个运行在用户空间的驱动和应用程序一样。
两者的区别就是内核空间的程序和用户空间程序的区别。
第二种方法运行在用户空间,其实就是个运行在用户空间的驱动和应用程序一样。
两者的区别就是内核空间的程序和用户空间程序的区别。
|
刚好我前段时间学习了内核,谈谈我在实际中用到的第二种方法。
1、操作eeprom,内核集成到驱动,映射到/sys/目录下的一个名为eeprom的文件,对此文件操作即对eeprom设备操作,方便。
2、看门狗,一般来说,是用ioctl之类的操作函数,但我也将看门狗使能和超时时间的功能也做成/sys/下的一个文件,这样,方便使用。只要用echo 0 > /sys/.../enable就能禁止狗,不用写代码,方便。
3、寄存器操作,因为某个问题,需要观察设备某个寄存器的值,我也将寄存器操作的功能做成/sys下的文件,用echo和cat就能读写寄存器,方便。
实际应用中,sysfs还是比较实用的。
总之,两种方法都可以的情况下,我首选最方便的。
1、操作eeprom,内核集成到驱动,映射到/sys/目录下的一个名为eeprom的文件,对此文件操作即对eeprom设备操作,方便。
2、看门狗,一般来说,是用ioctl之类的操作函数,但我也将看门狗使能和超时时间的功能也做成/sys/下的一个文件,这样,方便使用。只要用echo 0 > /sys/.../enable就能禁止狗,不用写代码,方便。
3、寄存器操作,因为某个问题,需要观察设备某个寄存器的值,我也将寄存器操作的功能做成/sys下的文件,用echo和cat就能读写寄存器,方便。
实际应用中,sysfs还是比较实用的。
总之,两种方法都可以的情况下,我首选最方便的。
|
而且第二种方法实现的功能很有限啊,比如有些驱动要时序啊,类内存的啊,你怎么搞。