㈠ 如何編譯一個操作系統內核
戲台演戲,
㈡ 如何自己編譯linux操作系統
可以搜索Linux from scratch,那裡就有教你怎樣從源代碼製作一個可用的Linux發行版的教程,全英文的。
㈢ 如何從零開始寫一個簡單的操作系統
(一)OS說明
今後,我就要開始折騰操作系統,有了一點小小干勁。
我的計劃是,先看過一份用於教育目的的系統源碼,再去翻找相應的資料(我手頭已有綠寶書),在翻資料的同時開始寫代碼,然後做好移植真機的工作,DONE!
我也明白,理性很豐滿,現實很骨感,這過程不會如同我計劃中這般簡單和輕松。但是,見難而退可不是我的風格(那樣我會被紅葉二小姐調戲的),不管如何,我都會,怎麼說呢,盡力吧。
出於課程需求,斯坦福那些人親自寫了一個名為「pintos」的系統。pintos的結構比較簡單,分為進程管理、文件系統、用戶程序、虛擬內存等幾個部分,也正是因為這個原因,我選擇pintos作為我的參考藍本,現在在讀它的源碼。
在接下來的幾個月時間里,不出意外的話,我會不斷的在博客上更新我的進度。
(三)交叉編譯環境
倘若我們要在ubuntu上編譯另外一個完整的OS,交叉編譯環境是必不可少的玩意,維基網路有雲:
交叉編譯器(英語:Cross compiler)是指一個在某個系統平台下可以產生另一個系統平台的可執行文件的編譯器。
(想起以前,我為了給路由器編譯OPENWRT,下載大量源碼,愣是編譯了幾天幾夜。那時候的我,真是「可愛」。)
為了配置好交叉編譯環境,我廢了好大力氣,最後勉強找到了組織。
編譯環境大致分為2部分,binutils和gcc。我先裝好gcc-4.9.1,之後下載gcc-4.9.1和binutils-2.25的源代碼,似乎gcc版本與binutils版本要對應來著…
開始編譯之前,需要准備全局變數(在命令行中敲入以下命令):
export PREFIX=」$HOME/opt/cross」
export TARGET=i686-elf
export PATH=」$PREFIX/bin:$PATH」
編譯Binutils
cd $HOME/binutils-2.25
mkdir build-binutils
cd build-binutils
#注意是在源碼目錄下面新建一個文件夾,然後cd到該文件夾里,然後才配置configure,不這么做的話,嘿嘿..
../binutils-x.y.z/configure –target=$TARGET –prefix=」$PREFIX」 –with-sysroot –disable-nls –disable-werror
make
make install
–disable-nls 告訴binutils,不要添加本地語言支持
–with-sysroot 告訴binutils,在交叉編譯器中允許sysroot
編譯GCC
cd $HOME/gcc-4.9.1
mkdir build-gcc
cd build-gcc
#注意是在源碼目錄下面新建一個文件夾,然後cd到該文件夾里,然後才配置configure,不這么做的話,嘿嘿..
../gcc-x.y.z/configure –target=$TARGET –prefix=」$PREFIX」 –disable-nls –enable-languages=c,c++ –without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
–disable-nls 告訴GCC,不要添加本地語言支持。
–without-headers 告訴GCC,不要依賴任何本地庫,我們必須在自己的OS中實現庫。
–enable-languages 告訴GCC,不要支持除了C、C++之外的語言。
提醒
不同機器配置不同,編譯速度也不同。
編譯這兩個軟體,我花了近3個鍾,機器配置之低自不必說,說了都是淚。
如果任何人的任何編譯過程出了任何問題,請仔細地、認真地、用心地再看看上面的命令,在你沒有弄懂它的原理之前,請不要擅自做任何「改進」(血淋淋、赤裸裸的教訓呀)。
(五)OS模糊框架
翻完了手頭的綠寶書,我才曉得,人都是被逼出來的。
操作系統的概念都差不多已經知道,接下來,該由「理論態」切換到「實踐態」了喔(書還是不能看太多,會中毒的–)。
對了,從別人推薦的地方弄來了一個框架(曾在android平台寫了幾萬代碼,我深深體會到框架的作用),輕松開工吧。
㈣ 操作系統是怎麼編譯的
電腦上有相關的編譯器,比如linux上有GCC是編譯C語言的!把你寫好的代碼編譯成計算機能執行的代碼.windows上有VS,VC,不過這幾個都是集成開發環境,包括編譯器,編輯器等!
㈤ C語言編譯操作系統的什麼部分,編譯一個系統都需要編譯什麼系統文件,讓系統能夠運行
C編譯器可以理解為開發工具,按照你說的,操作系統是C語言開發的,那用什麼開發它呢,用的就是C編譯器吧(不止編譯器,編譯器只是很少的一部分,這里用它代替開發環境),C編譯器要裝在電腦的操作系統上吧,然後你在裝有編譯器的操作系統下完成了另一個操作系統的開發,然後將你完成的這個操作系統安裝在另一台機器上,然後你的C開發的操作系統就運行了。所以說,C編譯器是運行在需要開發C程序的操作系統下的,這里你可以把你用C語言開發的操作系統認為是一個C程序。你在開發C程序而已,那這樣你就該知道你的C編譯器運行在什麼上面了吧。