How To Compile Android Kernel On OSX
2022-03-27
(在OSX上用clang编译arm64的安卓内核)
First of All: 一个区分大小写的文件系统
(OSX文件系统不区分大小写, 导致下载/解压时不同文件的覆盖(文件缺少))
打开磁盘工具, 创建一个区分大小写的APFS宗卷, 所有工作都在这个宗卷里进行.
通过 repo 下载源码
执行 build/build.sh 构建内核 官方链接
编译好的东西在 ./out/ 里
配置环境
-
下载交叉编译器 下载 clang, 不再支持gcc.
$ pwd /Path/To/prebuilts-master/clang/host $ git clone https://android.googlesource.com/platform/prebuilts/clang/host/darwin-x86 -
./build/_setup_env.sh替换readlink为greadlink.export ROOT_DIR=$PWD改为export ROOT_DIR=$(greadlink -f $PWD) -
./build/build.sh替换readlink为greadlink. (可能需要brew install coreutils) 替换tar为gtar. -
./private/msm-google/build.config.common替换linux-x86为darwin-x86. (同时确认所指向的几个路径正确) -
private/msm-google-modules/wlan/qcacld-3.0/Makefile``readlink替换为greadlink`. -
./private/msm-google/Makefile- 给
HOSTCFLAGS变量增加一个路径:HOSTCFLAGS := -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk brew install libelf. 然后给HOSTCFLAGS变量增加一个路径:HOSTCFLAGS := -I/usr/local/include(解决'elf.h' file not found)- 将
sed -e改为gsed -e
- 给
-
./private/msm-google/arch/arm64/kernel/vdso/gen_vdso_offsets.sh将's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p'改为's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2 0x\1/p'(将\t改成空格或制表符) (解决use of undeclared identifier ‘vdso_offset_sigtramp') -
./private/msm-google/scripts/Makefile.modpost去掉xargs后面的-r -
./private/msm-google/scripts/link-vmlinux.sh将stat改为gstat -
./private/msm-google/scripts/headers_install.sh将sed -r改为gsed -r
其他错误
-
'asm/types.h' file not foundmac-linux-headers 按照README增加头文件 -
缺少dtc/extract_dtb/lz4c/mkdtimg/ufdt_apply_overlay
整理了一些: AOSP_KernelCompileTools
确认以下文件存在
-
dtc(./prebuilts-master/misc/darwin-x86/dtc/dtc) 目前只能从ASOP中把编译好的拷贝过去… 可能有用的链接🔗: Github dgibson/dtc -
mkdtimg() 目前只能从ASOP中把编译好的拷贝过去… 可能有用的链接🔗: libufdt mkdtimg mkdtimg (DEPRECATED, use mkdtboimg.py instead.) -
extract_dtb(./prebuilts-master/misc/darwin-x86/libufdt/extract_dtb) 目前只能从ASOP中把编译好的拷贝过去… -
ufdt_apply_overlay(./prebuilts-master/misc/darwin-x86/libufdt/ufdt_apply_overlay)目前只能从ASOP中把编译好的拷贝过去…
-
lz4c(./prebuilts-master/misc/darwin-x86/lz4/lz4c) 似乎可以下载源代码进行编译git clone https://android.googlesource.com/platform/external/lz4; 似乎也可以brew install lz4; 似乎osx系统会自带?where lz4c.
Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler(这个报错在我进行了和如下操作(解决'elf.h' file not found的操作)后就消失了, 没能成功复现)brew install libelf给./private/msm-google/Makefile中的HOSTCFLAGS变量增加一个路径:HOSTCFLAGS := -I/usr/local/include