給大家推薦一款很不錯的Linux gcc系統很有學習價值,這裡我主要講解Linux gcc系統的應用,包括介紹Linux gcc知識等方面。我發布的這個東東主要包含一個可以在Linux gcc 4.1下可編譯的linux-0.11的修改版的源碼。當前的Linux髮型版大部分已經採用Linux gcc 4.0以上的版本和linux 2.6的核心,而趙博士
(www.oldlinux.org)提供的可以在RH9下面編譯的源碼只能工作於gcc版本3.x。
我在我的Debian Sid系統上對這個東東做了基本的測試,Linux gcc 4.1是我系統的預設編譯器。任何一個比較新的Linux髮型版,包括Fedora,Unbuntu等,應該都沒有問題。如果你的系統上安裝的是其他版本的gcc,可以參考下面“使用其他Linux gcc編譯”小節。
如果你的Linux gcc提供的預設編譯器的仍然是Linux gcc 3.x,或者你打算另外安裝一個Linux gcc 3.x僅僅為了滿足能編譯源碼的要求,你可能就用不到這個東東了。但是,除了核心源碼之外,我還提供了一整套linux-0.11的實驗環境.
用於在Linux gcc環境下學習並且實驗linux0.11的原始碼。因為我認為要想真正的學習Linux核心的精髓,還是得老老實實在Linux環境中進行學習。而且在Windows下面,幾乎就不可能編譯Linux核心的源碼。
如果你真的很想在Windows平台學習Linux也沒有關係。我還做了另外一個類似的東東可以在Windows平台直接學習Linux 0.11的源碼。只需要下載下面的連結並且解壓到系統
的某個地方就可以用:http://www.quinnli.com/upload/linux-0.11-lab_060616_004102.exe
無論是Linux使用者也好,Windows使用者也好,如果你也是新學Linux,不太清楚怎麼樣修改並且編譯核心源碼,然後重啟進入你修改後的核心這些基本操作,可以看看我
做的一個Flash教程:http://www.quinnli.com/upload/linux-0.11.swf
這個東東很大部門都是直接用了www.oldlinux.org提供的資源做成的。我只是根據自己的需求,綜合了一些資源,做了個簡單的定製。非常感謝趙博士共用這些資料,並且
希望我的東東能對大家有點用處。謝謝支援。
你可以訪問這個連結報bug和給這個東東提一些建議。我其實也是剛學Linux核心的菜鳥。運行前提你的系統中需要預先安裝mtools和bochs。如果你用基於Debian的髮型版,可以運行:apt-get install bochs bochs-x mtools
如果你的系統是基於RPM的,可以試試:yum install bochs mtools或者直接運行bochs和mdir這兩個命令,如果都有就說明你的系統中已經安裝了這兩款軟體。為了編譯核心源碼,當然你的系統中還必須裝有Linux gcc和make等基本軟體,如果是Debian,可以運行:apt-get install build-essentials bin86
安裝解壓這個檔案都可以了:tar xjf linux-0.11-lab_060616_005627.tar.bz2然後在本目錄下應該會出現一個名為 linux-0.11 的新目錄。
工作流程使用這個東東的工作過程很簡單,首先編譯核心,然後安裝核心,最後在bochs中運行核心。假設你已經進入linux-0.11這個目錄,首先運行:
cd source/linux
make clean
make
cd ../../
將在source/linux目錄下產生新的核心檔案Image。然後運行:./mcopy_kernel source/linux/Image bootimage-new可以將Image檔案拷貝到一個裝了grub的啟動磁碟片上。這個命令將在磁碟的/boot目錄下建立bootimage-new這個檔案,值得指出的是,如果用這個命令,所有的都會被拷貝到磁碟片的/boot目錄下。
然後你可以運行./edit_menu.lst來編輯grub的設定檔,這樣啟動是就可以在grub菜單中顯示新核心的啟動項。設定檔文法很簡單。
比如說你可以在menu.lst最後加上以下四行:
title Linux 0.11 compiled by gcc 4.1
root (fd0)
kernel /boot/bootimage-new
boot
最後可以運行:./linux-0.11來啟動bochs虛擬機器。如果沒有別的問題,你應該可以看到grub啟動菜單,這時候選擇你剛剛建立的功能表項目就可以進入新的核心。另外,如果你不想在自身的Linux環境下編譯源碼也可以,因為你可以在虛擬機器中的linux-0.11環境中編譯linux-0.11的源碼。如果你決定這樣做,可以看我的作的flash教程。
目錄結構source/linux/ 這個目錄下有我修改的源碼linux-0.11-040327-rh9.tar.gz這個是www.oldlinux.org提供的在RH9下編譯的原始代碼linux-0.11-040327-rh9.diff.gz
這是www.oldlinux.org提供的為了能在RH9下編譯提供的差異檔案linux-0.11-060617-gcc4-diff.gz這是我基於rh9版本作出的修改,基本上都是為了編譯通過作出的很簡單的修改。但是有一處修改並不那麼直觀,可以參考我寫的這篇文章
conf/這個目錄下有設定檔images/這個目錄下包含虛擬機器需要的磁碟片和硬碟鏡像檔案。硬碟鏡像檔案是www.oldlinux.org提供的包含完整Linux開發環境的硬碟鏡像。還有一張grub啟動磁碟片,你可以將新的核心檔案拷貝到這張磁碟片中。
bak/每次運行 ./edit_menu.lst 和 ./mcopy_kernel 都會備份當前的grub啟動盤到 bak目錄中。必要的時候可以從這個目錄下恢複。使用其他版本的gcc編譯使用其他版本的gcc來編譯也是可以的,Linux gcc-4.0應該可以編譯。而且如果你用的系統非常非常老,還在使用Linux gcc-2.95,經過我的測試,也可以支援。
但如果你的預設版本的gcc是3.x,其實你不需要使用我修改的版本,使用最初趙炯博士提供的rh9版本就可以。這個包裡也包含了這個檔案如果你實在是想用gcc-3.3編譯我的版本,也行,只不過需要首先將源碼目錄中的`mm/Makefile’替換為`mm/Makefile-gcc3.x’。原始的`mm/Makefile’也有其備份`mm/Makefile-gcc-4.1′,必要時可以恢複。一定記得覆蓋,不然在編譯的時候不會出現任何問題,但是編譯出來的核心鏡像將無法啟動。
已知問題
1. 我的核心無法掛接磁碟片上的rootdisk是的,如果你和我一樣,使用當前的2.2.6版本的bochs,而且是直接把編譯出來的Image檔案做為a盤啟動,就有可能出現問題。如果你肯定的確在b盤放入了rootimage檔案的話,我也不知道為什麼會這樣。
但是如果使用grub來引導信的Image檔案,就完全不會出現這個問題。我的猜測是grub在引導Image之前對軟碟機做了一些必要的初始化操作,而Linux0.11沒有做。
2. 我的核心啟動是只能用磁碟片b做為根分區是的,這是預設的啟動裝置。你可以使用rdev命令改變一個磁碟鏡像的啟動裝置必須su到root來執行這個操作)rdev source/linux/Image /dev/hda1修改完之後使用 ./mcopy_kernel 將新的鏡像複製到grub盤上。(令我非常驚奇的是rdev竟然可以修改linux 0.11這麼古老的版本。這相容性太好了)
3. 我的核心鏡像雖然已經啟動了,但是好多命令不能正確執行,總是出錯說`not owner`是的。如果你已經改用硬碟root image,可以簡單解決這個檔案,首先備份一下/bin/sh,然後將/bin/sh0覆蓋/bin/sh,重啟系統之後就應該正常了。至於為什麼,可以進一步參考一下論壇上的這篇文章.
- Linux gcc編譯寫段小程式來驗證其正確性
- 描述概括Linux GCC穩定性的要求
- 暢談對Linux GCC 4.4的理解
- 詳細介紹Linux GCC系統靜態連結
- linux gcc版本升級了