国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
真正能在windows下編譯的linux 0.11,不是在Cygwin,也不是在虛擬機(jī)里!...
一、簡(jiǎn)介  
這就是能在windows環(huán)境下直接編譯的Linux 0.11了,不是在Cygwin,也不是在虛擬機(jī)里,而是使用MinGW gcc,
這是GNU gcc在Windows下的移植版本.在oldlinux上的論壇看見(jiàn)有許多人在問(wèn)怎樣在Windows下直接編譯,
最佳答案應(yīng)該是使用Cygwin,現(xiàn)在看來(lái)這個(gè)最佳答案該改了。本編譯環(huán)境源代碼加上gcc編譯器壓縮后才4.2兆。

二、編譯過(guò)程:

1.   解壓后默認(rèn)的文件夾位置是在D:\Linux-0.11,如果你不是將文件解壓到該目錄下,
    你要修改MinGW32目錄下的MinGW32.bat文件,將里面的PATH指向MinGW32的bin目錄.
2.   打開(kāi)Linux-0.11目錄,雙擊MinGW32.bat快捷方式,打開(kāi)控制臺(tái).
3.   make 一下,生成1.44M的Boot.img軟盤(pán)鏡像,要清除編譯結(jié)果請(qǐng)"make clean"
4.   如果安裝了bochs,直接雙擊bochsrc.bxrc即可運(yùn)行Linux-0.11了.
5.   也可用其它虛擬機(jī)加載Boot.img后運(yùn)行,如果出現(xiàn)Kernel panic,請(qǐng)把虛擬機(jī)里的硬盤(pán)刪了
6.   在出現(xiàn)Insert root floppy and press ENTER以后,將rootimage-0.11.img載入虛擬軟驅(qū),回車(chē)


三、在Windows下編譯Linux 0.11會(huì)遇到的問(wèn)題和對(duì)原文件作的修改:

1.趙炯博士已經(jīng)將匯編程序中引用的C變量(包括嵌入?yún)R編的C變量)的下劃線去掉了,但MinGW的gcc可能是為了與其它Windows下的編譯器
   保持兼容,并不能識(shí)別這些不帶下劃線的C變量,因而還得把原先已經(jīng)在匯編程序中去掉下劃線的C變量加上下劃線,同時(shí)也要把被C程序
   引用的匯編程序中的變量加上下劃線.

2.MinGW中不帶as86編譯器,因而把boot目錄下原先用as86編譯的bootsect.s和setup.s兩個(gè)程序修改成能用nasm編譯的程序.
   并且更名為bootsect.asm和setup.asm.

3.在Makefile作的主要修改:
   在LDFLAGS中加了--image-base 0x0000   將elf_i386改成i386pe
   將cd 與 make 之間的;改成&,如cd kernel ; make 改成cd kernel & make
   MinGW中沒(méi)有sync這個(gè)程序,可以把它注釋掉,更簡(jiǎn)單的辦法是寫(xiě)一個(gè)sync.c,這個(gè)sync.c只包含一個(gè)空的main函數(shù),編譯成sync.exe
   因?yàn)轭愃频脑?make dep會(huì)出錯(cuò)

4.生成的system文件是PE格式的(PE是Portable Executable的簡(jiǎn)稱),這是windows下的可執(zhí)行文件的格式,顯然是不能直接執(zhí)行的,
   必須加以轉(zhuǎn)化.我實(shí)現(xiàn)了通過(guò)兩種方式加以轉(zhuǎn)化.
1)寫(xiě)一個(gè)程序Trans.cpp將system.exe里的代碼和數(shù)據(jù)從PE文件里解析出來(lái),生成一個(gè)system.bin文件,這個(gè)文件是能被setup模塊
   加載的.我已經(jīng)將這個(gè)程序放在了Linux-0.11的tools目錄下,要微軟的編譯器編譯.
2)自己寫(xiě)一個(gè)PE Loader,這種方式比較麻煩,實(shí)現(xiàn)原理卻和Trans.cpp差不多,只是要用匯編來(lái)寫(xiě).
   但是當(dāng)Linux-0.11真的能運(yùn)行的時(shí)候,還是滿有成就感的.
   盡管這是一個(gè)最簡(jiǎn)單的Loader.代碼是加在Linux-0.11-With-PE-Loader\boot目錄下的setup.asm文件里,里面有詳細(xì)的注釋.

5.對(duì)tools下的build.c作了修改,使其能在windows下生成可引導(dǎo)的1.44M的軟盤(pán)鏡像文件Boot.img

6.在Link的過(guò)程中,init目錄下的main.c會(huì)出現(xiàn)以下錯(cuò)誤:
boot/head.o(.text+0x540c):fake: undefined reference to `_main'
init/main.o(.text+0x16f):main.c: undefined reference to `_alloca'
init/main.o(.text+0x174):main.c: undefined reference to `__main'
make: *** [tools/system.exe] Error 1
第一個(gè)和最后一個(gè)錯(cuò)誤還好理解,但中間那個(gè)錯(cuò)誤那就莫明其妙了,因?yàn)長(zhǎng)inux 0.11根本沒(méi)有這個(gè)函數(shù),在gcc的編譯選項(xiàng)里
也有-nostdinc .有一個(gè)解釋是main函數(shù)不是一個(gè)普通的函數(shù),為了使main能正常運(yùn)行,至少要加alloca這個(gè)內(nèi)存分配函數(shù).解決的辦法其實(shí)也很簡(jiǎn)單,
把main.c下面的main函數(shù)改名為_(kāi)main,或者是干脆把它改成另外一個(gè)函數(shù),就改成start吧.記得把head.s里的_main也改了.

在最后,要感謝《自己動(dòng)手寫(xiě)操作系統(tǒng)》的作者于淵,其實(shí)我也是先將原先只能在Linux下編譯的書(shū)里源代碼
用MinGW移植到Windows下編譯的過(guò)程中才試著在Windows下編譯Linux 0.11源代碼的.
有了在Windows下編譯Linux 0.11源代碼的經(jīng)驗(yàn),移植高版本的源代碼,像0.12,0.95,0.96等等版本應(yīng)該不會(huì)有太大的麻煩了。
也要感謝《Linux內(nèi)核完全注釋》的作者趙炯博士,是他寫(xiě)了這樣一本務(wù)實(shí)的書(shū),并且不余余力的對(duì)操作系統(tǒng)愛(ài)好者加以幫助,
包括建了一個(gè)很好的論壇。當(dāng)然,能編譯源代碼并不等于對(duì)源代碼都懂了,這離真正完全理解源代碼還很遠(yuǎn)。
我想源代碼還有許多地方是值得我去細(xì)細(xì)深究的。當(dāng)然有了能直接在Windows下編譯的Linux源代碼,我想整個(gè)進(jìn)展會(huì)快得多。
碰到模糊不清的地方,改改源代碼,加加printf,make ,幾秒鐘的事情。bochs調(diào)試,再make,再調(diào)試。。。
我也非常想和操作系統(tǒng)愛(ài)好者們共同交流心得體會(huì),借此也希望能多認(rèn)識(shí)一些朋友。
我的網(wǎng)名:flyfish
我的QQ:785606288
E-mail:I2CBus@126.com
http://www.oldlinux.org/oldlinux/viewthread.php?tid=11005&extra=page%3D1
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MinGW下安裝man工具包
【在 Windows 上開(kāi)發(fā) Linux C++ 程序:基于VSCode + MinGW】
eclipse上配置c語(yǔ)言開(kāi)發(fā)環(huán)境
Windows下FFmpeg編譯
在Linux上交叉編譯windows程序
Qt在Windows下的入口點(diǎn)函數(shù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服