Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/
學習趙炯博士的《linux 0.11 內核完全注釋》,在搭建實驗環境時發現沒有WinXP下bochs建立linux 0.11 編譯環境的文章,都是直接用的趙博的linux-0.11-devel-040329.zip直接進行的實驗。有鑒于此,我花費了2周時間打造了自己的linux0.11簡易編譯環境。
開始制作前,需要XP系統已經安裝了WinRAR,UltraEdit,Bochs 2.1.1 ,WinImage8.0
還有把sls-0.99pl.tar.bz2解壓到一個單獨得文件夾sls-0.99pl下。
我們開始吧! :)
首先需要編輯sls-0.99pl文件夾的bochsrc文件,先做個備份,然后把bochsrc的文件名改為“sls.bxrc”(文件名可以隨意,后綴必須是bxrc),然后編輯它(如果不修改可能會出現ROM: couldn't open ROM image file 'C:\Program Files\Bochs-2.1.1/bios/BIOS-bochs-latest'.信息,提示不能運行bochs),把文件第12行和36行的“$BXSHARE/bios/*”改為“BXSHARE/*”即刪除bios目錄,因為安裝2.1.1默認應該是沒有這個目錄的。OK,存盤,雙擊sls.bxrc打開SLSLinux,按“空格”選擇顯示模式。出現“softland login:”字樣時按回車輸入“root”進入系統。關閉SLSLinux系統。按照《內核》中14.3.1節的流程,創建一個256M的硬盤鏡像。做好后把鏡像從bochs 安裝目錄剪切到sls-0.99pl目錄下。編輯sls.bxrc文件ata0-master一行下加入“ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”,存盤退出UE文本編輯器。按照《內核》中14.5.2節在硬盤鏡像中創建minix文件系統。和sls-0.99pl同一個目錄下建立linux0.11文件夾,將256M的硬盤鏡像從sls-0.99pl目錄移動到linux0.11目錄,將sls.bxrc文件 “ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”一行去掉,存盤退出UE文本編輯器。 接著按照《內核》中14.5.3節內容建立根文件系統。直到第14.6節,以上是建立linux0.11編譯環境的前提。
這時你應該已經得到了一個最簡單的linux0.11操作系統(如上圖所示),我們需要向里面加入工具,才能使它能夠自己編譯內核。
一個關于bochs linux0.11系統和WinXP系統文件傳輸的方法(小于1.44M的文件):
------ 用bochs自帶的Disk Image Creation Tools 建立一個空的1.44M軟盤鏡像,這個鏡像是為了在linux0.11根文件系統沒有安裝mtools時使用的文件傳輸載體(注意:第一次使用這個文件前,即執行命令mount前需要用 “mkfs /dev/fd1 1440”命令創建文件系統)。因為WinImage不認非DOS盤,而linux0.11在沒有安裝mtools時也不認DOS盤,這時就需要用SLSLINUX做中間轉換,注意這里dos盤不支持長文件名,需要在SLSLinux下改名。
第一個軟件先安裝gcc-1.40,這是因為linux是開源的,所以一些工具是需要在機器上編譯才能運行。
這里開始安裝工具之前,先分別用bochs自帶工具和WinImage建立兩個鏡像文件(fnull.img,b.img)b.img為dos格式是WinImage工具建立的。然后編輯sls.bxrc添加” floppyb: 1_44=b.img, status=inserted”,使用WinImage工具將gcc-1.40.taz加入到b.img中。打開SLSlinux,進入系統后,用“mdir b:”查看有沒有 gcc-1.40.taz文件,然后在根目錄建一個文件夾lin-ext用于轉換文件到linux0.11系統。使用命令 “ mcopy b:* /lin-ext”將gcc1.40安裝文件拷貝到SLSLinux系統中(如下圖)。
拷貝完成后,點“config”按鈕,然后在調試的窗口中將軟驅B中的鏡像轉換為fnull.img
(如下圖)
當出現“continue simulation”字樣時返回到SLSLINUX系統中,用“mount /dev/fd1 /mnt”命令加載到/mnt目錄。如果出現(mount:unknown error 26240),這時需要用“mkfs /dev/fd1 1440”創建文件系統后才能正常使用。然后用命令”cp gcc-lib~1.taz /mnt”把安裝文件拷貝到fnull.img鏡像中。在XP系統中,把fnull.img文件拷貝到linux-0.11目錄中,添加“floppyb: 1_44=fnull.img, status=inserted”到linux0.11配置文件中,雙擊打開linux-0.11 ,在命令提示符下輸入“mkdir /mnt”建立/mnt節點,使用”mount /dev/fd1 /mnt”加載軟驅,“cp /mnt/gcc-lib~1.taz /tmp”拷貝文件到tmp目錄下,運行“tar –zxvf gcc-lib~1.taz”解壓縮文件
得到gcclib目錄,接著在/usr節點下建立include目錄,local/bin目錄,local/lib目錄。然后“cd /tmp/gcclib”進入gcclib目錄,使用“cp –r include /usr”“cp –r local /usr”將文件拷貝過去,拷貝結束后執行“gcc –s –o hello hello.c”如果執行成功會生成hello這個可執行程序。
執行它,屏幕出現“hello,world”證明安裝成功。運行“gcc -v”顯示“gcc version 1.40”。到此gcc1.40安裝完畢。(在/tmp節點刪除gcclib目錄和taz文件命令是“rm gcc-lib~1.taz”“rm –rf gcclib”)。如下圖所示
第二個軟件安裝utils.tar.Z,其中主要是make工具。同樣,先將文件利用WinImage加載到b.img鏡像中,在SLSlinux系統中拷貝到lin-ext目錄,然后換fnull.img鏡像(以上步驟請參看gcc1.40的安裝。這里需要先將fnull.img里的數據清空就是到軟盤目錄里用“rm *”命令),將文件拷貝到fnull.img,再將文件fnull.img拷貝到linux-0.11目錄。打開linux-0.11系統。加載fnull.img 。將utils.tar.Z拷貝到/tmp目錄,“tar –zxvf utils~1.z”解壓文件(這里的utils~1.z可視具體的情況而定)。解壓后,會生成一個usr目錄將里面的bin目錄拷貝到/usr目錄,make工具就安裝成功了。安裝完成后如下圖。
第三個軟件安裝 mtools2.05,用于讀寫DOS軟盤,同上將mtools壓縮包拷到linux0.11的/tmp目錄,然后解壓縮到mtools目錄里,先不要編譯,需要修改Makefile,device.c以及mread.c這三個文件,首先將Makefile 6-10行改為
CC????? = gcc
cc????? = gcc
CFLAGS = -O -Wall
LDFLAGS????? = -s
LD?? = gcc
去掉原來的“LINT=lint”這一行。
修改device.c 在文件頭下面添加
#define MYDEVICE
#ifdef MYDEVICE
struct device device[] = {
{'A', "/dev/fd0", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},
{'B', "/dev/fd1", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},
{'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
};
#endif/*MYDEVICE*/
上面這些是為了mtools命令添加的設備,其實就是兩個軟盤。
修改mread.c 在第19行也就是”#else /* BSD */“這一行下面添加
“#include ”
全部修改完畢,運行命令“make install”正常執行后如下圖所示
第四個軟件安裝 gccbin.tar.Z,里面有gas,gld等以及lib庫
第五個軟件安裝 as86.tar.gz ,里面有as86,ld86兩個二進制執行程序
第四和五軟件安裝比較簡單,主要是一些編譯內核的工具,如:gas,gld,等執行程序。具體的安裝可以參考前三個軟件的安裝。(我開始時沒有找到gas的可執行程序,就把網上的源代碼拷到linux0.11系統里進行編譯,如果大家對編譯gas源代碼感興趣,請給我留言)
然后把linux 0.11內核代碼拷貝到linux根文件系統中
開始編譯。。。
Good Luck!
希望這篇文章能對您有所幫助。有任何問題給我寫留言或者發郵件都可以。
本文所需要的軟件
-------WinRAR
-------UltraEdit
-------Bochs 2.1.1
-------WinImage8.0.8000
-------sls-0.99pl.tar.bz2
-------gcclib-1.40.taz
(可以在linux-0.11-devel-040329.zip壓縮包中找到)
-------mtools-2.0.5.tar.Z
-------utils.tar.Z
-------gccbin.tar.Z
-------as86.tar.gz
------- gas-1.38.1.tar.bz2
-------bootimage-0.11.Z
-------rootimage-0.11.Z
總結
以上是生活随笔為你收集整理的Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 读写时间变长,linux时钟
- 下一篇: Linux备份检查工具,6种优化Linu