瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
CentOS 7.4下
-
原内核版本: 3.10.0-693.el7.x86_64
-
改后内核版本: 4.16.2
-
系统版本: CentOS-7-x86_64-Minimal-1708.iso
-
运行环境: VMware14.0 Pro虚拟机
刚好学到内核这里, 做了两个实验:
-
最小化最小系统, 开机仅启动bash
-
更换内核
- 更换CentOS6的2.6.32至3.10.67, 据说过了这个内核就编译不了了, 试过编译4.16.2, 各种缺包缺库就放弃了
- CentOS 7 编译内核并更换
最小化最小系统, 开机仅启动bash:
新建硬盘并添加, 新建分区格式化
fdisk /dev/sdb //新建分区 n-->p-->1-->+100M //放grub启动 n-->p-->2-->+2G //swap t 2 82 n-->p-->3-->+5G // / mke2fs -t ext4 /dev/sdb1 //格式化,做boot mke2fs -t ext4 /dev/sdb3 //做根分区 mkswap /dev/sdb2 partx -a /dev/sdb //刷新识别 partx -a /dev/sdb
mkdir /tmp/boot //创建dir mount /dev/sdb1 /tmp/boot //挂载 grub-install --root-directory=/tmp /dev/sdb //至关重要, 指明boot目录, 创建Bootloader, MBR前446个字节 cp /boot/vmlinuz-2.6.32-696.23.1.el6.x86_64 /tmp/boot/vmlinuz //复制内核 cp /boot/initramfs-2.6.32-696.23.1.el6.x86_64.img /tmp/boot/initramfs.img //复制ramfs vim /tmp/boot/grub/grub.conf //编辑grub配置文件 default=0 timeout=5 //读秒 titel CentOS6 [ugly] //标题(开机grub表中) root(hd0,0) //指定位置, 注意硬盘表示方法, 玩过Windows的Ghost会比较眼熟; 本地重启设置 root(hd1,0),即第二块硬盘, sda要改成sdb kernel /vimlinuz ro selinux=0 root=/dev/sda3 init=/bin/bash //重点, 指定内核位置, 关闭selinux, 指定根目录位置, kernel初始化后第一个启动的为/bin/bash, 而不是init initrd /initramfs.img //指明ramfs位置 mkdir /tmp/sys mount /dev/sdb3 /tmp/sys //挂载 cd /tmp/sys mkdir -pv etc bin sbin usr lib lib64 dev mnt tmp sys proc media var home root //建立假根文件夹 cp /bin/bash /tmp/sys/bin //复制bash ldd /bin/bash // 查看bash的依赖库 cp /lib64/libtinfo.so.5 ./lib64 //复制依赖库
...
chroot /tmp/sys //切换bash查看是否可以运行
reboot //重启*
*: 卸载硬盘新建虚拟机运行起来了, 只有内建命令,啥也没有
更换CentOS 6.9 的2.6.32至3.10.67
下载源码编译, 不是yum
准备环境:
yum -y groupinstall 'Development Tools' 'Server Platform Development'
下载源码
wget https://mirrors.aliyun.com/linux-kernel/v3.x/linux-3.10.67.tar.xz tar JxPf linux-3.10.67.tar.xz -C /usr/src cd /usr/src/linux-3.10.67 //打开目录 make menuconfig //图形界面编辑kernel, 内置或模块或取消; 编译和安装模块的过程中有一大堆没有用的driver,<暗中观察了一下, AMD的显卡最耗时间> 浪费大量时间, 选择时可以取消; //此处以下开始编译, 建议在本地监视器上运行 make -j8 //8线程同时编译 //大约30分钟 make modules_install make install
CentOS6 上编译完成后直接重启, 并没有编辑grub, 直接有了选项, 建议还是编辑一下grub比较好:
grub2-set-default 0 grub2-mkconfig -o /etc/grub2.cfg
// 来自https://blog.csdn.net/breeze915/article/details/79243673
尝试在CentOS6上编译过4.16.2,最后跪了, 不了了之;
更换CentOS 7.4 的3.10.0至4.16.2
准备安装环境:
基于CentOS 6上编译失败的经验, 这次准备了很多组
yum -y groupinstall 'Development and Creative Workstation' 'Compatibility Libraries' 'System Administration Tools' 'System Management' 'Development Tools' //基本够用, 后面还有的直接加了
下载源码
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.2.tar.xz
mv linux-4.16.2.tar.xz /usr/src //老位置,还是熟悉的配方,还是熟悉的味道
cd /usr/src
ls
tar Jxf linux-4.16.2.tar.xz //移动到这里解压, 跟上面的-C效果一样的
cd linux-4.16.2
源码准备妥当, 开干
yum -y install ncurses-devel libncurses-dev //make menuconfig直接提示要安装, 省得百度报错信息找解决方案
make menuconfig //配置信息, 这里并没有去复制原内核的配置, 在配置信息里瞎点, 减了一堆驱动下去, 编译快多了
make -j8 //满负载运行
//报错,装包
yum -y install ncurses-devel libncurses-dev elfutils-libelf-devel openssl-devel openssl
make -j8 //继续
make modules_install
make install
//安装完成, reboot后发现内核不在, 看了看发现安装报错,磁盘不够用了, 囧
//以后说说btrfs增加容量的事儿
grub2-set-default 'CentOS Linux (4.16.2) 7 (Core)'
reboot
修改内核的核心意义是在于根据主机量身定制内核以发挥最大效率, 本次纯属瞎折腾.
报错一般百度都能解决, 顺便贴一下浏览记录: