用户空间访问I2C设备驱动(3)

(6)在 __exit 代码中注销本字符设备驱动

static void __exit tvp5158_i2c_exit(void)  {      dev_t devno = MKDEV(g_tvp5158_dev.major, 0);       i2c_del_driver(&tvp5158_i2c_driver);       cdev_del(&g_tvp5158_dev.cdev);       unregister_chrdev_region(devno, 1);  

        注意,本初始化代码和逆初始化在第一篇文章中已经出现过,这里补充完整了,将字符设备驱动的代码添加进来了。

2.  用户空间的使用方法

首先,编写Makefile将驱动编译成模块,然后在用户空间对生成的模块(*.ko)进行加载(insmod),然后再 /dev 目录下创建设备节点 /dev/tvp5158_dev ,最后,在用户空间即可编写测试代码,打开该设备文件,通过 ioctl 命令进行访问。

前面几个步骤很容易,不再赘述,只给出最后在用户空间的测试代码示例。

#include <stdio.h>   int main()  {      int status;      struct I2C_Param param;    unit8_t reg = 0x08; unit8_t value = 0;      int fd = open("/dev/tvp5158_dev", O_RDWR);      if( fd < 0)      {          return -1;      }            param.reg    = &reg;      param.value  = &value;      status = ioctl(fd,I2C_CMD_READ,&param);      if( status < 0)      {          printf("read fail!\n");          return -1;      }      printf("the 0x80 reg 's value = %d\n",value);            close(fd);            return 0;  

 3.   总结

到此为止,Linux下的I2C设备驱动基本编写过程已经讲述完毕,以后凡是拿到新的芯片,需要在Linux下读写I2C寄存器,均可参考本系列的代码进行编写。当然,这里只是讲述了I2C设备驱动编写的一些最基本的方法,关于I2C设备驱动的原理部分并没有涉及,希望自己以后更加深入地了解了Linux设备驱动原理后再进一步阐述。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjgfw.html