Android系统编译之内核编译
本来想超频⾃⼰的⼿机的,于是发现需要编译内核才能实现
作为Android开发者的我 没有任何内核编译经验,只是想试⼀下, 于是折腾了两天终于把内核成功编译出来了 现在分享下学习经验
我的是⼩⽶⼿机,其实我看了⼀下github, 其他⼿机的内核开源的⽬录结构⼏乎是⼀样的,所以应该是同⼀种编译⽅式
编译内核的时候 各种error 真的是⽆奈+⼼累…
⽆数次想决定放弃了…但是还是坚持了下来…
不多说了 直接开始:
1.下载内核
把该分⽀的源码下载下来, 到这⾥有的⼈是⽤ git命令下载, 我是vmware 运⾏的 ubuntu ⽐较⽅便 ,就不使⽤git了 直接在win下⽤迅雷下载源码然后丢进去虚拟机⾥, 还能更快, 为啥要多折腾呢
2.下载交叉编译链
3.搭建linux环境
先设置ubuntu默认⽂件权限
执⾏
umask 002重定向过多是什么意思
可选, 只是为了确保等会编译创建⽂件的可读可写的权限
然后解压zip:
cd 桌⾯/
unzip 你的内核源码⽂件名.zip
unzip 交叉编译链⽂件名.zip
解压完成后 ⽂件夹名称有点长我分别改成了 Kernel 和 Toolchain
打开终端, 输⼊ sudo gedit /etc/profile 在末尾添加环境变量
export ANDROID_AARCH64=/home/ubuntu/桌⾯/Toolchain/google_gcc/aarch64-linux-android-4.9/bin/
export ARCH=arm64
export SUBARCH=arm64
export PATH=$PATH:$ANDROID_AARCH64
export CROSS_COMPILE=aarch64-linux-android-
保存,关闭⽂本编辑器
终端, 输⼊
source /etc/profile && . /etc/profile
以使其⽣效
⽹上⽂章都是直接开始编译了, 反正我直接make 是不⾏的 需要重新指定 O=输出⽬录 才正常 否则编译过程中会报错 ⽆法⽣成
指定make ⽬录终端输⼊如下命令进⾏⽣成 .config ⽂件
cd Kernel
mkdir output
make O=output leo_user_defconfig
cd output
make O=output
解释: make O=output leo_user_defconfig 输⼊后
如图 输出了.config⽂件 在/Kernel/output/下, 如果看不见请设置⽂件夹管理器 选择 [显⽰隐藏⽂件], 或终端 ls -a
解释 leo_user_defconfig 是什么⿁ 从哪⾥来?
这个⽂件 在 桌⾯/Kernel/arch/arm64/configs/ 下, ⾥⾯可能有很多⼿机代号, 你可以查看你的⼿机的内核信息, 或者 ⼿机的system/build.prop⾥有你的代号
leo_user_defconfig 其中的 leo 就是代表的 ⼩⽶NotePro ,⽹上很多⽂章都是说 make msmxxx_defconfig
…我不太清楚,具体可能要多编译⼏个 看看哪个正常 , 反正我认为 就是 “代号_user_defconfig” 这样的格式, 不过这只对于⼩⽶是这样,其他⼿机好像是不带 user 直接 代号_defconfig, 或者是什么都没有 就
只有cpu型号 那么你只能选择 msmXXXX_defconfig 进⾏编译. (如果此处有什么误解 望指出)
解释make O=output 代表重定向输出⽬录, 并且开始编译 , 也可以使⽤ make -j3 O=output, j3代表 系统的cpu数量+1, 双核则 -j3
编译通过如下
最后 -dtb 等⽂件⽣成在Kernel/output/arch/arm64/boot/ 下
4.使⽤
在win下, 使⽤ Android Image Kitchen (软件请百度,注意分6.x 7.x 8.x 可⽤版本)
先取出你的⼿机ROM中的 boot.img 拖到unpackimg.bat去解包, 然后把-dtb 该⽂件替换掉原本的内核⽂件
split_img/boot.img-zImage
然后执⾏repackimg.bat 得到 image-new.img
执⾏如下命令 刷⼊
adb reboot bootloader && fastboot flash boot C:\你的路径\image-new.img && fastboot reboot
前提是 你刷⼊的rom正好是 刚才取出boot.img的那个. 否则可能⽆法正常开机
或者直接把原本的rom中的boot.img替换成编译好的boot.img 再 从recovery双清刷⼊
如有其他问题请指出,共同学习… ⾄此编译内核教程已完成
注意事项:
虽然编译操作 不难,但是最浪费时间的就是编译时的各种错误 ,⽽且⽹上还不到? ⽽且还⾕歌不到… 尽管还到和你⼀样的问题却没⼈回答… 绝望, 现在我来说⼀下需要注意的地⽅
注意⽂件权限 最好每解压⼀次zip 之后 都需要批量修改⽂件夹权限
如: sudo chmod -R 777 ⽂件夹
如果编译报错提⽰出现不到头⽂件 < xxx.h > 请改成引号 “xxx.h”
如果编译报错提⽰ 错失 或 ⽆法⽣成 dtb , 那就要注意了 需要指定O=output ,并且 到根⽬录 Kernel.下的 .config⽂件 删掉 , 到 include/下的 config⽂件夹 删掉 (包括⽂件夹) 这玩意浪费了我很多时间 差点放弃
注意环境变量配置 ,如果按我做的还是出现错误,请 把对应的内核⽂件夹和编译链⽂件夹 移动到 /桌⾯/的上⼀级 , 意思就是 这些⽂件放不在桌⾯进⾏编译, ⽽是放在别的 地⽅, 可能中⽂的 '桌⾯’⼆字会 影响编译, 还有我曾经⼀度怀疑 ⼩⽶开源的内核是不完整的, 最后发现不是. 所以请先相信⼩⽶.
请在每次出现错误之后 修改完错误后 想要重新编译时 请先执⾏ make clean ⼀下, 删除上次的⽂件 以免影响本次编译
,甚⾄ 多次⽆果时 你可尝试 删掉按本教程重来. 多试⼏次
注意⼿机代号对应的 xxx_user_defconfig, 没有才选 cpu代号_defconfig, 或者看看你的⼿机有没有⼈发贴 看别⼈怎么弄
其他
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论