㈠ 操作系統的代碼是由誰編譯的,執行的
操作系統的代碼也是用某種語言寫和程序,所以由對應語言的編譯器編譯(如果是匯編語言程序,就由匯編程序進行匯編),執行當然是由CPU來做了!
㈡ 普及知識!跪求答案! 操作系統是怎麼開發、編譯(怎麼編譯的)並且運行在設備上(這個問題的意思是
就我知道的向你說一說:
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語言 相關連的理解。
如果你想試一試可以在虛擬機下玩一玩。
——以上內容僅供參考——
㈢ 操作系統是怎麼編譯的
電腦上有相關的編譯器,比如linux上有GCC是編譯C語言的!把你寫好的代碼編譯成計算機能執行的代碼.windows上有VS,VC,不過這幾個都是集成開發環境,包括編譯器,編輯器等!
㈣ 如何自己編譯LINUX操作系統
編譯這個難啊,還要網速允許
你可以編譯
gentoo單純的自己編譯一個不屬於任何現在的版本可能不是一
般人可以做到的
(1)javac:作用:編譯java文件;使用方法: javac Hello.java ,如果不出錯的話,在與Hello.java 同一目錄下會生成一個Hello.class文件,這個class文件是操作系統能夠使用和運行的文件。
(2)java: 作用:運行.class文件;使用方法:java Hello,如果不出錯的話,會執行Hello.class文件。注意:這里的Hello後面不需要擴展名。
假設我有一個Hello.java文件放在D:javatest 文件夾下。
打開cmd命令窗口,會出現C:userlenovo 這里出現的是系統用戶名,這里我們需要將路徑轉移到java文件所在目錄。
緊接著輸入 D:回車,會出現一下界面:
這時候我們需要定位到java文件所在目錄(這里是javatest目錄),接著輸入 cd javatest 回車。
此時進入到D:javatest目錄中,此時的Hello.java文件就在這里
這時候我們就可以用javac命令編譯啦,輸入javac Hello.java回車
這里如果沒有任何提示表示編譯成功,此時打開d:javatest文件夾你會發現此時多了一個名為Hello.class的文件,這就是操作系統能夠運行的文件。
接著輸入 java Hello回車,你就會看到文件被運行的結果。
第一:Hello.java中的內容是一個類,這個類的名字與.java文件名字必須完全一致。如果不一致將出錯。這里當你通過eclipse創建一個類文件的時候你就會理解的更清楚了,這里不贅述。
第二:javac 和 java 命令的使用方法要注意,格式。
第三:要使用這兩命令,必須配置好環境變數。
㈥ 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
!
㈧ 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內核版本。是不是你剛下的那個呢!有沒有成就感?