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 found
mac-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