posts - 241,  comments - 116,  trackbacks - 0
             閱讀源代碼之前首先需要搭建實驗環(huán)境,由于Linux 0.11的代碼是二十年前編寫的,當(dāng)前版本的gcc編譯器無法正常編譯通過,因此需要首先將Linux 0.11源代碼移植到gcc 4.3.4+,并在bochs虛擬機(jī)上搭建起了實驗環(huán)境。

           

              一、Linux 0.11內(nèi)核編譯

              1、編譯環(huán)境設(shè)置

               我的操作系統(tǒng)是:Tp-Link

               Linux ubuntu 2.6.32-32-generic #62-Ubuntu SMP i686 GNU/Linux

               安裝gcc編譯器,使用gcc -v確認(rèn)gcc編譯器的版本高于4.3.4

           

               安裝編譯工具:

               apt-get install build-essential

           

               安裝該軟件包:

               apt-get install bin86

           

               2、修改Makefile文件

               Linux 0.11內(nèi)核源代碼中基本上每個子目錄都包含有一個Makefile,需要對每個Makefile進(jìn)行如下修改:

               a)將gas替換為as,將gld替換為ld。現(xiàn)在gas和gld已經(jīng)直接改名為as和ld了;

               b)去掉as的-c選項;

               c)去掉gcc的編譯選項:-fcombine-regs和-mstring-insns

               d)去掉kernel子目錄中Makefile的-O選項

           

               3、內(nèi)存位置對齊語句align的修改

               在boot目錄下的三個匯編程序中,align語句的使用方法已經(jīng)改變。原來align后的數(shù)值是內(nèi)存位置的冪次值,現(xiàn)在則需要直接給出起始地址的整數(shù)值,因此

               align 3

               要改成

               align 8

           

               4、修改嵌入宏匯編程序

               由于as的不斷改進(jìn),現(xiàn)在不需要程序員人為指定寄存器了,因此需要把代碼中的__asm__("ax")全部去掉。類似:"si", :"di", :"ax", :"cx");

               修改為

               :); 

           

               5、程序變量在匯編語句中的引用表示

               將所有變量前的下劃線去掉:average salary的英文翻譯,average salary的造句

               .globl _idt, _gdt

               修改為:

               .globl idt, gdt

           

               6、修改copy_process函數(shù)

               在kernel子目錄下的fork.c文件中,修改如下:

          C代碼  收藏代碼
          1. *p = *current;  /* NOTE! this doesn't copy the supervisor stack */  

               改為:

          C代碼  收藏代碼
          1. memcpy(((struct task_struct *) p), ((struct task_struct *) current), sizeof(struct task_struct));  

           

               也可以從我的github上下載已經(jīng)修改好的源代碼,連接是:https://github.com/mengli/TinyOS

           

               7、編譯內(nèi)核

               下載mengli-TinyOS-v0.0.1-0-g182166e.zip,解壓,執(zhí)行如下命令:

               cd mengli-TinyOS-v0.0.1-0-g182166e

               make

               編譯完成之后會生成Linux kernel的image文件:linux-kernel-image-0.11,至此就完成了Linux 0.11的移植和編譯工作。


              二、bochs上實驗環(huán)境的搭建

              1、bochs的安裝

              下載bochs 2.2.1的源碼包,地址是:http://sourceforge.net/projects/bochs/files/bochs/2.2.1.tar.gz/download

              執(zhí)行如下命令:

              tar xvfz bochs-2.2.1.tar.gz

              cd bochs-2.2.1

              ./configure

              編譯bochs之前需要對源文件進(jìn)行一點修改,不然會編譯錯誤:

              刪除iodev子目錄下harddrv.h文件290行和295行的sparse_image_t::

              make

              make install

           

              2、bochs的設(shè)置

              我的bochs配置文件如下:

          Js代碼  收藏代碼
          1. #gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0  
          2. romimage: file=/usr/local/share/bochs/BIOS-bochs-latest, address=0xf0000  
          3. megs: 16  
          4. vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest  
          5. floppya: 1_44="linux-kernel-image-0.11", status=inserted  
          6. ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, heads=16, spt=38  
          7. boot: a  
          8. log: bochsout.txt  
          9. vga_update_interval: 300000  
          10. keyboard_serial_delay: 200  
          11. keyboard_paste_delay: 100000  
          12. private_colormap: enabled=0  
          13. fullscreen: enabled=0  
          14. screenmode: name="sample"  
          15. i440fxsupport: enabled=0  

              其中第一句是bochs調(diào)試選項,不進(jìn)行內(nèi)核調(diào)試時可以注釋掉這一行。

              此外,hdc-0.11-new.img這個文件是系統(tǒng)啟動后加載的根文件系統(tǒng)。

          這本書是趙炯博士編寫的《Linux內(nèi)核完全注釋》一書所附帶的。

          你可以從這里下載到該書:http://oldlinux.org/download/clk011c-2.0.1.pdf

              這里可以下載到已經(jīng)編譯好的kernel image和disk文件:http://www.oldlinux.org/Linux.old/bochs/

           

              3、運(yùn)行bochs

              啟動bochs虛擬機(jī)的命令是:bochs -f bochsrc-gdb.bxrc,其中-f選項用來指定配置文件。

           

              成功啟動虛擬機(jī)的截圖如下:

          posted on 2011-06-22 16:29 墻頭草 閱讀(755) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 南宫市| 基隆市| 翼城县| 周口市| 常州市| 黄冈市| 绍兴县| 景谷| 庆云县| 东阳市| 济阳县| 新建县| 丰城市| 鄂尔多斯市| 上蔡县| 将乐县| 大厂| 遂平县| 寻甸| 普宁市| 板桥市| 平江县| 台南县| 福州市| 新平| 黑龙江省| 随州市| 嘉义市| 闻喜县| 西华县| 金川县| 越西县| 浮山县| 政和县| 荆门市| 招远市| 寻乌县| 旌德县| 浮山县| 萨迦县| 韶山市|