Linux驱动的代码重用有很多方法,将重用的代码放在其他文件里(在头文件里声明),如果想用某种功能,直接在include里即可(静态重用)。
如果一个Linux驱动里只有一个源代码文件,obj-m变量的值可以与源代码文件同名。如果Linux驱动包含多个文件,就需要使用model-y来指定所有的目标文件,而不能只指定被引用的目标文件。
代码重用分为静态重用和动态重用两种,动态重用就是指模块依赖,也被成为导出符号。如果只用一句话解释如何利用导出符号实现代码重用,就是“在一个驱动模块里使用另一个驱动模块里的被导出的符号(常量,变量,函数等)”。
如果编写得Linux驱动程序是正确的,那么可以正常的装载和卸载,但是在编译是由多个文件组成的linux驱动,如果linux驱动代码不多,可以将所有的代码放在一个文件中,如果linux驱动代码比较复杂,就需要使用多个源代码文件存放不同的功能代码,这样有利于代码的分类和管理。如果linux驱动要使用第三方的原代码,那么就得编译多个源代码文件,最终生成.ko文件或编译进linux内核。在某些情况下需要强行卸载linux驱动:1、由于linux驱动模块的初始化函数进行了某些操作而崩溃,从而导致初始化函数无法正常反回。2、在使用rmmod命令卸载驱动时,系统会调用卸载函数,只有卸载函数成功返回时,linux驱动才会被卸载,如果卸载函数被阻塞,rmmod命令也会被阻塞,无法执行到卸载linux驱动模块的代码。这种问题的根源就是卸载函数,因此只要将原来的卸载函数替换成一个空的卸载函数即可