给客户合作开发一个我们设备的驱动,由于没有客户原始的kernel SDK源码包(客户也不愿意给他们的kernel源码包),所以在公版的kernel SDK源码包中进行开发和编译,产生对应的ko文件后给到客户集成到他们的系统中。
(说明:公版源码包和客户的源码包的区别: 客户的源码包是在公版的源码包的基础上做了一些他们自己的定制化开发)
开发环境描述:
ANDROID版本: Android9.0
kernel版本: 4.9.118+
CPU架构: 64-bit LSB arm64
为了保证编译生成的KO文件与客户的Kernel保持对齐,会让客户提供对应的kernel配置文件.config及Module.symvers文件,替换公版的kernel源码包中对应的文件,然后单独编译模块生成对应的ko文件。这样能保证在公版SDK中生成的ko文件可以在客户的目标平台上正常的加载及运行:insmod xxx.ko
现在遇到的问题是:ko模块可以加载并运行,模块中有获取当前进程PID的功能,但是返回的值不对,get_current()->tgid永远都是-64.
把模块的源码放到客户的SDK中编译,生成的ko, get_current()->tgid都是正常的。
相关代码:
printk("%s:cur_tgid = %d,cur_pid = %d,comm = %s\n",
__func__,get_current()->tgid,get_current()->pid,get_current()->comm);
公版SDK编译生成的ko运行结果:
pid_read:cur_tgid = -64,cur_pid = 924399152,comm =
我们自己的模块源码,为了保护我们的知识产权,也不能给客户编译,烦请高手指点,到底是编译哪里出的问题,
导致在我的公版SDK编译出来的ko文件运行结果出错???
printk("%s:cur_tgid = %d,cur_pid = %d,comm = %s\n",
__func__,get_current()->tgid,get_current()->pid,get_current()->comm);
你这个打印是什么地方和什么场景下调用的?