这几天同事测试LIRC驱动发现,如果把LIRC驱动编译成模块,然后使用insmod命令将驱动load到内核,驱动使用起来没有任何问题,但是如果把驱动直接编译到内核,启动内核以后发现驱动无法使用。
刚开始我怀疑可能是devfs的问题,但是查看代码跟这个没有任何关系。 然后查看了编译成模块时load模块的log, 与编译到内核,内核启动时的log,发现了问题。
原来lirc_dev.c文件有这么一段代码:
把MODULE宏去掉以后,log一致了,但是使用的时候还要注意一点。
因为除了lirc_dev这个驱动之外,LIRC还需要开发者提供建议在lirc_dev基础上另外一个驱动,例如lirc_it87驱动,这个驱动的打开和关闭操作如下:
需要将其改写成下面的代码,因为MOD_IN_USE, MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT这些宏只有驱动被编译成模块时才支持。