Linux内核编译
下载Linux内核源码
Linux内核官方网站
内核编译
环境配置
1
2
3
4
5
6
7
8
9
10 1 sudo apt-get install libncurses5-dev openssl libssl-dev
2 sudo apt-get install build-essential openssl
3 sudo apt-get install pkg-config
4 sudo apt-get install libc6-dev
5 sudo apt-get install bison
6 sudo apt-get install flex
7 sudo apt-get install libelf-dev
8 sudo apt-get install zlibc minizip
9 sudo apt-get install libidn11-dev libidn11
10
解压内核
1
2
3 1 tar -xavf linux-5.0.2.tar.xz -C /usr/src
2 cd /usr/src/linux-5.0.2
3
使用tar解压时 带上参数-C解压到指定目录
净化源码
1
2 1 make mrproper
2
配置内核选项
先在你的/boot目录下找到其他内核选项配置
1
2
3
4 1 cp /boot/config-'uname -r'-generic ./.config
2 make menuconfig
3
4
出现 “*** 没有规则可制作目标'menuconfig'”问题,是因为make menuconfig命令需要进入内核源码目录才能使用,但是linux系统默认安装时没有安装内核源码,需要手动下载,在终端输入sudo apt-get install linux-source然后到/usr/src/目录下找到对应的.bz2文件进行解压,然后到该目录下执行make menuconfig
1
2
3
4
5 1 tar -xvjf linux-source-'uname -r'.tar.bz2 -C /home/kernel
2 cd /home/kernel/linux-source-'uname -r'
3 make menuconfig
4
5
若能打开页面回到下载的内核的路径下cd /usr/src/linux-5.0.2然后在用make menuconfig配置内核选项
选择load+OK+Save+OK+EXIT+EXIT
删除多余配置文件
1
2 1 make clean
2
如果第一次编译内核则不需要进行处理,多次编译内核可以执行该命令来节省空间
开始编译
1
2 1 make bzImage
2
大概花费十几分钟就可以完成对刚才在内核选项中选中设置的编译
编译模块
1
2 1 make modules
2
安装模块
1
2
3 1 make modules_install
2
3
一般情况下要给\根目录分配50G左右的空间,如果在这一步出现空间不足的情况就需要重新划分分区,当然整个系统的空间在你装好系统的那一刻已经定了,所以只能把其他分区的空间挪给\分区
-
在当前系统上装好GParted分区软件 sudo apt-get install gparted
-
准备一个Ubuntu系统的U盘启动盘
-
使用U盘启动,进入试用系统
-
在试用系统中使用Bash搜索GParted,打开软件选择对应盘符就可以对系统进行分区操作完成根目录的扩展(GParted使用方法)
待模块安装完成,若在 /lib/modules/目录下生成了一个KERNEL_VERSION(5.0.2)则说明编译成功
空间配置
1
2
3 1 mkinitramfs /lib/modules/5.0.2 -o /boot/initrd.img-5.0.2-generic
2
3
编译完成
到此为止,构建内核已经完成,把内核映像和System.map拷贝到/boot/目录下
1
2
3
4
5 1 cp /usr/src/linux-5.0.2/arch/x86/boot/bzImage /boot/vmlinuz-5.0.2-generic
2 cp /usr/src/linux-5.0.2/System.map /boot/System.map-5.0.2
3 ln -s /boot/System.map-5.0.2 /boot/System.map
4
5
或者执行make install一次性完成
修改grup配置文件
1
2
3
4
5 1 cd /boot/grub/grub.cfg
2 chmod 777 grub.cfg
3 update-grub2
4
5
查看grub文件
更新grub.cfg之后,文件中会出现新内核的启动目录,vim /boot/grub/grub.cfg查看内容
vmlinuz:可引导、可压缩的内核,vmlinuz被加载后才能完成各种模块、服务的加载运行
initrd.img:挂载根目录‘/’,以及其他的目录,比如:bin,dev,proc,sbin,sys等linux启动时必须的目录
vmlinuz initrd.img和System.map详解
在grub.cfg找到这两个关键配置之后,内核就可以成功启动了,重启之后进入新内核,在终端输入uname -r查看新内核
卸载内核
删除内核文件
1
2
3
4
5
6 1rm /boot/vmlinuz*KERNEL-VERSION*
2rm /boot/initrd*KERNEL-VERSION*•
3rm /boot/System-map*KERNEL-VERSION*•
4rm /boot/config-KERNEL-VERSION•
5rm -rf /lib/modules
6
最后使用update-grub更新grub