試玩UML(User Mode Linux)

hai0808發表於2017-12-13

轉自  李先靜  http://blog.csdn.net/absurd/article/details/1063889

試玩UML(User Mode Linux)

 

轉載時請註明出處:http://blog.csdn.net/absurd/

 

這裡的UML並非指統一建模語言,而指使用者模式的linux。顧名思義,就是讓linux系統作為一個使用者程式執行。為什麼要這樣做呢?大家都知道除錯linux 核心是件麻煩的事情,雖然可以使用kdbgdb或者虛擬機器來除錯核心,但這些本身方法都有一些限制,而且我總感覺使用很麻煩,幾次嘗試失敗後,沒有再去除錯過linux核心。

 

Linux核心對除錯支援力度不夠,並非是因為實現起來很困難,而是因為他們認為偵錯程式有害軟體的健康。這是有道理的,軟體的質量是認認真真的設計出來的,紮紮實實的寫出來的,而不是靠辛辛苦苦除錯出來的。使用偵錯程式常常導致一種不徹底的BUG修改,治標不治本,讓BUG長時間潛伏在程式碼中,從長遠利害關係來看,它會造成更嚴重的損害。

 

偵錯程式只是一種工具,用得好不好或者恰不恰當,是我們自己的事,不能因為自己的過錯而責怪工具。實際上,偵錯程式對於我們研究核心程式碼,是很有幫助,執行核心程式碼的,觀察它的效果,遠遠比只看程式碼印象更深刻。

 

UML為研究linux核心程式碼提供一種便利的方式,整個linux系統完全是一個使用者程式,你可以像除錯普通使用者程式一樣除錯它。UML的實現也比較巧妙,linux核心把不同平臺稱之一個ARCH(architectur),每個ARCH實現依賴於特定硬體平臺的功能,UML作為一個ARCH來實現,用軟體模擬了硬體功能。

 

Linux核心2.6以及後續版本已經整合了UML,但我試了幾個版本都編譯不過去,直到在linux-2.6.16上嘗試才成功。使用UML要先選擇一個好的核心版本,否則會浪費不少時間。使用UML的具體過程如下:

 

1.         解開核心原始碼包。

[root@localhost src]# tar zxvf /mnt/hgfs/linux/linux-2.6.16.tar.gz

 

2.         編譯核心。

[root@localhost linux-2.6.16]# make ARCH=um defconfig

[root@localhost linux-2.6.16]# make ARCH=um menuconfig

[root@localhost linux-2.6.16]# make ARCH=um

 

3.         安裝核心。

[root@localhost linux-2.6.16]# cp linux /usr/local/bin/

 

4.         製作根檔案系統。

[root@localhost cvs]# dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M

[root@localhost um]# mkfs.ext2 ./root_fs

[root@localhost um]# mkdir /mnt/rootfs

[root@localhost um]# mount -o loop root_fs /mnt/rootfs/

(拷貝你需要的檔案:因為只是研究核心,拷貝一些基本的執行庫、可執行檔案和配置檔案就行了)

[root@localhost um]# umount /mnt/rootfs/

 

網上有很多製作好的根檔案系統,如果目的只是研究核心,從網上下載根檔案系統最方便的選擇。

 

5.         製作交換分割槽

[root@localhost um]# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M

[root@localhost um]# mkswap ./swap_fs

 

6.         正常執行。

[root@localhost um]# linux ubd0=root_fs ubd1=swap_fs

 

7.         除錯執行。

gdb linux

(gdb) b start_kernel

(gdb) r ubd0=root_fs ubd1=swap_fs

 

~~end~~

相關文章