<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

     

        一、Linux 0.11內核編譯

        1、編譯環境設置

         我的操作系統是:Tp-Link

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

         安裝gcc編譯器,使用gcc -v確認gcc編譯器的版本高于4.3.4

     

         安裝編譯工具:

         apt-get install build-essential

     

         安裝該軟件包:

         apt-get install bin86

     

         2、修改Makefile文件

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

         a)將gas替換為as,將gld替換為ld。現在gas和gld已經直接改名為as和ld了;

         b)去掉as的-c選項;

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

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

     

         3、內存位置對齊語句align的修改

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

         align 3

         要改成

         align 8

     

         4、修改嵌入宏匯編程序

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

         修改為

         :); 

     

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

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

         .globl _idt, _gdt

         修改為:

         .globl idt, gdt

     

         6、修改copy_process函數

         在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上下載已經修改好的源代碼,連接是:https://github.com/mengli/TinyOS

     

         7、編譯內核

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

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

         make

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


        二、bochs上實驗環境的搭建

        1、bochs的安裝

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

        執行如下命令:

        tar xvfz bochs-2.2.1.tar.gz

        cd bochs-2.2.1

        ./configure

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

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

        make

        make install

     

        2、bochs的設置

        我的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調試選項,不進行內核調試時可以注釋掉這一行。

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

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

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

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

     

        3、運行bochs

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

     

        成功啟動虛擬機的截圖如下:

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

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


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 亚洲无码一区二区三区 | 97免费人妻在线视频| 亚洲精品A在线观看| 美女被爆羞羞网站免费| 四虎影视永久免费观看网址| 亚洲码欧美码一区二区三区| 好男人视频在线观看免费看片| 亚洲人成777在线播放| 成人免费视频77777| 国产亚洲国产bv网站在线| 毛片A级毛片免费播放| 亚洲乱理伦片在线观看中字| 日本不卡高清中文字幕免费| 国产成人亚洲综合在线| 亚洲精品色婷婷在线影院| 久久久久久av无码免费看大片 | 亚洲av无码无在线观看红杏| 久久精品人成免费| 亚洲综合丁香婷婷六月香| 破了亲妺妺的处免费视频国产| 国产偷国产偷亚洲高清在线| 亚洲精品无码99在线观看| a毛片免费全部在线播放**| 亚洲五月六月丁香激情| 成年美女黄网站18禁免费| 免费看又黄又爽又猛的视频软件| 亚洲精品成人片在线观看| 久久99免费视频| 国产色在线|亚洲| 亚洲精品国产精品国自产观看| 人妻在线日韩免费视频| 亚洲一级视频在线观看| 亚洲av无码乱码在线观看野外 | 国产亚洲真人做受在线观看| 91在线手机精品免费观看| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲成熟丰满熟妇高潮XXXXX| 亚洲国产中文v高清在线观看| 无码一区二区三区免费| 亚洲色一区二区三区四区| 亚洲夜夜欢A∨一区二区三区|