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

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

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

    IT技術(shù)小屋

    秋風(fēng)秋雨,皆入我心

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
        最近決定開始閱讀Linux 0.11的源代碼。
        學(xué)習(xí)Linux操作系統(tǒng)的核心概念最好的方法莫過于閱讀源代碼。而Linux當(dāng)前最新的源代碼包已經(jīng)有70MB左右,代碼十分龐大,要想深入閱讀十分困難。而Linux早期的0.11版本雖然有諸多局限,但是具備了現(xiàn)代操作系統(tǒng)的完備功能,一些基本概念沿用到了當(dāng)前版本,并且代碼只有300KB,非常適合閱讀。
        閱讀源代碼之前首先需要搭建實(shí)驗環(huán)境,由于Linux 0.11的代碼是二十年前編寫的,當(dāng)前版本的gcc編譯器無法正常編譯通過,因此需要首先將Linux 0.11源代碼移植到gcc 4.3.4+,并在bochs虛擬機(jī)上搭建起了實(shí)驗環(huán)境。
        一、Linux 0.11內(nèi)核編譯
        1、編譯環(huán)境設(shè)置
        我的操作系統(tǒng)是:
        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?,F(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、程序變量在匯編語句中的引用表示
        將所有變量前的下劃線去掉:
        .globl _idt, _gdt
        修改為:
        .globl idt, gdt
         6、修改copy_process函數(shù)
         在kernel子目錄下的fork.c文件中,修改如下:
         *= *current;    /* NOTE! this doesn't copy the supervisor stack */
         改為:
         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上實(shí)驗環(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)行一點(diǎn)修改,不然會編譯錯誤:
        刪除iodev子目錄下harddrv.h文件290行和295行的sparse_image_t::
        make
        make install
        2、bochs的設(shè)置
        我的bochs配置文件如下:
        #gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
        romimage: file=/usr/local/share/bochs/BIOS-bochs-latest, address=0xf0000
        megs: 16
        vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
        floppya: 1_44="linux-kernel-image-0.11", status=inserted
        ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, heads=16, spt=38
        boot: a
        log: bochsout.txt
        vga_update_interval: 300000
        keyboard_serial_delay: 200
        keyboard_paste_delay: 100000
        private_colormap: enabled=0
        fullscreen: enabled=0
        screenmode: name="sample"
        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-08-02 10:05 Meng Lee 閱讀(3154) 評論(1)  編輯  收藏 所屬分類: Linux

    評論

    # re: Linux 0.11內(nèi)核編譯和bochs上的實(shí)驗環(huán)境的搭建 2015-05-12 15:48 WW
    你好,請問mengli-TinyOS-v0.0.1-0-g182166e.zip這個是什么  回復(fù)  更多評論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲人成网站在线观看| 免费看男人j放进女人j免费看| 日本人的色道免费网站| 亚洲成人在线电影| 18禁超污无遮挡无码免费网站 | 性做久久久久久免费观看| 99人中文字幕亚洲区| 亚洲视频在线观看免费视频| 777亚洲精品乱码久久久久久 | 亚洲AV无码一区二区大桥未久| 女人18毛片水真多免费看| 亚洲精品无码久久久久YW| 国产成人啪精品视频免费网| 日本激情猛烈在线看免费观看| 亚洲精品亚洲人成在线观看下载| 免费黄色毛片视频| 亚洲av永久无码精品秋霞电影秋| 国产免费直播在线观看视频| 午夜成人无码福利免费视频| 亚洲熟妇中文字幕五十中出| 亚洲精品天堂成人片AV在线播放 | AV在线亚洲男人的天堂| GOGOGO高清免费看韩国| 久久久久亚洲AV片无码| 91嫩草免费国产永久入口| 亚洲 欧洲 视频 伦小说| 免费a级黄色毛片| baoyu122.永久免费视频| 亚洲最新在线视频| 国产成人无码免费视频97| 中国黄色免费网站| 免费一级毛片女人图片| 热久久这里是精品6免费观看| 亚洲视频免费播放| 国产成人免费福利网站| 在线看片免费人成视频福利| 亚洲国产精品专区| 亚洲精品人成无码中文毛片| 1000部拍拍拍18勿入免费视频下载| 亚洲无人区码一二三码区别图片 | 毛色毛片免费观看|