编译安卓内核前须要打算的东西。

一台支持解锁bootloader的手机官方开源地址,或则第三方整合好的也行一个linux环境,虚拟机、wsl、termux等都可以看得懂英文

开始操作!

一、从你的手机上面提取config.gz文件,在/proc/config.gz路径,这个文件是建立你手机内核的配置文件,这个默认是官方的,假如没有这个文件android的linux内核,那你须要通过解包boot.img来获取,稍后会说。

二、拉取你官方开源的内核源码以及设备树(安卓9之后,默认只开源内核了,设备树这种,都不再开放了)。

从你的品牌官方获取开源代码,例如魅族开源地址,诺基亚开源地址,真我手机开源地址。把源码拉取到本地。

假如你不想用官方的,想用第三方的,例如LineageOS,Crdroid也可以。

你没有官方开源也没有第三方官方支持,那你可以不用看了,省点流量跟电量android的linux内核,去做别的事情吧--。

linux内核android_android的linux内核_内核是什么意思

#git拉取示例
#--depth=1代表只拉取最新的源码,可以极大减少拉取后的体积,缩减拉取时间
git clone --depth=1 https://github.com/ProjectBlaze-Devices/kernel_xiaomi_chime

三、配置基本完善环境。

1.安装Linux环境。(wsl、vm虚拟机、双系统实体机的Linux,都可以)

2.安装编译工具。

Debian系列:(包括Ubuntu、Linuxmint、优麒麟、Uos、termux)

#Debian系列:
apt-get install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick
lib32ncurses5-dev lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libncurses5 libncurses5-dev
libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync
schedtool squashfs-tools xsltproc
zip zlib1g-dev

ArchLinux系列

pacman -Syu git
cd ~ 
git clone https://aur.archlinux.org/aosp-devel.git
cd aosp-devel
makepkg -si

其它系列,自行查找对应的工具安装.

3.拉取内核编译工具(刚才只是安装基本完善环境,这个编译工具才是重头戏,建立安卓内核的工具,只能从安卓源码上面拉取,但是有版本限制,太新不行,太老了也不行)

直接去LineageOS的GitHub官方库房拉取

#官方GitHub拉取
git clone https://github.com/LineageOS/android_prebuilts_clang_kernel_linux-x86_clang-r416183b
#国内gitee拉取
git clone https://gitee.com/SorryMyLife/android_prebuilts_clang_kernel_linux-x86_clang-r416183b
#如果你还需要GCC进行编译,那么就拉取这个
#arm64
git clone https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9
#国内gitee
git clone https://gitee.com/SorryMyLife/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9
#arm32
git clone https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9
#国内gitee
git clone https://gitee.com/SorryMyLife/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9

去Googlesource官方拉取

假如你有才艺linux服务器代维,可以直接访问Google

#arm64的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9
#arm32的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
#arm64的clang
git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86

国外的临时解决方案

git config --global url."https://mirrors.tuna.tsinghua.edu.cn/git/AOSP".insteadOf https://android.googlesource.com
#arm64的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9
#上面配置完后,再拉取下面的代码,就可以了
#arm32的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
#arm64的clang
git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86

四、开始建立内核源码

android的linux内核_内核是什么意思_linux内核android

先去你的内核源码上面瞧瞧,有没有config文件。

cd 你的内核源码文件夹/arch/你的设备架构/configs/

通常配置文件会在这儿,以你这台设备的代号命名,例如你的手机代号(codename)称作lime,这么这个位置会有个带lime字母的config文件。

cd 你的内核源码文件夹/arch/你的设备架构/configs/vendor/

有的则是在这个路径下的vendor文件夹上面

设备代号为chime的示例(可能会难以访问,最好带才艺进去)

假如上面没有config文件,这么你就须要从你的官方boot上面提取了,先下载或则从你设备提取boot分区下来,上传到Linux环境上面,cd到内核源码上面LINUX社区,执行scripts/extract-ikconfig工具提取config信息。

cd 你的内核源码路径
./scripts/extract-ikconfig 你的boot分区文件路径 >> device_config
cp device_config arch/你的设备cpu架构/configs/你的设备代号名称_config
#或者这样
cp device_config arch/你的设备cpu架构/configs/temp_config
#取一个临时的名字

2.解决完config文件后,这么就开始建立内核。

cd 你的内核源码路径
#告诉编译器你构建的是arm64的内核,如果你不是64位的,那就把64删掉
export ARCH=arm64
export SUBARCH=arm64
#配置之前同步好的内核编译器环境变量,让当前环境可以直接使用
#/home/sir/pstar/kernel/clang是clang编译器的路径
#它下面的bin则是可执行二进制文件存放的文件夹,我们需要调用这个里面的程序来开始构建内核
export PATH="/home/sir/pstar/kernel/clang/bin:/home/sir/pstar/kernel/gcc64/bin:/home/sir/pstar/kernel/gcc32/bin:$PATH"
args="-j$(nproc --all)  #-j$(nproc --all)这里是说用当年环境下最高的cpu线程进行编译
ARCH=arm64  
SUBARCH=arm64 
O=out  #输出路径是在当前位置的out文件夹
CC=clang  #指定C语言文件编译器为clang
CROSS_COMPILE=aarch64-linux-android-  #配置交叉编译的目标平台为arm64
CROSS_COMPILE_ARM32=arm-linux-androideabi-  #配置32位交叉编译器
CLANG_TRIPLE=aarch64-linux-gnu- " #负责交叉编译的Linux编译器
#这个也不清楚干嘛用的,就是它在构建的时候,需要用到Linux的一些标准库内容
#但是安卓的编译器阉割了,直接用安卓的编译,会出现很多莫名其妙的错误,所以就需要再配置一下这个编译器了
#如果你的设备是32位的,这里也要修改的
#清理之前构建的残留内容
make clean && make mrproper
#删除out文件夹,也就是之前指定输出的文件夹
rm -rf out 
#新建out文件夹,用来保存临时产生的垃圾文件还有最终生成的内核文件
mkdir -p out
#先检测配置文件有没有问题,进行初次构建
make ${args} vendor/lineageos_pstar_defconfig 
#这里如果不加vendor,就会读取
#内核源码/arch/你的设备架构/configs/里面的配置文件
#这个完整路径为: 内核源码/arch/你的设备架构/configs/vendor/lineageos_pstar_defconfig 
#不加vendor的完整路径为:内核源码/arch/你的设备架构/configs/lineageos_pstar_defconfig 
#这里的args就是上面设置的临时变量args里面的内容
#开始构建内核
make ${args} 

3.建立内核中若果出现一些报错,你应当去GitHub上面搜索,而不是用百度

4.建立完成的内核文件会依照不同的压缩规则储存在:

你的内核源码/out/arch/你的设备架构/boot/

END

参考文章:红米开源诺基亚开源

本文原创地址:https://www.linuxprobe.com/byaznhqxyzbd.html编辑:刘遄,审核员:暂无