Android硬件技术的第一章作业有编译内核这一项,参考网上的编译内核过程自己操作了一遍,现在在实验报告里记录下来。
整个过程参考了多篇文章,主要按下面链接这篇教程选取自己需要的部分一步步做的。(因为装的是双系统不是虚拟机所以有些虚拟机的操作就省去了)
https://www.cnblogs.com/acm-icpcer/p/8029656.html
下面做一下自己按教程操作的实验记录。
1.先到www.kernel.org下载内核源码。
我下载的是最新的稳定版。
2.下载完成以后解压。
3.安装基本的编译工具
逐次在终端执行下面四条命令。
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
4.在终端进入解压的内核源码的目录或在内核源码的目录中打开终端。
5.依次执行下面三条命令。
sudo make mrproper
sudo make clean
sudo make menuconfig
sudo make mrproper:清除编译过程中产生的所有中间文件
sudo make clean:清除上一次编译产生的中间文件
sudo make menuconfig:会出现图形化界面
我在执行sudo make menuconfig时遇到了错误
上网对错误进行搜索以后,根据下面这篇文章所说的,缺哪个包安装哪个包,对bison包和flex包进行了安装。
https://blog.csdn.net/zxhio/article/details/80312316
安装完这两个包,再执行sudo make menuconfig命令,就进入到图形化界面了。
出现此图形化界面后,直接按右方向键选择到exit退出,退出提示中选择保存,实现内核的默认配置。
6.执行命令sudo make -j4
j后面跟的参数是电脑cpu的进程数,用终端命令和上网查了一下得知我的电脑是双核四线程的,所以执行-j4,4个线程并行编译,编译速度是普通make命令的4倍。这一步通常要等比较长时间等它执行完。
去吃了个饭回来终于运行完了!开心!
7.接着依次执行下面的命令
sudo make modules_install //安装内核模块
sudo make install //安装内核
输入sudo make install的命令,却发现报错,根据报错信息安装libelf-dev包。
再运行一遍sudo make install命令,提示/boot分区空间不足。
于是上网查找解决办法,删除旧内核释放空间。
按下面这篇教程的命令删除了一个不用的旧内核。
https://blog.csdn.net/Tong_jy/article/details/79730247
删掉一个内核以后/boot分区的可用空间大了很多。
重新执行sudo make install ,还是提示/boot分区磁盘不足。
于是使用另一种方法。
http://www.bubuko.com/infodetail-524227.html
查找资料后,我选择将原来的/boot分区挂载到更大的空间,按照下面这篇教程来做。
https://blog.csdn.net/u013022149/article/details/60955225(ubuntu由于/boot空间不足导致升级失败解决办法)
发现umount /boot的时候提示target is busy,然后再去找这个问题的解决办法。
然后发现可以用umount -fl /boot 命令强制卸载。
umount以后再按上面教程重新挂载/boot到更大的空间,再重新执行 sudo make install ,成功。
可以看到文件夹中出现了新内核。
到这里新内核就成功嵌入操作系统啦!
8.最后重启操作系统,在进入界面的高级选项里选用新内核。
这样新内核就正式启用啦!整个编译内核的过程就完成啦!