仪器设备:虚拟机Vmware12 + Ubuntu 16.04(内核linux4.8.0)
虚拟机与ubuntu的安装见我的上两篇博客,本文步骤是本人亲测编译成功的,所以有一定的参考价值
linux内核编译完整步骤如下:
1. 查询自己系统的内核版本号: cat /proc/version
为什么要查询自己的内核版本号?因为最好你要编译的内核与你现在的系统内核版本属于同一系列的,比如我的操作系统内核版本为4.8.0-49,而我要编译的内核版本号为4.8.0。 如果不一样的话会出现各种让人头疼的问题(我前期装的4.4版本的,一直报错。。),所以一致的话最起码环境配置都会一样的,不存在兼容问题
2. 查询ubuntu仓里有哪些版本的内核: sudo apt-get search linux-source
会出现好多内核版本,选择合适的版本进行下载
3. 下载linux内核: sudo apt-get install linux-source-X.X.X(对应的版本 比如我的linux-source-4.8.0)
强烈建议通过此方式下载linux源,我试过先从浏览器下载好内核压缩包,再解压安装,装了三次都出现了问题,所以避免麻烦还是从仓库里下载吧
4. 下载后会在/usr/src里出现linux-source-4.8.0 与linux-source-4.8.0.tar.bz2两个文件。将压缩文件linux-source-4.8.0.tar.bz2解压
sudo tar -xjvf linux-source-4.8.0.tar.bz2
默认会装在linux-source-4.8.0文件夹里
5. 进入linux-source-4.8.0文件夹:cd /usr/src/linux-source-4.8.0
6. 配置.config文件
① 如果不是第一次编译内核,一定要执行 sudo make mrproper,清理以前留下的临时文件
② 如果是编译内核的新手,对config的具体配置感到无从下手,建议就按照原操作系统进行配置,将原先配置拷贝过来: sudo cp /boot/config-4.8.0-49-generic .config
(config-4.8.0-49-generic为操作系统的配置, 这条语句要执行无误,确保已经进入了linux-source-4.8.0目录下,这样.config才能复制到正确的位置)
接着执行 sudo make oldconfig (确认执行原有配置)
③ 如果自己想定制系统,那就执行: sudo make menuconfig(里面的配置详解见网址:http://blog.csdn.net/xuyuefei1988/article/details/8635539。这里注意如果是在
虚拟机下编译的,要把SCSI设备编译进内核,不在虚拟机下编译,加不加都可以)。在配置完成后会生成新的.config文件
配置.config文件的过程中会出现一些错误,解决办法如下:
① fatal error: openssl/sha.h: No such file or directory之类的,是因为缺少libssl-dev包
解决方法: sudo apt-get install libssl-dev
②curses.h: No such file or directory
解决办法: sudo apt-get install libncurses5-dev libncursesw5-dev
7. 编译内核: sudo make
时间较长,耐心等待(新的内核编译过程已经优化, sudo make 相当于执行了 sudo make bzImage 和 sudo make modules两步了)
8. 编译和安装内核模块: sudo make modules_install
9. 安装内核: sudo make install
10. 生成启动: sudo mkinitramfs -o /boot/initrd.img-4.8.0
sudo update-initramfs -c -k 4.8.0
11. 再次重启ubuntu要可以进入引导界面,以便于选择用哪个内核启动,所以配置grub使每次开机都可以进入引导界面: sudo gedit /etc/default/grub
在grub文件中用"#"注释GRUB_HIDDEN_TIMEOUT=0语句: #GRUB_HIDDEN_TIMEOUT=0
12. 更新grub: sudo update-grub2
之后重启ubuntu,自动进入引导界面,选择自己编译的内核,启动。用"uname -r" 查看现在启动的版本,如果是你编译的版本,OK,大功告成!
后记:对于自己不想要的内核,如何删除?
① 先查看有哪些内核版本在你的电脑上: sudo dpkg --get-selections | grep linux
② 删除指定的版本: sudo apt-get remove linux-image-(接内核版本)
sudo apt-get remove linux-headers-(接内核版本)
③ 再次查看是否卸载:sudo dpkg --get-selections | grep linux
jdiwjediowjeijfiwe