簡要介紹:Bochs主要是一個免費且開源的基於x86架構PC機模擬器。學習linux0.11內核,推薦在該模擬器上進行。
環境搭建步驟:
1、下載Linux0.11系統包,本鏈接的下載包已包含Bochs軟件。
點擊打開鏈接http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip
2、解壓linux-0.11-devel-040329.zip,目錄結構如下圖所示:
這裏真正使用到的文件爲:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.11、bootimage-0.11-hd、hdc-0.11.img
3、點擊Bochs-2.1.1.exe進行安裝。
4、安裝完畢後,將所有linux-0.11-devel-040329下的文件,拷貝到剛纔安裝bochs下的根目錄。原目錄如下:
拷貝過後目錄爲:
5、拷貝完成後,運行bochsrc-hd.bxrc,若安裝成功,打開即能見到如下界面:
這已經是x86PC模擬器上,搭建完成的Linux操作系統。建立linux操作平臺命令,就能操作Linux。由於學習操作系統需要,我們需要在Linux下,編譯操作系統以及完成簡單的源碼修改,從而達到理解Linux內核的能力。接下來,主要演示Linux內核源碼的修改,以及內核的編譯過程。由於該Linux版本的原因,我們還需要對代碼做出調整,方能成功編譯。
內核編譯過程:
1、進入/usr/src/linux 目錄下,鍵入命令 cd ../src/linux ,如下圖所示:
2、進行編譯,鍵入命令 make clean 和 make後。
若出現如下所示錯誤:gcc-cc1: Invalid option "string-insns"。這是需將Linux目錄下的Makefile文件中的-mstring-insns參數去掉。除此之外,每個子目錄fs,lib,kernel以及kernel目錄下的三個驅動程序子目錄(math, blk_drv, chr_drv)的Makefike當中的-mstring-insns參數去除掉。此處只演示根目錄下的Makefile文件修改。
3、依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、
/linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。linux目錄下,鍵入:vi Makefile。如下圖所示:
找到文件中的-mstring-insns 參數,並刪去保存。
4、到/usr/local/bin中找到文件ar,並把ar 改名爲gar,鍵入命令:mv ar gar。如下圖所示:
5、回到linux 目錄下,重新鍵入make clean以及 make,完成內核的編譯鏈接。
出現上圖提示,即表面程序編譯成功。完成編譯後,便可以開始修改內核源碼,從而達到擴展操作系統功能以及學習操作系統的目的。這裏,我們簡單修改下,linux操作系統開機啓動項bootsect.s源碼,讓開機後輸出個性化的字符串。
6、進入/usr/src/linux/boot目錄,修改bootsect.s源碼,保存並退出。
! Print some inane message
mov ah,#0x03 ! read cursor pos
xor bh,bh
int 0x10
mov cx,#47
mov bx,#0x0007 ! page 0, attribute 7 (normal)
mov bp,#msg1
mov ax,#0x1301 ! write string, move cursor
int 0x10
msg1:
.byte 13,10
.ascii "Loading system ...this is create by demon"
.byte 13,10,13,10
.org 508
7、修改完成後,在linux目錄下,重新鍵入make命令,完成編譯。
8、make成功後生成引導啓動映象文件Image。若需要輸出這個Image文件, 可以首先備份bootimage-0.11-hd文件, 然後使用下面命令就會把bootimage-0.11-hd替換成新的引導啓動文件,鍵入命令:dd bs=8192 if=Image of=/dev/fd0。如下圖所示:
9點擊reset重啓Linux操作系統。如下圖所示:
————————————————
版權聲明:本文爲CSDN博主「Demon的黑與白」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u014688145/article/details/50575588