瞎折騰-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虛擬機

剛好學到內核這里, 做了兩個實驗: 

  1. 最小化最小系統, 開機僅啟動bash

  2. 更換內核

    1. 更換CentOS6的2.6.32至3.10.67, 據說過了這個內核就編譯不了了, 試過編譯4.16.2, 各種缺包缺庫就放棄了
    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

 

 

 

 



 

 修改內核的核心意義是在於根據主機量身定制內核以發揮最大效率, 本次純屬瞎折騰.

 報錯一般百度都能解決, 順便貼一下瀏覽記錄:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM