導航:首頁 > 源碼編譯 > 操作系統是怎麼編譯的

操作系統是怎麼編譯的

發布時間:2022-10-18 11:24:45

㈠ C語言編譯操作系統的什麼部分,編譯一個系統都需要編譯什麼系統文件,讓系統能夠運行

C編譯器可以理解為開發工具,按照你說的,操作系統是C語言開發的,那用什麼開發它呢,用的就是C編譯器吧(不止編譯器,編譯器只是很少的一部分,這里用它代替開發環境),C編譯器要裝在電腦的操作系統上吧,然後你在裝有編譯器的操作系統下完成了另一個操作系統的開發,然後將你完成的這個操作系統安裝在另一台機器上,然後你的C開發的操作系統就運行了。所以說,C編譯器是運行在需要開發C程序的操作系統下的,這里你可以把你用C語言開發的操作系統認為是一個C程序。你在開發C程序而已,那這樣你就該知道你的C編譯器運行在什麼上面了吧。

㈡ 如何編譯linux操作系統的源代碼

首先uname
-r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname
-r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核
make
menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make
bzImage、make
moles、make
moles
4、安裝,make
install
5、.創建系統啟動映像,到
/boot
目錄下,執行
mkinitramfs
-o
initrd.img-2.6.36
2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於
/boot/grub/grub.cfg
文件的設置,找到if
[
"${linux_gfx_mode}"
!=
"text"
]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry
'Ubuntu,
with
Linux
3.2.0-35-generic'
--class
ubuntu
--class
gnu-linux
--class
gnu
--class
os
{
recordfail
gfxmode
$linux_gfx_mode
insmod
gzio
insmod
part_msdos
insmod
ext2
set
root='(hd0,msdos1)'
search
--no-floppy
--fs-uuid
--set=root
9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic
root=UUID=9961c170-2566-41ac-8155-18f231c1bea5
ro
quiet
splash
$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改
set
default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make
menuconfig這一步,改好後就萬事ok了。
最後再用uname
-r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?

㈢ 世界上第一個操作系統是如何編寫的

人家就問第一個操作系統是怎麼做出來的,樓下一堆人都沒說到點子上。
這個問題就像是沒有生產機器,那第一台機器是怎麼生產出來的。
第一台計算機,或者稱之為打孔計算機,破譯機。它的作用就是讀0和1的不同排列組合,通過這些組合來解譯不同的意思。比如 0010代表什麼意思,1101代表什麼意思。這些是一開始就設定好了的,就像是中國古代的算盤一樣,上面的運算元代表5,下面的運算元代表1是一個道理。
好了,開始就設定好這個解碼功能後,這台破譯機就可以讀信息了,它通過什麼讀呢?那時候沒有數據,沒有數字信號,只有模擬信號,它們就讀打孔紙。就是在紙上寫,然後打出一個一個孔,像卡紙一樣。設備就讀這個孔的排列,根據不同的排列去找這個排列代表了什麼,然後給出答案。這就是最初的計算機原理,非常簡單,它就是一個密碼解釋器,或者說是簡單的編譯器。
那時候就是用來算加減法等一些計算,它就是一個大型的計算器。
後來發展的復雜一些了,也就是增加了更多的0和1的組合來豐富機器的解釋庫,來計算更復雜的公式。
這時候你要問了,這些0和1的解釋庫是存在哪裡的?這就是為什麼以前的計算機房間那麼大個。它們是通過電子管的開和關來代表了0和1,通過電路給電子管通電,比如說那張紙打的孔,有一個像探頭一樣的東西,探測到那裡有一個孔,或者沒有孔,就給出電信號來控制不同的電子管組合的通路和斷路,最後給出結果。
比如我用紙戳一個1+1=?,我就戳一個(0000 0000 0000 0001)代表1(00001 001000 ....)代表+ (0000 0000 0000 0001)代表1,然後給機器讀,機器讀出來後,就會根據電子管的通斷組合,最後將結果反饋回來。一開始是用亮了多少盞燈來表示計算結果,有了顯示器後,才把它變成了顯示畫面。

顯示畫面其實也是有一個庫的,比如0001,你就給我顯示1,00010,你就給我顯示2,它會找對應的庫,這個庫一開始就用不同的電路
搭建做好,無非就是不同的電路通斷,電壓,電流等各種奇怪的組合來完成 。它自身有一套神奇的檢測機制,這個就不說了,我也說不清楚。
那麼回到最開始的問題,世界上第一個操作系統是怎麼出現的?就是用手在紙上寫出來的。
一開始不能算是系統,比如我要算一個公式,a /b +1+a+5*b,舉個例子,這個公式我要經常用,我不可能每次都要去戳很多紙,所以我只需要先做一個模板,然後留出一個空白,需要的時候,把a和b戳出來就可以了,這樣就很方便了。
後來這些公式越來越復雜,甚至是出現了不同的計算,比如說, 如果a<100,那麼就執行xxxx,如果a>100,就執行xxxx。然後這個模板就越做越大,需要戳的紙也越來越長。
好傢伙,後來實在戳不過來了,十個手指都戳破了,甚至計算機也運行不過來了,更復雜的運算根本做不了。不行,不能這樣下去了。
後來就開始有人研究了,電子技術的發展越來越高科技,電子管也做得越來越小,最後用集成電路來控制開關,但是其實原理都是一樣的。可以運算的公式和能力也越來越強。其實還是不同的電子管組合成不同的開關,你以為這個組合就是幾個電子組的組合嗎?不,已經達到上億,上千億個電子管的組合了,這也是集成電路的優勢。

一開始是用紙來保存信息,但是前面說了,紙已經不夠用了,就開始出現了軟盤,光碟。光碟上的凹凸點,代表了0和1,其實就是存儲的介質發生了變化,後面發明了磁碟,發明了光碟,甚至是軟盤、機械硬碟,SSD等不同的儲存介質,這些其實就是保存的方式不同而已,其實它們保存的數據還是和打孔紙一樣,就是0和1的數據,只是相比紙而言,保存得更多,更方便,也更容易被機器讀取。
這時候保存的介質發生了變化 ,那麼讀取這些數據的那個探頭也發生了變化,變成了像軟盤的磁頭,光碟的激光頭等。

當這種保存的介質從紙變成了硬碟後,就會出現一個問題,一開始寫這些孔的時候,是用筆和給紙戳一個窟窿來讓機器識別,現在要怎麼把0和1這種數據寫到磁碟里呢?這里就發明了鍵盤了,最初的鍵盤當然和現在不一樣,但是原理是一樣的。還是按一個鍵,給一個電信號,磁頭收到了電信號,會判斷是0還是1,如果是0,就是反磁,如果是1就是正磁。一開始的鍵盤,就是只有幾個鍵,1鍵和0鍵。
後來有人覺得整天打0和1太麻煩了,如果我要打a這個符號,我就要按(0000000000000000),按這么多下,我的手都要變成一指禪了,於是就發明更復雜的鍵盤,比如我要打a,b,c,d,我就一開始就設定好,我打a,就直接發送一串機器碼(0000000000000000),我要打b就發送一串機器碼(0000000000000001),類似這樣的。其實也是給鍵盤做好一個約定,我一開始就把一些特定的,經常使用到的符號或其他有代表性的字母、數字,把它們對應的0和1組合的機器碼先做成一個表格,存到鍵盤的識別庫里,我按哪一個字元,你就給我發送哪一個字元對應的機器碼就可以了,這樣我就不用從早到晚按0和1這兩個鍵,按個沒完。這么一設定,我就不用記太多的機器碼組合了,一開始就把這些組合給分門別類。
這樣發展到這里,鍵盤的雛形就出來了,也為匯編的發展埋下了伏筆。匯編其實就是最接近或者它就是機器碼的一種組合語言,機器是可以直接識別出來。
前面說了,為了執行不同的公式和復雜的計算,就出現了這同的模板,只需要修改模板上的參數,就可以重復執行這些模板。
現在這些板從紙上存到了軟盤上,現在就更方便了。以前用紙的時候,用過一次,紙就沒用了,現在軟盤上的數據一直在,我只需要用磁頭把原來填的數據擦掉,重新寫個新的參數就可以了。你可以理解成當時在紙上我用鉛筆寫參數,用過一次,用橡皮擦給擦掉重復寫。但是紙是需要打孔的,打了孔,橡破擦也沒用,已經是一個孔了,你也補不上,所以那紙就廢掉了。
但是軟盤不一樣,軟盤是可以重復寫的。可以把磁消掉重新在那個位置寫一個新的參數,這樣就可以重復利用了。
後來這些模板越做越復雜,最後慢慢的發展成了一個小型的,有自己一些獨立功能的計算系統,這可以理解為,它有了系統的一些特性,但是還不算系統。
後來這些模板更強大了,有人覺得,因為需要更加強大的功能,一般的模板已經沒辦法滿足了,而且通過這種最原始的abcd來拼湊這些公式、模板,太累了。於是就有人開始寫中間解釋器。
怎麼理解呢?前面說了,一開始大家都是寫1和0組合,覺得太累了,於是把1和0的不同組合做成了一個庫,我只需要輸入1+1,abcd這種鍵盤上約定好的字母,鍵盤就發送對應的1和0組合給機器,機器就可以直接識別了。
現在需求越來越復雜,發現光打這些abcd,需要打越來越多的代碼,發現和之前打1和0一樣累了,怎麼辦呢?於是就有人打算再創一個中間庫,把這些abcd,1,2,3等組合做成一個庫,不同的組合代碼不同的意思,這就是從機器向交互語言的發展了初期了。
這個庫一開始還是用abcd等最初的那個鍵盤庫打上去的,當然做的也很累,但是只要這個庫完善好了,後面要繼續發展更高級的交互語言就簡單多了,以後所有交互語言寫出來的東西,都通過這個庫翻譯成機器語言庫,機器語言庫就可以識別了。
於是有了交互語言庫,大家就不用打太多的字元來拼湊成不同的模板了,因為交互語言庫有了不同的單片語合成更加有意義符號,人一看就懂,不需要那些零零散散的字母,沒有任何意義在裡面,還需要死記硬背。

這就有點像是古代的文言文,你一聽不知道他在說什麼,然後去查一下文言文字典,這樣你才能知道他在說什麼。
現在你可以用白話言語來交流了,這樣就更輕鬆了,你可以直接和他對話。
至於機器聽不聽的懂你說的意思,這個不要緊,有解釋庫,你把解釋庫做好了,你說的每一句話會自動翻譯成機器語言,就可以了。
隨著語言的越來越強大,現在就可以寫出更加復雜的模板了,後來顯示器的發展越來越強大,讓這些模板出現了更豐富的畫面,其實它顯示什麼東西,也還是會有一個庫的,只要約定好,我返回的這串代碼代表了什麼東西,你就顯示什麼東西就可以了。甚至後來有了圖片。

其實圖片的顯示也有自己的一個約定,就是我返回什麼代碼,你就解析成什麼顏色點,然後不同的代碼組合,就會現出一大串的顏色點組合在一起,就變成了有顏色的圖片和畫面。其實文字也是圖片的一種,就是一種圖信號。
回到模板上來,後來慢慢的,這些模板越來越強大,甚至有人開始動起心思,開始給這些模板加皮膚,加各種好看或者神奇的功能,讓它更加好用,於是最初始的系統就這么慢慢的發展起來了。
其實系統它不是突然就有的,是在整個機器的發展的過程中,慢慢的累積到一定程度後,順應發展而來的。

這些模板也是從最簡單的公式模板慢慢發展成了現在有了自己的界面,有了自己的獨立運算功能和各種娛樂功能等強大的系統。
最初的系統,也就是這些模板的誕生,其實是很辛苦的,它們需要有一定的積累,一些基礎的識別庫的完善,這些都是需要最初的那代人,一開始就約定好,然後慢慢地完善起來,然後高級的語言和系統才能通過這些庫來和機器交流。

㈣ 普及知識!跪求答案! 操作系統是怎麼開發、編譯(怎麼編譯的)並且運行在設備上(這個問題的意思是

就我知道的向你說一說:
1,操作系統用的是c語言開發的:
但這c語言和普通的c語言是有區別的,不能使用庫函數。
這個c語言的編譯器也和普通的編譯器有區別的。《30天自製操作系統》-用的是開源的c編譯器並且經過修改的。
2,第一扇區的bootstrap
bootloader或者說bootlstrap是用匯編語言寫的
但是這個匯編器和拿來開發應用程序也是有區別的,
就拿匯編中的偽指令org和p應用程序的匯編編譯器是無法達到想要的目的的。
如果第一扇區是啟動分區,那麼對應的最後兩個位元組為511-0x55AA
bootloader開始就是一條跳轉指令0xeb開頭的後面是偏移量,緊接著就是這個媒介的配置信息
,緊接著才是我們要寫的16bit的匯編語言。
這里要做的事就是:
讀取硬碟上的數據放到內存中准備運行,保存配置數據,由16bit實地址模式切換到32模式。。。
本人原來照葫蘆畫瓢畫過。
但是切換到32bit下要用到內存保護機制,內存映射機制,虛擬內存機制。。。這些和計算機硬體的密切相關。無奈本人了解的計算機硬體一般都是十六位的,而且大多與概念相關。
而且對於的intel指令手冊都是英文的,總而言之能力有限無法進行下去。
如果要開發操作系統,以我看:
計算機組成原理特別是32bit下的內存映射保護相關內容必須知道
匯編和c語言那時必須的會
耐心時間
推薦書籍《30天自製操作系統》
通過開發操作系統可以加深 匯編與計算機硬部件 匯編和c語言 相關連的理解。
如果你想試一試可以在虛擬機下玩一玩。
——以上內容僅供參考——

㈤ UNIX操作系統是怎麼被編譯的

unix下一般用gcc編譯C語言,g++編譯c++
編譯其實是四個過程:預處理、編譯、匯編、鏈接
由gcc這個程序執行。
gcc只是個程序,程序也就是一堆二進制碼構成的東西罷了!
寫個字元串變成二進制碼的程序不沖突呀!

㈥ 新手學堂:Linux操作系統中如何編譯C程序

登陸後用vi
寫一個C程序:
過程如下:
vi
Hellolinux.c
回車
進入後選擇一種輸入方式(a
,i
,o);
#include
main()
{
printf(Hello
linux
!n);
}
寫完程序後Esc
並保存退出(:w
保存
:q
退出)
然後用gcc
編譯:
gcc
Hellolinux.c
回車
用ls
查看就會看到一個Hellolinux.out
文件,下面我們運行它;

./Hellolinux.out
回車
將會顯示
Hello
linux
!

㈦ 操作系統是怎麼編譯的

電腦上有相關的編譯器,比如linux上有GCC是編譯C語言的!把你寫好的代碼編譯成計算機能執行的代碼.windows上有VS,VC,不過這幾個都是集成開發環境,包括編譯器,編輯器等!

㈧ 操作系統是用什麼編程軟體編出來得

我簡單的來說下標准答案:
你想想,計算機它是一個硬體,和硬體打交道的是什麼呢?最小我想是寄存器什麼,2進制的東西。當然人不可以理解什麼0101的東西,所以就有了什麼asm匯編語言的東西,這個語言可以簡單的講清楚這個邏輯和硬體,當然主要就是為了人和計算機溝通。
windows這個操作系統原本都是asm的東西,後來呢就用c語言來改寫,現在呢裡面有點C++.然後人們通過調用windows系統的API函數來和計算機溝通。
所以啊,標准答案就是:asm匯編,C,C++全都有。

㈨ ubuntu系統是如何編譯生成的講的越詳細越好。

ubuntu是怎麼編譯的??
其實ubuntu只是一個發行版,並不是編譯而生成的。單個軟體或者說linux可以編譯生成,但是一個發行版是很多軟體的集合,例如GNOME LIGHT 等。

㈩ 操作系統的代碼是由誰編譯的,執行的

操作系統的代碼也是用某種語言寫和程序,所以由對應語言的編譯器編譯(如果是匯編語言程序,就由匯編程序進行匯編),執行當然是由CPU來做了!

閱讀全文

與操作系統是怎麼編譯的相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:422
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:192
pdf劈開合並 瀏覽:28
不能修改的pdf 瀏覽:752
同城公眾源碼 瀏覽:489
一個伺服器2個埠怎麼映射 瀏覽:298
java字元串ascii碼 瀏覽:79
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:946
安卓導航無聲音怎麼維修 瀏覽:333
app怎麼裝視頻 瀏覽:431
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491