一個最小可運行Linux操作系統(tǒng)需要內(nèi)核鏡像bzImage和rootfs,本文整理了其制作、安裝過程,調(diào)試命令,以及如何添加共享磁盤。
編譯內(nèi)核源碼
從 The Linux Kernel Archives ? 網(wǎng)站下載內(nèi)核源碼,本文下載的版本為4.14.191,4.14.191源碼下載。
使用wget獲取源碼。
wget ?https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.14.191.tar.gz
解壓源碼:
tar -xvf linux-4.14.191.tar.gz
解壓后進(jìn)入源碼根目錄linux-4.14.191,指定編譯的架構(gòu),依次執(zhí)行下面的命令,打開配置菜單。
在配置菜單中,啟用內(nèi)核debug,關(guān)閉地址隨機(jī)化,不然斷點處無法停止。
開始編譯內(nèi)核,-j 指定并行編譯作業(yè)數(shù)。最終生成linux-4.14.191/arch/x86_64/boot/bzImage文件。
內(nèi)核編譯完成。
配置Busybox
啟動內(nèi)核還需要一個具有根文件系統(tǒng)的磁盤鏡像文件,根文件系統(tǒng)中提供可供交互的shell程序以及一些常用工具命令。
我們借助busybox工具來制作根文件系統(tǒng)。
本文使用1.32.0版本,下載busybox。
解壓:
tar -jxvf busybox-1.32.0.tar.bz2
進(jìn)入busybox根目錄,配置編譯選項。
把busybox配置為靜態(tài)編譯。
配置如下圖所示。
?
制作rootfs
接下來制作rootfs鏡像文件,并把busybox安裝到其中。
使用dd命令創(chuàng)建文件,并格式化為ext4文件系統(tǒng)。
創(chuàng)建用于掛載該鏡像文件的目錄fs,掛載后才能往里面寫入busybox。
使用mount命令將rootfs.img掛載到fs目錄,編譯busybox并寫入fs目錄中。
接下來對寫入的busybox進(jìn)行補(bǔ)充配置。
制作完成的rootfs目錄如下:
?
最后,卸載rootfs.img
至此,一個帶有rootfs的磁盤鏡像制作完成。
啟動qemu
使用如下命令啟動無GUI的qemu,參數(shù)含義如下:
-kernel # 指定編譯好的內(nèi)核鏡像
-hda ?# 指定硬盤
-append "root=/dev/sda" 指示根文件系統(tǒng) console=ttyS0 ?把QEMU的輸入輸出定向到當(dāng)前終端上
-nographic 不使用圖形輸出窗口
-s 是-gdb tcp::1234縮寫,監(jiān)聽1234端口,在GDB中可以通過target remote localhost:1234連接
啟動后如下圖:
Ctrl+A 松開后按 X 退出qemu。
內(nèi)核函數(shù)調(diào)試
啟動命令中添加-s參數(shù)與-S參數(shù)啟動qemu。
啟動gdb遠(yuǎn)程調(diào)試。vmlinux文件在編譯后的內(nèi)核源碼根目錄下。
在new_sync_read函數(shù)添加斷點,continue。
在系統(tǒng)中執(zhí)行l(wèi)s命令,觸發(fā)new_sync_read函數(shù),
?
至此,完成了qemu環(huán)境下使用gdb進(jìn)行內(nèi)核函數(shù)的調(diào)試。
添加共享磁盤
有時候需要在宿主機(jī)和qemu虛擬機(jī)之間共享文件,添加一個共享磁盤將有助于該項工作。
創(chuàng)建64MB磁盤鏡像文件,并格式化為ext4,作為共享磁盤備用。
修改qemu啟動命令,使用-hdb增加一個磁盤。
進(jìn)入qemu系統(tǒng)后使用mount命令掛載sdb到mnt目錄。
在原系統(tǒng)中掛載ext4.img,實現(xiàn)qemu與原系統(tǒng)的文件共享。
至此,可以在宿主機(jī)器share目錄下,與qemu中的虛擬機(jī)器進(jìn)行文件共享。
評論
查看更多