内容提要
这篇文章介绍了移植k20pro-PostmarketOS时可能遇到的问题以及解决方法。其中包括无法打补丁、文件或目录不存在、编译错误、权限问题等。文章提供了详细的解决办法,并给出了相关代码示例。
延伸解读
日志定位:问题排查的起点
文章强调,所有列出的问题都需要通过执行pmbootstrap log命令或在pmbootstrap工作目录的log.txt中查找才能发现。这意味着移植过程中的错误信息并非直接显示在终端,而是记录在日志文件中。建议在编译内核前先删除旧的log.txt,以确保日志内容只反映当前构建过程,避免旧信息干扰判断。
内核编译错误的应对策略
针对C语言编译错误,文章提供了多种解决方案:更换编译器为clang,或在APKBUILD中配置使用gcc6/gcc4(仅限老旧手机)。如果这些方法仍无效,文章建议更换问题较少的内核,并特别指出小米官方内核问题较多。这提示读者,内核源码质量直接影响移植难度,选择合适的内核版本可能比反复修补更有效。
权限与路径问题的通用处理
当遇到Permission denied错误时,文章建议更换目录并将目录权限设置为755。对于缺失头文件的问题,则建议使用find命令定位文件并复制到报错目录。这些方法反映了Linux环境下常见的权限和路径依赖问题,在移植过程中需要确保工作目录权限正确,且所有依赖文件都能被正确引用。
Python2依赖的兼容性处理
从Alpine 3.16开始不再提供python2,导致mkdtboimg工具无法运行。文章提供了两种解决方案:切换版本到v20.06(不推荐)或修改源码使用python3。后者通过patch将Makefile.lib中的python2替换为python3,并调整mkdtboimg.py的语法以兼容Python3。这提醒读者,在较新的系统上移植旧代码时,需注意Python版本迁移带来的兼容性问题。
Q&A
如何解决无法打补丁的问题?
删除APKBUILD中的所有.patch字样。
如果找不到asm/type.h文件该怎么办?
安装linux-headers。
gzip(cpio)命令未找到时如何处理?
安装gzip(cpio)。
C语言编译错误的解决方法是什么?
更换编译器为clang或使用gcc6/gcc4。
如何解决权限被拒绝的问题?
更换目录并将目录权限设置为755。
如果deviceinfo缺少dtb,应该怎么做?
在deviceinfo中添加编译好的dtb路径。