什么是bzImage
bzImage誠如其名是big image的意思,不是壓縮的image。
在網絡中,不少服務器采用的是Linux系統。為了進一步提高服務器的性能,可能需要根據特定的硬件及需求重新編譯Linux內核。編譯Linux 內核,需要根據規定的步驟進行,編譯內核過程中涉及到幾個重要的文件。編譯過RedHat Linux內核的人對其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比較深刻,因為編譯內核過程中涉及到這些文件的建立等操作。那么這些文件是怎么產生的呢?以vmlinuz為例。
vmlinuz是可引導的、壓縮的內核。“vm”代表“Virtual Memory”。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制。Linux能夠使用硬盤空間作為虛擬內存,因此得名“vm”。vmlinuz是可執行 的Linux內核,它位於/boot/vmlinuz,它一般是一個軟鏈接。
vmlinuz的建立有兩種方式。一是編譯內核時通過“make zImage”創建,手動拷貝到/boot目錄下面。zImage適用於小內核的情況,它的存在是為了向后的兼容性。
二是內核編譯時通過命令make bzImage創建,然后手動拷貝至/boot目錄下。bzImage是壓縮的內核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮文件,而且在這兩個文件的開頭部分內嵌有 gzip解壓縮代碼。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
內核文件中包含一個微型的gzip用於解壓縮內核並引導它。兩者的不同之處在於,老的zImage解壓縮內核到低端內存(第一個 640K),bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那么可以采用zImage或bzImage之一,兩種方式引導的系統運行 時是相同的。大的內核采用bzImage,不能采用zImage。vmlinux是未壓縮的內核,vmlinuz是vmlinux的壓縮文件。
環境准備
虛擬機聯網
剛安裝的虛擬機及映像可能會產生連不上網的情況。解決辦法:
-
進入VMware Workstation,編輯->虛擬網絡編輯器,將VMnet8設置為NAT模式


-
虛擬機->設置,保證網絡適配器配置也為NAT模式

winscp的使用
WinSCP 是一個 Windows 環境下使用的 SSH 的開源圖形化 SFTP 客戶端。同時支持 SCP 協議。它的主要功能是在本地與遠程計算機間安全地復制文件,並且可以直接編輯文件。

官網下載並安裝。若初始連不上虛擬機,則檢查遠程虛擬機是否安裝並開啟了ssh服務(下述3.1)
搭建編譯環境
-
進入root:
su
-
進入用戶所在文件夾:
cd /home/siqi -
常規配置及網絡測試
-
虛擬機安裝ssh服務
//檢測是否已安裝ssh服務,輸入以下命令 #ssh localhost //出現以下提示則為未安裝: ssh: connect to host localhost port 22: Connection refused (ssh:連接到主機本地主機端口22:連接被拒絕) #apt-get install openssh-server //啟動服務 #/etc/init.d/ssh start //檢查服務是否啟動成功 #ps -e|grep ssh -
winscp連接到虛擬機
輸入主機名為虛擬機ip地址,端口號默認22,輸入用戶名和密碼

-
-
在虛擬機新建kernel文件夾,並將linux內核解壓到當前文件夾
#cd kernel #tar -zxvf linux-5.11-rc1 -
將內核中的默認x86配置到根目錄
#cd linux-5.11-rc1/arch/x86/configs #cp x86_64_deconfig /home/siqi/kernel/linux-5.11-rc1/.config #cd ../../../ -
x86編譯前准備:如果不執行以下指令,會有“command not found”的錯誤提示
#apt-get install make #apt-get install gcc #apt-get install flex #apt-get install bison #apt-get install libcurses-dev #apt-get install libssl-dev #apt-get install libelf-dev -
基於文本選單的圖形化內核配置:
make menuconfig,會在源碼的頂層目錄下面生成一個.config文件可能出現的錯誤有
- 一些安裝包沒有提前安裝上;(根據錯誤提示依次安裝)
- 終端窗口太小導致錯誤;
正常執行會出現下面的菜單框:選擇
64-bit kernel並點擊save保存
若沒有這一步直接進行下一步,則會出現無盡的選擇情況(需要不斷按回車)
-
最后執行
make bzImage -j8即可。 -
編譯完成。找到編譯生成的bzImage,拷貝出kernel
#cd linux-5.11-rc1/arch/x86/boot/ #ls 會看到bzImage在這兒啦 #cp bzImage /home/siqi/ -
附:arm交叉編譯命令
make distclean ARCH-arm64 make mrproper ARCH-arm64 make dtbs ARCH-arm64 cp arch/arm64/configs/defconfig .config cp /home/siqi/ft2000plus_defconfig .config make menuconfig ARCH-arm64 make Image ARCH-arm64 -j8 CROSS_COMPILE-aarch64-none-linux-gnu- make uImage ARCH-arm64 -j8 CROSS_COMPILE-aarch64-none-linux-gnu-

