試玩UML(User Mode Linux)
轉自 李先靜 http://blog.csdn.net/absurd/article/details/1063889
試玩UML(User Mode Linux)
轉載時請註明出處:http://blog.csdn.net/absurd/
這裡的UML並非指統一建模語言,而指使用者模式的linux。顧名思義,就是讓linux系統作為一個使用者程式執行。為什麼要這樣做呢?大家都知道除錯linux 核心是件麻煩的事情,雖然可以使用kdb、gdb或者虛擬機器來除錯核心,但這些本身方法都有一些限制,而且我總感覺使用很麻煩,幾次嘗試失敗後,沒有再去除錯過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~~
相關文章
- UML(user-mode-linux)Linux
- 迷之自信的Single_User Mode
- linux 手動增加userLinux
- [ERR] 1231 - Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'SQL
- 【UML入門教程】——Hello,UML!
- UML筆記——14種UML圖筆記
- 【UML入門教程】——UML關係
- Linux下Apache遮蔽user-agentLinuxApache
- 華為遊戲試玩不生效遊戲
- linux動態修改 max user processes limitsLinuxMIT
- 微前端(singleSpa + React )試玩前端React
- mac app開發試玩(續)MacAPP
- Window mode
- Thinking in UML-1-為什麼需要UMLThinking
- linux shell指令碼中 mode=${1:-sart} filename=${fileuser:-"filename"}Linux指令碼
- Linux中用st_mode判斷檔案型別Linux型別
- consistent mode和current mode的區別
- UML入門
- UML基礎
- UML學習
- UML活動圖
- Linux 使用者(User)查詢篇(轉)Linux
- [20190423]簡單測試user和SYS_CONTEXT ('USERENV','CURRENT_USER').txtContext
- Linux Nginx(master-slave)、Apache(woker、prefork) Working Mode ResearchLinuxNginxASTApache
- profile中SESSIONS_PER_USER 資源限制特性測試Session
- 華為試玩模式退出賬號重新登入後,試玩時間又變回60分鐘模式
- Docker Swarm modeDockerSwarm
- oracle time modeOracle
- javascript strict modeJavaScript
- TM LOCK MODE
- sql_modeSQL
- Windws XP Mode
- Dataguard mode switch
- 更改Archive ModeHive
- Undo Mode (30)
- 教你玩轉Linux—yum 命令Linux
- 使用舊電腦玩LinuxLinux
- [TIL] 如何用 linux 玩遊戲Linux遊戲