编写 Android 内核模块的尝试(四)

在 Moto X Pro 上的铩羽经历简直让三太爷要开始怀疑人生,不甘心,于是把心爱的 Kindle Fire HDX 平板(代号 Thor)也祭献了出来。这里需要感谢一下 KingRoot 这个团队,是他们的工具成功将之 root 掉了,其他的工具都没能成功。

首先要干的显然是下载它的内核源码,Amazon 好歹是个国际正规大厂,所以这个应该不是问题,官方链接在此:https://www.amazon.com/gp/help/customer/display.html?nodeId=200203720。不过这个不是问题的问题其实还是出了问题。我的平板应该到 Kindle Fire HDX & HDX 8.9″ (3rd Generation) 节下去下载,而且是眼下的最新版本 4.5.5.2,可是如果你点击页面上的下载链接,就会跳转到一个出错页面,天地良心,其他链接都没有这个问题,不知道亚马逊怎么搞的。开始我还以为这里面有什么代码是被美国的出口法规约束着不能开放给我的 IP 所在地域的,后来架了几个梯子也不好使。无奈之下只好联系在线客户,很快他就发来一个可用的链接,完成了我的心愿。奇怪的是,直到现在那个页面上的链接也没有被修正过来。

下载完成以后,发现源代码的玩儿法竟然和 Moto X Pro 不太一样!由于在此业务上还未臻化境,竟然又观察、鼓捣了好久,才搞定编译环境。最大的不同在于,亚马逊做出来的这个源码包,真正做到了以目标为导向、以效率为追求,一键编译,编译时把代码 tar 包会解压到临时目录下,并从网络上现下载编译工具链,完成编译后再把编译结果复制出来,然后把临时目录打扫干净。我老人家追求的是编译内核模块时它所有的依赖都在,所以不得不对其提供的编译脚本进行了修改,使得可以对手动解开的源代码树进行就地配置和编译。准备工作(0、导出环境变量,包括目标架构、交叉编译之类的;1、make 随便一个配置;2、make prepare;3、make scripts)就绪后,编译模块就很容易了。在使用 Module.Symvers 的时候,闹了个乌龙,一时糊涂竟然把刚刚随自己试着编译出来的内核所生成的 Module.Symvers 用上了,结果在设备上 insmod 的时候报了个 module_layout 的错误,这才意识到还是得提取一遍设备自己的才行。

最后的测试结果是完全正常,dmesg 里面清晰地显示着加载和卸载时我的模块输出的信息。这意味着我的代码、编译过程应该没有问题。可是,这却带来了个更大的问题,既然如此,Moto X Pro 为何会在一个人畜无害的模块加载的时候重启?目前我的推测倾向于,重打包生成的 boot.img,与原始的 boot.img 似乎存在着另外没有察觉到的不同,证据就是,使用定制的 boot.img,手机连 SIM 卡都不认。尚无头绪中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注