背景:我正在使用Pixel 4,build QQ2A.200501.001.B2,这是Android 10。当我从官方来源构建内核并将其闪现时,触摸屏、无线局域网和其他功能都不起作用。我追踪到了这一点,因为/vendor/lib/modules中的内核模块没有得到更新,因此新内核无法加载其中的任何一个。我试着只闪烁boot.img和整个AOSP,同样的问题,它们没有得到更新。我可以通过手动将我构建的内核模块推到设备上,并按正确的顺序手动insmod来解决这个问题。
所以我的问题是:
当然,一定有一个“官方”的方法来做到这一点吗?内核模块是如何正常部署的?
一些注意事项:
我不能将它们推送到/vendor/lib/modules,因为我不能重新装入/vendor可写:
flame:/ # mount -o rw,remount /vendor
'/dev/block/dm-5' is read-only禁用dm-verity似乎没有帮助。
我注意到,AOSP源代码包含/vendor/lib/modules中的所有模块,与其采用内核映像形式的位置相同(在我的例子中是device/google/coral-kernel)。因此,自然地,我尝试用我构建的模块替换那里的模块,但是在构建和闪烁之后,我发现/vendor/lib/modules仍然包含旧的模块。
AOSP医生说表示boot.img不再包含ramdisk,它现在在system分区中。另外,我们使用OverlayFS,如果我读对了,应该使用“供应商覆盖”来更新文件。但是,在我的设备上,没有像docs所说的product/vendor_overlay目录,只有product/overlay/。我也不确定这是否是解决这个问题的正确方法,或者我将如何在我的案例中创建这样一个覆盖。
谢谢
发布于 2020-08-13 18:24:59
好的。几个问题,几个答案:
- Because they are expected to be in /vendor/lib/modules, and when you recompile a kernel you're only creating the kernel binary which goes into the boot.img.- How can I update them along with the kernel when I flash?您可以将模块编译到内核中。这使您的内核更大一些,但可以减轻插入这些模块的需要。
- Alternatively, how can I permanently update them after flashing?您确实可以像您已经尝试过的那样修改/vendor,但不能修改DM-verity块设备(在您的示例中是/dev/ block /dm-5)--底层分区(/dev/block/sd?#,如果您查看/dev/block/by-name/供应商的链接,就可以看到这一点)。
警告:这将导致dm安装/vendor失败,除非您正确禁用dm!
另一种测试方法是: Linux内核模块有严格的ver魔术要求(更简单地说,模块字符串必须与内核的“uname-r”匹配,以确保关键的内核结构没有被修改)。如果您不更改内核魔术(版本,PATCHLEVEL,子级别和外向型从Makefile) (或“伪造”他们到原来的内核版本,你的设备附带)模块应该加载。
发布于 2021-01-23 05:10:08
您可以使用下面的命令禁用verity:
adb root
adb disable-verity
adb shell sync
adb reboot然后将.ko推送到/modules/lib/modules/:
adb root
adb remount
adb push *.ko /vendor/lib/modules/
adb shell sync
adb reboothttps://stackoverflow.com/questions/63174162
复制相似问题