说明: x86平台的linux内核和android内核在编译上基本相似, 可用同样的方法编译. 本文适合只编译内核.
本文基于Ubuntu 18.04 64位 . 并基于ubuntu采用rpm包安装android.
如有需要,请自行网上查找 android-x86-8.1-r2.x86_64.rpm.
运行以下命令安装编译环境.
sudo apt -y install git gcc curl make repo xmllint flex m4
sudo apt -y install openjdk-8-jdk lib32stdc++6 libelf-dev
sudo apt -y install libssl-dev python-mako syslinux-utils
sudo apt -y install bison
sudo apt -y install build-essential
sudo apt -y install libncurses-dev
不同的Linux版本和安装环境 , 可能所需安装的软件不一致.
在编译时如报错缺少软件, 请根据情况自行安装.
Linux 内核下载
https://www.kernel.org/
点击对应版本 [tarball] 标签进入下载压缩包
android x86内核下载
https://sourceforge.net/p/android-x86/kernel/ci/kernel-4.19/tree/
先在页面的左边选择要下载的内核版本
然后在页面的右上方点击 [Download Snapshot], 等待生成压缩包下载
将下载下来的压缩包解压, 进入解压后的文件所在目录打开终端.
注意: 不要使用windows格式的分区,比如NTFS分区.linux内核编译需要的空间比较大,空闲空间不能少于20G.
---------------------------------------------------linux kernel ----------------------------------------------
make x86_64_defconfig -C . O=../../../linuxk4.19.57
cd ../../../linuxk4.19.57
make menuconfig
make INSTALL_MOD_STRIP=1 targz-pkg -j8
注:
O=…/…/…/linuxk4.19.57 输出目录, 请根据需要自行更改.
配置文件config可以参考在自己电脑上正常运行的版本(在/boot目录内, 如下图以config开头的文件)
INSTALL_MOD_STRIP=1 重要,没有这个很可能module目录会非常大(看环境)
j8 参数指支持8线程同时编译,根据自己的CPU线程数修改(比如j4), 线程数少了编译的时间变长.
----------------------------------------------android kernel----------------------------------------------
make android-x86_64_defconfig -C . O=../../../androidk
cd ../../../androidk
make menuconfig
make INSTALL_MOD_STRIP=1 targz-pkg -j8
注:
参考前面linux内核编译说明
如果要使用已知内核的config, 使用内核提取命令 ./scripts/extract-ikconfig
把要提取的内核(kernel)复制到源文件夹下, 在源文件夹下使用
./scripts/extract-ikconfig kernel > config_file
config_file: 可自行命名
---------------------------------------------linux内核安装----------------------------------------------------
sudo tar -zxf linux-4.19.57-x86.tar.gz -C /
sudo mkinitramfs 4.19.57 -o /boot/initrd.img-4.19.57
sudo update-grub
注:
4.19.57 为编译生成/lib/modules下的目录名称.
第一行命令把文件安装到所需的目录
第二行命令生制作initrd.img.
第三行更新启动项
----------------------------------------------android 内核安装-----------------------------------------------
android内核的安装和linux完全不同.
本文采用简单的替换法来更换已安装的内核
进入android的安装目录,如下图的所示,根目录下的 android-8.1-r2
在/android-8.1-r2下打开终端
挂载system.img文件到data
sudo mount -o loop system.img data
如果你的是system.sfs 可同理先挂载system.sfs, 将里面的system.img文件复制出来后再挂载它. 并将system.sfs转移到其它目录.
cd ./data/lib/modules
sudo rm -rf *
删除modules内原来的module文件,如果不删除,可能会空间不足.
解压编译目录内的压缩包或进入编译目录的 tar-install 目录,得到如下图所示的目录
进入图中的boot目录
将vmlinuz文件(如上图中vmlinuz-4.19.50-x64-opt-01)改名为kernel
并在此目录打开终端运行以下命令:
sudo cp kernel /android-8.1-r2/kernel
cd ../lib/modules
sudo cp * /android-8.1-r2/data/lib/modules/
sudo umount /android-8.1-r2/data
注: 以上命令
第一行, 把kernel复制到android安装目录并替换掉原来的kernel
第二行, 进入自己编译的module文件目录
第三行, 把自己编译的module文件目录复制到system.img文件内(就是之前删除的那里)
第四行, umount system.img文件
至此, kernel和modules替换完
http://www.jinbuguo.com/kernel/longterm-linux-kernel-options.html
https://blog.csdn.net/ye1223/article/details/83869235#auth_name
http://www.manongjc.com/article/45673.html
https://blog.csdn.net/wangyachao0803/article/details/81380889