arm-gcc-path
系统要求
Linux 64位+(deepin其实很好用)
50GB+ 存储空间
8G+ 内存(最好,不是一定)
jdk 1.8 + (不要用9或者10)
一些说明
配置,开源的,但并不代表这就会很成功的完成工作,适用于kernel build
环境配置
0. /home/USER_NAME/.bashrc,动态环境配置,在这里配置gcc和用户的环境(比etc/profile方便点吧)*.这是一个隐藏文件
1. 一定要在在前或者后加上$PATH,加上后就会在原有的PATH上新加环境变量,不然会替代默认的PATH,后果很严重
export PATH=/xxx/xxx:$PATH
export PATH=$PATH:/xxx/xxx
2. 下载arm-linux-gcc,解压,修改.bashrc就能添加gcc环境,
需要32位和64位
source /home/USER_NAME/.bashrc
#The is x86
export PATH=$PATH:/home/USER_NAME/arm-gcc/arm/arm-linux-androideabi-4.9/bin/
#The is x64
export PATH=$PATH:/home/USER_NAME/arm-gcc/aarch64/aarch64-linux-android-4.9/bin/
*.USER_NAME:指你的用户名,这个目录也就是你的用户根目录
2.1..export PATH=$PATH:/home/USER_NAME/gcc目录/bin/
3.终端上:
arm-linux-android,然后按下tab键,就能看到一大堆
arm-linux-androideabi-addr2line arm-linux-androideabi-ld.gold
arm-linux-androideabi-ar arm-linux-androideabi-nm
arm-linux-androideabi-as arm-linux-androideabi-objcopy
arm-linux-androideabi-c++ arm-linux-androideabi-objdump
arm-linux-androideabi-c++filt arm-linux-androideabi-ranlib
arm-linux-androideabi-cpp arm-linux-androideabi-readelf
arm-linux-androideabi-dwp arm-linux-androideabi-size
arm-linux-androideabi-elfedit arm-linux-androideabi-strings
arm-linux-androideabi-g++ arm-linux-androideabi-strip
arm-linux-androideabi-gcc arm-linux-androidkernel-ar
......
4.查看arm-gcc版本:
arm-linux-androideabi-gcc -v
aarch64-linux-android-gcc -v
5.配置/kernel/Makefile ,指定arm-linux-命令,和平台(后面不能有空格)
#32位配置
ARCH?= arm:平台
CROSS_COMPILE?= arm-linux-androideabi-:配置GCC命令(来自上面配置的命令除去-gcc那一段)
#64位配置
ARCH?= arm64
CROSS_COMPILE?= aarch64-linux-android-
6.make menuconfig进行配置内核 (图形化界面好看)
make menuconfig出现缺少cures.h,是因为缺少ncurses devel套件
sudo apt-get install libncurses5-dev
7.make menuconfig
实际上是用于生成配置文件,使用方式内核配置 -> 4
8.缺少的组件
sudo apt-get install libssl-dev
内核配置
1. PATH是如何配置环境变量,这里记录如何配置内核
2. make命令
#配置
make menuconfig
#加载编译配置
make
make O=
#编译,输出到out目录
make -j$(nproc --all)
make O=out -j$(nproc --all)
#清除所有编译结果
make distclean
make mrproper
make O=out mrproper
3. /kernel/msm-4.4/arch/arm64/configs
有个sdm660-NX611J_defconfig是配置好的
make sdm660-NX611J_defconfig
#生成默认配置
4. 也可以通过make menuconfig生成,*.config,魔改内核
将内核源代码里的.config文件复制到arch/arm64/configs/
重命名FILE_NAME_defconfig
然后在进行make FILE_NAME_defconfig
#生成配置
*.make menuconfig将更改保存到内核源代码中的.config文件中。 您需要将该文件复制到arch/arm64/configs/
问题
**1.**
可能会出现一堆inclued 的引用问题,明明xxx.h就在文件目录下,这个问题不清楚原理
解决方案就是通过把配置文件.confg,编译的o文件,都集中到out文件夹
使用out文件作为编译目录的编译方式:
清理1:make O=out clean
清理2:make O=out mrproper
配置到out:make O=out xxx_defconfig
编译到out:make O=out -j$(nproc --all)
*.$(nproc --all)可以改成一段数字,-j6,6个线程编译
**2.**
我不知道为什么,使用了sdm660_nx611j_perf_defconfig就会编译失败,只要带perf
*.带perf报的错误内容是,某个函数或某个参数第一次在该函数内使用,这个错误一般来自于内核配置问题
切记:在不是魔改内核的情况下,使用sdm660-NX611J_defconfig,不带perf性能这个的
打包
内核会输出在kernel/msm-4.4/out/arch/arm64/boot里
dts,Image,Image.gz,Iamge.gz-dts
**1.**
1.取一个官方boot.img
2.放到mkboot文件夹下
3.cd mkboot
4.解压这个内核:./unpackimg.sh .img
5.找到split_img下的boot.img-zImage
6.重命名Iamge.gz-dts为boot.img-zImage
7../repackimg.sh
8.找到unsigned-new.img重命名为boot.img,刷入
目标
来自于https://translate.googleusercontent.com/translate_c?depth=1&hl=zh-CN&prev=search&rurl=translate.google.com.hk&sl=en&sp=nmt4&u=https://forum.xda-developers.com/android/software-hacking/reference-how-to-compile-android-kernel-t3627297&xid=17259,15700023,15700124,15700149,15700168,15700186,15700190,15700201,15700208&usg=ALkJrhg6cIYeUqDKbK5tT8nJPtUDbgBcOw