天天看點

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

使用qemu搭建核心調試環境

  • 編譯核心
  • 安裝qemu-kvm
  • 制作根檔案系統
  • 啟動虛拟機

編譯核心

核心源碼很多地方都有,可以去阿裡雲、網易、中科大、清華等等的開源鏡像站點找。

下載下傳之後需要在電腦上安裝編譯核心的各種依賴項:

sudo apt-get build-dep linux linux-image-$(uname -r)
sudo apt-get install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf
           

有了依賴項後,在核心源碼根目錄使用下面指令調整核心配置:

make menuconfig
           

然後使用下面指令即可開始編譯:

線程數根據你電腦的情況可以自己改。

這裡有一個我遇到的問題是:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

需要在配置裡把這個檔案删除:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

編譯好的核心在核心源碼根目錄的以下位置:

arch/x86_64/boot/bzImage

安裝qemu-kvm

apt-get install qemu
           

制作根檔案系統

制作簡單的根檔案系統可以使用buildroot

下載下傳,解壓之後得到這樣的根目錄:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

跟kernel類似,先安裝依賴:

然後進行配置:

make menuconfig
           

注意,有一個必要的配置是,修改kernel的下載下傳點:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

buildroot原版的下載下傳點是kernel的官網。我家的網絡沒法正常通路這個位址。我配的這個位址是中科大的鏡像,其它的鏡像,像清華、阿裡的,因為目錄結構跟kernel官網不一樣,都不行。

這個我覺得應該是buildroot的問題。

記得修改root使用者的密碼:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

然後編譯:

注意:buildroot不支援make的-j參數。它自己本身就是多線程的。而且第一次編譯的話,主要是下載下傳源碼的時間比較長,多不多線程影響不大。

編譯結束之後會得到一個壓縮包,在源碼根目錄的output/images下:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

這個不能當檔案系統用,還需要制作一個檔案系統鏡像。

qemu-img create -f raw init.img 100m
           

buildroot的預設設定生成的rootfs非常小,不需要很大的rootfs。這裡設定鏡像大小是100M。

然後把buildroot生成的檔案系統拷貝到鏡像裡:

mkdir rootfs-folder
sudo mount init.img rootfs-folder
tar -xvf rootfs.tar -C rootfs-folder
sudo umount rootfs-folder
           

這樣,根檔案系統就做好了。

啟動虛拟機

有了核心和rootfs,就可以用虛拟機調試這套系統了。

使用如下指令啟動虛拟機:

qemu-system-x86_64 -kernel bzImage -nographic -append "console=ttyS0 root=/dev/sda" -m 512 --enable-kvm -cpu host -drive file=init.img
           

效果如下圖:

使用qemu-kvm搭建linux核心調試環境編譯核心安裝qemu-kvm制作根檔案系統啟動虛拟機

繼續閱讀