Linux下TCM驱动的编译加载及测试过程
一、 编译加载驱动
如果按照所给文件夹tcmdV1.1下的文件,直接运行命令make就可以对驱动模块进行编译。编译会生成tcm.ko、tcm_tis.ko两个模块。 之后运行如下命令加载驱动: #insmodtcm.ko #insmodtcm_tis.ko #lsmod 即可看到驱动已加载到内核。但是通过var/log/messages文件中的log信息我们发现驱动是按pnp方式默认加载的,没有绑定TCM硬件。所以此时在/dev下找不到对应TCM的设备文件节点tcm0。此时驱动尽管加载了但是没有运行成功! 针对这种情况,我们可以对提供的驱动源码进行分析,同时通过printk调试驱动发现了问题的出现的位置。 问题如下: 在执行到static int _initinit_tis(void)函数时出现设备不会自动探测到所用的入口,而是执行了pnp_register_driver的默认注册方式。所以在这里我们将函数中的if(force)注释掉,然后添加一行if(true)强制其进入ACPI入口。(注销的函数 static void __exit cleanup_tis(void)中也做同样修改)r 然后按照以上方法编译加载,此时可以看到在/dev下创建了tcm0设备文件节点,表面驱动与硬件绑定,此时可以用文件操作的方法来操作tcm0。到此linux下TCM驱动才正在加载成功。
二、 测试驱动
方法一:按照所给文件中的代码如果运用gcc编译命令来编译 #gcc–g –o test test.c 则会产生找不到头文件的现象。针对这种情况我们需要将所包含的头文件的路径做相应的修改,比如“trousers/tss.h”找不到,得修改为”include/trousers/tss.h”然后编译,则又会出现其他的找不到头文件的现象,根据编译提示的错误一一修改,直到不出现头文件没有发现的错误,此时将lib文件夹下的静态库libtcs.a、libtddl.a拷贝到usr/lib文件夹下,同时拷贝到与test.c同一目录下。此时运行编译命令: #gcc–L /usr/lib test.clibtddl.alibtcs.a–o test 即可编译成功,生成test可执行文件。运行命令 #./test 即可查看到测试结果。
方法二:直接运行命令: #gcc -I include test.c -L lib -ltddl -ltcs -g -o test.o 即可生成test可执行文件 #./test
即可