Zeal8bit操作系統(tǒng)Build & Run(基于Windows)
基于Windowns build Zeal8bit操作系統(tǒng) OS,并在Web Emulator上成功運(yùn)行,拼齊了三大操作系統(tǒng)的上Build & Run的最后一塊版圖, 給想動(dòng)手嘗試一下,并且主力工作操作系統(tǒng)為Windows的同學(xué)們分享下~
0. 前言
距離上一次發(fā)文章已經(jīng)過去兩個(gè)多月了,這兩個(gè)月除了忙于工作和家庭之外,一有時(shí)間就投身于ZOS移植到自制RV32平臺(tái)的事情上。這個(gè)事情工作量相對(duì)我來說還是有點(diǎn)大并且時(shí)間周期有點(diǎn)長(zhǎng)。雖然時(shí)間周期拖的有點(diǎn)長(zhǎng),但是進(jìn)展很大,應(yīng)用程序已經(jīng)能夠通過syscall正確訪問到內(nèi)核了。ZOS的操作流程也基本摸清楚了,并且通過這次移植過程,自己的操作系統(tǒng)的知識(shí)積累也上了一個(gè)臺(tái)階。等第一版跑通流程的demo出來后再更新詳細(xì)的移植技術(shù)細(xì)節(jié)文章出來。如果有可能,發(fā)布一個(gè)視頻出來也在考慮范圍內(nèi)。 不過在這之前,不更新點(diǎn)狀態(tài)好像說不過去。那就接著更新下ZOS 8bit在Windows操作系統(tǒng)的build和在Web Emulator中運(yùn)行的步驟吧,這樣在3大操作系統(tǒng)的操作步驟總算是齊活了。 在Windows操作系統(tǒng)中的操作,總體上遇到的問題不多,但是每個(gè)都是有難度的。在Mac OS和Ubuntu上基本build過了,Run起來就沒有問題,但是在Windows下,即使build成功了,Run起來就遇到問題了:加載過程完成不了,并且運(yùn)行畫面閃爍等。 下面就分享下如何在Windows建立一個(gè)build環(huán)境以及debug的細(xì)節(jié)信息。 1. 環(huán)境及所需工具
Windows 10及以上(本機(jī)版本:Windows 10 專業(yè)版19044.3086)
Python 3及PIP3 Windows版
z88dk-win32-2.2.zip
mingw(Windows make命令及gcc支持工具)
git工具安裝
2. 工具安裝
Python3的安裝
具體安裝過程網(wǎng)上一搜一大堆,我這邊還是不寫了。需要注意的是,在安裝完成后如果沒有自動(dòng)添加環(huán)境變量,那么需要按照如下的步驟手動(dòng)添加環(huán)境變量 右鍵“此電腦”->“屬性”->“高級(jí)系統(tǒng)設(shè)置”->“環(huán)境變量”->“系統(tǒng)變量”, 雙擊“Path”,添加Python3安裝目錄的完整路徑。
然后打開Windows PowerShell,用which命令看到python和pip3的完整路徑就代表著python軟件安裝成功并可以用命令行操作了。
Windows make命令及gcc支持工具mingw平臺(tái)安裝
這部分我有CSDN文章詳細(xì)介紹:https://blog.csdn.net/weixin_46687727/article/details/129431352
z88dk系列Windows工具下載安裝
z88dk的下載地址還是這里:https://kgithub.com/z88dk/z88dk/releases,選擇z88dk-win32-2.2.zip,如果嫌下載速度慢可以私我,我給你個(gè)百度網(wǎng)盤地址。 安裝方法采用的依然是綠色安裝+自定義設(shè)置系統(tǒng)path,方便命令行調(diào)用:先把下載好的壓縮包解壓到一個(gè)特定目錄,比如我這邊解壓到目錄:C:\Users\Administrator\Documents\GitProject\ZealOS\z88dk 然后同上述Python3工具和mingw工具安裝步驟中提到的手動(dòng)設(shè)置環(huán)境path的方法一樣,右鍵“此電腦”->“屬性”->“高級(jí)系統(tǒng)設(shè)置”->“環(huán)境變量”->“系統(tǒng)變量”, 雙擊“Path”,添加z88dk工具安裝目錄的完整路徑,如下圖所示:
git工具安裝
因?yàn)閃indows平臺(tái)不像Mac OS和Linux自帶git工具,Windows下的git工具需要手動(dòng)安裝,安裝過程按著操作步驟一步步操作即可,最后記得查看下系統(tǒng)path中有沒有g(shù)it工具目錄,沒有的話按照上述的步驟手動(dòng)添加即可。 git Windows版下載目錄:https://git-scm.com/download/win 3. Image Build
按照2#的步驟安裝好以后,應(yīng)該所有工具都支持在PowerShell中用命令行操作,那么還是老規(guī)矩,先從github上把OS代碼先clone下來: git clone https://kgithub.com/Zeal8bit/Zeal-8-bit-OS.git 獲得Zeal-8-bit-OS目錄,進(jìn)入該目錄下。
Step 1. 下載安裝menuconfig及Makefile預(yù)處理
根據(jù)之前在Ubuntu/Mac OS下的操作經(jīng)驗(yàn),先用pip3 install kconfiglib。但是Windows平臺(tái)畢竟不像前面兩者的類unix平臺(tái)直接安裝就行,Windows平臺(tái)安裝kconfiglib需要安裝一系列的可執(zhí)行文件,按照提示走即可,最終安裝完成的kconfiglib所需所有的可執(zhí)行文件如下圖所示:
Step2 執(zhí)行make menuconfig,配置os.conf文件
在PowerShell中進(jìn)入到Zeal-8-bit-OS目錄下,執(zhí)行make menuconfig,按esc鍵,保存默認(rèn)配置文件os.conf。
Step3 修改Top目錄Makefile中的menuconfig中的路徑
Windows平臺(tái)下的menuconfig直接啟動(dòng)剛才安裝的menuconfig.exe即可,而不需要像Mac OS和Linux那樣通過python啟動(dòng)腳本。 更改Zeal-8-bit-OS目錄下Makefile第144行的“$(PYTHON) $(shell $(PYTHON) -m site --user-base)/bin/menuconfig”為 “@C:\Python\Python310\Scripts\menuconfig.exe”
Step4 修改romdisk目錄Makefile中的bin生成路徑
和Mac OS, Linux目錄下的z88dk-z80編譯工具一樣的問題,編譯生成的bin文件在build/build下,因此修改方法也是一樣,按照下圖修改romdisk目錄下Makefile的第25行和29行的build目錄。
Step5 修改pack.c文件的打開屬性
這個(gè)是Windows操作系統(tǒng)下的新問題,這個(gè)問題就是造成在Windows平臺(tái),最終程序編譯成功,運(yùn)行失敗的根源所在。 先說解決方法:修改pack.c文件的第96行和第139行,在open的屬性參數(shù)中添加“O_BINARY”,使得pack程序以純二進(jìn)制的方式讀寫文件。
再解釋下問題的根源,不一定對(duì),有大佬需要糾正的話歡迎在評(píng)論區(qū)留言: Windows平臺(tái)下的回車換行符是兩個(gè)字符:0x0D 0x0A。如果以默認(rèn)的字符屬性讀寫文件,系統(tǒng)見到單獨(dú)0x0D字符而沒見到0x0A字符,會(huì)認(rèn)為字符輸入輸出異常,從而造成讀寫異常,在我這邊遇到的問題就是0x0D之后的所有字符丟失,導(dǎo)致編譯生成的bin文件不完整造成載入到Web Emulator中運(yùn)行異常,前面遇到的程序初始化加載過程異常,屏幕閃爍就是這個(gè)問題造成的。 而類Unix系統(tǒng)中(Linux和Mac OS),由于回車換行字符對(duì)應(yīng)的僅僅時(shí)回車符0x0D,因此,即使按照默認(rèn)字符屬性讀寫文件也不會(huì)造成異常。 因此解決方法修改成純二進(jìn)制方式讀寫就能避免對(duì)回車換行符異常判定的問題,看到什么數(shù)據(jù),就以純二進(jìn)制方式寫入生成的bin文件,最終生成和Linux和Mac OS下build生成的文件尺寸大小一樣。 4. Run OS in Web Emulator
修正所有問題后,按照之前文章中運(yùn)行OS img的步驟,加載os_with_romdisk.img后運(yùn)行結(jié)果。
5. 總結(jié)
三大系統(tǒng)的build & Run in Web Emulator的過程圓滿結(jié)束,花樣繁多的坑都獨(dú)立解決了,通過這些鼓搗過程,自己在增加知識(shí)積累的同時(shí),也極大地增強(qiáng)了獨(dú)立解決問題的信心和心得:不要害怕困難,去面對(duì),去搜索,去問ChatGPT,只要思想不滑坡,辦法總比困難多。諸君共勉!