FreeNOS源码编译
?????? FreeNOS是一個(gè)使用C++編寫的一個(gè)具有完整多任務(wù)調(diào)度,進(jìn)程間通信以及中斷處理等功能作系統(tǒng),還包括文件系統(tǒng)掛載,文件節(jié)點(diǎn)創(chuàng)建,基本上涵蓋了一個(gè)操作系統(tǒng)啟動(dòng)初期的實(shí)地址模式到保護(hù)模式的跳轉(zhuǎn),初始化硬件資源以及實(shí)現(xiàn)內(nèi)核態(tài)與用戶態(tài)的陷阱門接口,加載設(shè)備驅(qū)動(dòng),最后進(jìn)入shell終端,是學(xué)習(xí)操作系統(tǒng)很好的一個(gè)開源項(xiàng)目。
????? 項(xiàng)目主頁 www.freenos.org,也即是FreeNOS的官網(wǎng),如下:
?該項(xiàng)目源碼使用C++編寫,使用了許多經(jīng)典的設(shè)計(jì)模式,模塊類,虛函數(shù)也運(yùn)用的十分巧妙,對(duì)深刻學(xué)習(xí)理解C++編程有很大的幫助作用。
????? 編譯過程會(huì)遇到很多坑,如果讀者遇到了坑,看看《編譯FreeNOS遇到的坑匯總》是否有解決方法了。
???? 讀者可以從官網(wǎng)上下載源碼,也可以從GitHub上下載源碼。截至2022年2月2日,最新的版本為1.0.3版本,GitHub歷史版本有很多,如下:
?編譯過程基本上是按照官網(wǎng)documentation描述來的,如下:
之后就跳轉(zhuǎn)到FreeNOS/README.md at master · nieklinnenbank/FreeNOS · GitHub 頁面,按頁面的來就行,也可以在源碼目錄的根目錄下,找到README.md文件,里面也有編譯過程的說明。
下面就以1.0.3版本,以64位x86架構(gòu)的機(jī)器,以Ubuntu 16.04操作系統(tǒng)為例子來講解編譯過程,基本上是翻譯README.md文件的內(nèi)容,只是對(duì)坑做了重點(diǎn)說明。
首先需要在機(jī)器上安裝一些依賴庫或工具。FreeNOS需要SCons和C++編譯器,如:g++,用于編譯生成鏡像文件。
1:執(zhí)行如下命令,以便更新系統(tǒng)庫緩沖和安裝一些必要的開發(fā)工具:
sudo apt-get update sudo apt-get install build-essential scons genisoimage xorriso qemu-system binutils-multiarch u-boot-tools說明:scons是Linux下的一種自動(dòng)構(gòu)建工具,類似于cmake,在安裝scons之前,需要確保已經(jīng)安裝過python,Ubuntu16.04自帶python2.7,所以不需要重復(fù)安裝python。?
2:如果系統(tǒng)是64位的,你需要執(zhí)行如下命令以安裝GCC multilib package包以便能交叉編譯以適應(yīng)32位的架構(gòu)。
sudo apt-get install gcc-multilib g++-multilib3:下載源碼,執(zhí)行如下命令下載最新源碼:
git clone https://github.com/nieklinnenbank/FreeNOS4:為了編譯構(gòu)建FreeNOS,執(zhí)行如下命令:(注意:該命令采用默認(rèn)設(shè)置構(gòu)建,默認(rèn)是指:Intel架構(gòu)的cpu,采用gcc的debug模式)
scons注意這里有2個(gè)坑:
坑1:編譯時(shí)會(huì)彈出如下錯(cuò)誤:
scons: Building targets ...
ISO build/intel/pc/boot.iso
grub-mkrescue: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory
這個(gè)坑請(qǐng)參考《編譯FreeNOS報(bào)/usr/lib/grub/i386-pc/modinfo.sh doesn‘t exist錯(cuò)誤》博文解決。
坑2:
ImportError: No module named pysvn
這個(gè)坑請(qǐng)參考《編譯FreeNOS遇到的坑匯總》的坑4描述解決。
如果一切沒問題,在freeNOS/FreeNOS-1.0.3/build/intel/pc目錄下會(huì)生成boot.iso文件,如果沒生成,證明編譯構(gòu)建沒成功!
為了在編譯時(shí)將所有的構(gòu)建命令輸出到控制臺(tái),可以采用如下命令編譯構(gòu)建:
scons VERBOSE=True為了在編譯構(gòu)建過程中開啟編譯器優(yōu)化功能,可以采用如下命令編譯構(gòu)建:
scons DEBUG=False但是這樣的話,將會(huì)導(dǎo)致GDB調(diào)試功能失效。為了清除構(gòu)建目錄,可以執(zhí)行如下命令:
scons -c為了刪除編譯構(gòu)建過程中產(chǎn)生的scons臨時(shí)文件,可以執(zhí)行如下命令:
rm -rf build .sconf_temp .sconsign.dblite以上說明的是基于intel+X86_64的編譯構(gòu)建方法,對(duì)于ARM的請(qǐng)參見上文提到的README.md文件描述。
參考鏈接:https://blog.csdn.net/weixin_38134600/article/details/88329971
總結(jié)
以上是生活随笔為你收集整理的FreeNOS源码编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于来了!小米手环8“证件照”外形公布:
- 下一篇: FreeNOS的启动