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


修改內核的核心意義是在於根據主機量身定制內核以發揮最大效率, 本次純屬瞎折騰.
報錯一般百度都能解決, 順便貼一下瀏覽記錄:

