之前在樹(shù)莓派4b上點(diǎn)亮了OHOS3.0,不過(guò)內(nèi)核是用tftp拉取的,根文件系統(tǒng)掛在了NFS上,拔了網(wǎng)線就無(wú)法啟動(dòng)。當(dāng)然這么操作只是為了方便調(diào)試,而最終需要的是一個(gè)可以燒錄到TF卡上的img鏡像文件。這就需要將所有調(diào)試好的內(nèi)容添加到OHOS3.0的編譯框架,本以為是很簡(jiǎn)單的事情,好家伙,整了這么久,感覺(jué)添加編譯框架比移植本身更復(fù)雜。于是我整理了添加樹(shù)莓派單板到編譯框架的內(nèi)容,希望對(duì)各位有所幫助,為大家避坑。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、郊區(qū)網(wǎng)站維護(hù)、網(wǎng)站推廣。
主要參考 hisilicon build組件倉(cāng),添加一個(gè)products編譯組件,這個(gè)組件是在產(chǎn)品配置文件中指定的。比如
productdefinecommonproductsRPI4B.json
其他部分參考Hi3516,但是其中2條,指定單板組件路徑,并添加組件。如果刪除這兩條,將不能編譯內(nèi)核,只生成OHOS的文件系統(tǒng)。
接下來(lái)在device目錄下,新建一個(gè)raspberrypi編譯組件文件夾,并添加 ohos.build 文件。和前面產(chǎn)品配置文件中的設(shè)置對(duì)應(yīng)起來(lái)了。
deviceraspberrypibuildohos.build
新建 deviceraspberrypibuildBUILD.gn 當(dāng)然每個(gè)廠家不可能只有1個(gè)板子,如果有其他單板就在這里指定,比如樹(shù)莓派2B、3B等
既然前面指定了rpi4b的編譯配置組件,那么就在 deviceraspberrypi 新建一個(gè) rpi4b 的目錄,可以參考 hi3516dv300 build組件
deviceraspberrypirpi4bBUILD.gn
至此一個(gè)rpi4b build組件就添加到OHOS3.0的編譯框架了,之后相關(guān)內(nèi)容添加到這個(gè)文件夾下就可以了。
接下來(lái)分析下目前移植了樹(shù)莓派4B的哪些內(nèi)容,如何將這些內(nèi)容編譯進(jìn)OHOS3.0。
關(guān)于補(bǔ)丁可以參考 Patch組件,可以得知內(nèi)核編譯由kernel.mk來(lái)執(zhí)行
kernellinuxbuildkernel.mk
所以補(bǔ)丁文件需要放到正確的路徑下,以正確的名字命名就可以patch到內(nèi)核。
hdf.patch補(bǔ)丁文件,現(xiàn)在還沒(méi)有移植HDF相關(guān)內(nèi)容,所以可以先使用Hi3516的
rpi4b.patch補(bǔ)丁文件,使用樹(shù)莓派的官方鏡像,
kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig
內(nèi)核配置文件目前已知的需要開(kāi)啟下面內(nèi)容,但是肯定不止這些,以后會(huì)繼續(xù)更新
Pi4的GPU是VideoCore VI支持OpenGL ES 3.2,而Pi3的GPU是VideoCore IV支持OpenGL ES 2.0。VideoCore IV 驅(qū)動(dòng)程序是 VC4,VideoCore VI 驅(qū)動(dòng)程序的 V3D。內(nèi)核已經(jīng)提供驅(qū)動(dòng),參考rpi4b_standard_defconfig將驅(qū)動(dòng)直接編入到內(nèi)核。
同時(shí)需要在config.txt中開(kāi)啟設(shè)置
OHOS中修改weston的配置文件,指定顯示驅(qū)動(dòng)
systemetcweston.ini
具體思路就是先查找設(shè)備號(hào),根據(jù)設(shè)備號(hào)找到驅(qū)動(dòng)程序。
前面內(nèi)核配置的時(shí)候rpi4b_standard_defconfig中已經(jīng)將觸摸驅(qū)動(dòng)編入內(nèi)核,所以后面不需要在init加載模塊了,修改下eudev的配置文件即可。
third_partyeudevrules.d ouchscreen.rules
正常情況下內(nèi)核是由uboot進(jìn)行引導(dǎo)的,而且OHOS默認(rèn)生成uImage。但是樹(shù)莓派自帶BootLoader,雖然可以先用樹(shù)莓派自帶的BootLoader啟動(dòng)uboot,再用uboot加載uImage,但是這樣會(huì)比較麻煩,而且會(huì)增加啟動(dòng)時(shí)間。不過(guò)目前 zImage是寫(xiě)死在kernel.mk中的,沒(méi)辦法改下編譯腳本把。
kernellinuxbuildkernel.mk 將 uImage 改為 zImage modules dtbs
kernellinuxbuildbuild_kernel.sh
kernellinuxbuildBUILD.gn
kernellinuxbuildkernel_module_build.sh
這里內(nèi)核編譯會(huì)依賴(lài)product_path="vendor/$product_company/$product_name"下的hdf.hcs文件,得先新建一個(gè)應(yīng)付下,不然會(huì)報(bào)下面這個(gè)錯(cuò)誤。
ninja: error: '../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs', needed by 'gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb', missing and no known rule to make it
新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs
對(duì)于鏡像燒錄,Hi3516會(huì)將uImage、system.img、vendor.img等鏡像燒寫(xiě)到emmc,但是樹(shù)莓派使用TF卡啟動(dòng),所以需要對(duì)TF卡進(jìn)行分區(qū),然后復(fù)制對(duì)應(yīng)的內(nèi)容到各個(gè)分區(qū)。首先制作樹(shù)莓派boot目錄,這個(gè)用來(lái)目錄存放樹(shù)莓派設(shè)備樹(shù)、config.txt、cmdline.txt、內(nèi)核鏡像等信息。寫(xiě)一個(gè)簡(jiǎn)單的mkboot.py腳本來(lái)實(shí)現(xiàn)這個(gè)功能,位置在碼倉(cāng)rpi4bdeviceraspberrypiimagesmkboot.py將會(huì)生成boot.img。
為了方便燒錄,需要將boot.img、system.img、updater.img、vendor.img、userdata.img合并成一個(gè)rpi4b.img。還是寫(xiě)一個(gè)簡(jiǎn)單的腳本來(lái)處理這個(gè)步驟rpi4bdeviceraspberrypiimagesmkboot.py。
不過(guò)有個(gè)問(wèn)題,主分區(qū)只支持4個(gè),所以u(píng)pdater.img暫時(shí)先不合并了,這個(gè)問(wèn)題等以后再來(lái)處理。
最后將會(huì)得到一個(gè)rpi4b.img的鏡像文件,將這個(gè)文件燒錄到SD卡就可以了。
Linux:可以使用dd命令
windows:使用Win32 Disk Imager工具燒錄即可。
到這里總算是跑通了一個(gè)完整的添加新單板的流程,只不過(guò)目前只適配了顯示和觸摸。接下來(lái)打算嘗試HDF或者distributed部分。
鴻蒙不是基于linux開(kāi)發(fā)的,是基于微內(nèi)核開(kāi)發(fā)的。
鴻蒙微內(nèi)核是基于微內(nèi)核的全場(chǎng)景分布式OS,可按需擴(kuò)展,實(shí)現(xiàn)更廣泛的系統(tǒng)安全,主要用于物聯(lián)網(wǎng),特點(diǎn)是低時(shí)延,甚至可到毫秒級(jí)乃至亞毫秒級(jí)。
鴻蒙OS實(shí)現(xiàn)模塊化耦合,對(duì)應(yīng)不同設(shè)備可彈性部署,鴻蒙OS有三層架構(gòu),第一層是內(nèi)核,第二層是基礎(chǔ)服務(wù),第三層是程序框架。
擴(kuò)展資料:
華為推出的鴻蒙系統(tǒng)試圖解決物聯(lián)網(wǎng)時(shí)代多終端開(kāi)發(fā)難題。余承東介紹,鴻蒙系統(tǒng)擁有分布式OS架構(gòu)、確定時(shí)延引擎和高性能IPC技術(shù)等新特性。
可以讓鴻蒙OS實(shí)現(xiàn)一端開(kāi)發(fā)、多端部署。這個(gè)萬(wàn)物互聯(lián)時(shí)代帶來(lái)的新機(jī)遇,終于被華為等到了,而華為在自研軟硬件上的儲(chǔ)備,要遠(yuǎn)超普通人的想象。
據(jù)華為技術(shù)老兵近期發(fā)表的《華為操作系統(tǒng)28年史》介紹,華為的操作系統(tǒng)經(jīng)過(guò)了獨(dú)立開(kāi)發(fā)、基于第三方微內(nèi)核開(kāi)發(fā)RTOS、基于開(kāi)源的嵌入式Linux宏內(nèi)核開(kāi)發(fā)等多個(gè)歷程。
華為先后開(kāi)發(fā)出了路由器和數(shù)據(jù)通信交換機(jī)操作系統(tǒng)VRP、云計(jì)算操作系統(tǒng)Fusion Sphere、服務(wù)器操作系統(tǒng)歐拉Euler OS和物聯(lián)網(wǎng)嵌入式操作系統(tǒng)Lite OS。
參考資料來(lái)源:百度百科—鴻蒙
參考資料來(lái)源:人民網(wǎng)—鴻蒙出世 國(guó)產(chǎn)操作系統(tǒng)破局?
1、最近鴻蒙炒的火熱,19年就說(shuō)ipc是谷歌fuchsia的5倍,但他當(dāng)時(shí)沒(méi)有對(duì)比宏內(nèi)核,正常宏內(nèi)核的ipc效率肯定很高。
我自己覺(jué)得微內(nèi)核確實(shí)是體積小了但是外面的那些驅(qū)動(dòng)什么的又需要開(kāi)發(fā)者去開(kāi)發(fā),這些開(kāi)發(fā)者前期也就只有華為的開(kāi)發(fā)人員去弄
鴻蒙獨(dú)立了跑到國(guó)外谷歌全家桶又是一個(gè)不可逾越的鴻溝,GMS用不了國(guó)外就沒(méi)希望,何況fuchsia這個(gè)谷歌的備用還在那擺著,所以鴻蒙切入點(diǎn)在國(guó)內(nèi),以萬(wàn)物互聯(lián)為主題是最佳發(fā)展方式。
個(gè)人比較喜歡鴻蒙的一些東西,也相信它一定會(huì)成功,或許3年或許更久,但是現(xiàn)在取代安卓是不可能的的,不過(guò)打破壟斷全新開(kāi)源,重新定義5G萬(wàn)物互聯(lián)時(shí)代,作為一個(gè)學(xué)生還是開(kāi)了眼的。
2、相對(duì)與安卓來(lái)說(shuō)全場(chǎng)景、分布式是鴻蒙OS2.0的最大優(yōu)勢(shì),鴻蒙OS2.0首先在分布式能力上經(jīng)行了提升分布式軟總線、分布式數(shù)據(jù)管理、并提升了分布式安全能力,(手表電視 汽車(chē) 中控外加美的九陽(yáng)老板電器)、EMUI11借鑒了鴻蒙的分布式技術(shù),多屏協(xié)同。
3、GPL:谷歌曾提出影響開(kāi)源世界最大的障礙就是GPL,GPL規(guī)定要求代碼使用者代碼衍生出來(lái)的東西永遠(yuǎn)開(kāi)源。谷歌為了隔離gpl的開(kāi)源,提出了Apache(阿帕奇)協(xié)議,就是我開(kāi)源你隨便。
谷歌把一個(gè)魔改后的linux作為內(nèi)核封裝起來(lái),中間加了一層類(lèi)庫(kù),讓其他所有部分對(duì)內(nèi)核的調(diào)用,都像是兩個(gè)軟件之間的調(diào)用一樣,然后把所有涉及到GPL授權(quán)的代碼全部替換重寫(xiě),開(kāi)源并以Apache協(xié)議授權(quán)。
這就導(dǎo)致linux社區(qū)不滿(mǎn),因?yàn)樗`反了Linux開(kāi)源精神如果非強(qiáng)制會(huì)導(dǎo)致沒(méi)人愿意開(kāi)源,2012年安卓在linux分支樹(shù)上被永遠(yuǎn)除名
話說(shuō)回來(lái)要不是Apache哪里來(lái)的EMUI Flyme Coloros,要是GPL的話那不是給人打工嗎。
4、安卓的linux內(nèi)核包含了權(quán)限管理,CPU指令適配、設(shè)備驅(qū)動(dòng)等等
微內(nèi)核簡(jiǎn)單理解就是:裁剪了一下,更小了,手機(jī)平板手表通用,手機(jī)攝像頭給手表用,內(nèi)核一樣,手機(jī)上有攝像頭的設(shè)備驅(qū)動(dòng),不同于wifi、藍(lán)牙華為可以通過(guò)分布式軟總線來(lái)實(shí)現(xiàn)信息的傳遞,這一步5G起到了關(guān)鍵作用。關(guān)于分布式軟總線的介紹在博客最后。
優(yōu)勢(shì)1:靈活的全場(chǎng)景適用,不同屏幕大小、功耗和性能要求的設(shè)備可以靈活選擇,這樣一個(gè)應(yīng)用就有可能在多個(gè)設(shè)備或者華為所說(shuō)的全設(shè)備上運(yùn)行,這對(duì)于5G萬(wàn)物互聯(lián)來(lái)說(shuō)非常方便
優(yōu)勢(shì)2:安全,惡意代碼只能在某個(gè)模塊下運(yùn)行,不再是宏內(nèi)核整個(gè)root權(quán)限下隨便運(yùn)行
5、當(dāng)前鴻蒙智慧屏上鴻蒙1.0是linux 鴻蒙 liteos三核并存,因?yàn)樗娉跗诒仨氁WC鴻蒙系統(tǒng)的可用性,他前期要兼容安卓,一點(diǎn)一點(diǎn)替換安卓的驅(qū)動(dòng)等等,開(kāi)源的世界有現(xiàn)成的就沒(méi)人會(huì)去造輪子。
6、對(duì)于鴻蒙的分布式,也就是軟硬件資源共享,其實(shí)是基于微內(nèi)核的,宏內(nèi)核要實(shí)現(xiàn)ipc通信就需要用戶(hù)空間進(jìn)程調(diào)度到內(nèi)核空間內(nèi)核空間再到另一個(gè)用戶(hù)進(jìn)程空間實(shí)現(xiàn)資源傳遞,宏內(nèi)核的內(nèi)核空間是共享的,所謂的新建一個(gè)進(jìn)程可以說(shuō)是只是說(shuō)新建了自己獨(dú)立的用戶(hù)空間,這里面的ipc通信效率目前來(lái)說(shuō)是要比微內(nèi)核的效率要高的,而華為的分布式ipc是要通過(guò)軟總線來(lái)實(shí)現(xiàn)的,如果借助tcp來(lái)實(shí)現(xiàn)安全可以保證,但是協(xié)議繁瑣效率降低,這對(duì)于我們物聯(lián)網(wǎng)的交互來(lái)說(shuō)是不可采取的,所以軟總線相當(dāng)于一個(gè)魔改的tcp。
分布式軟總線將原本計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議七層結(jié)構(gòu)中的 表示層、會(huì)話層、傳輸層和網(wǎng)絡(luò)層等協(xié)議精簡(jiǎn)為一層 ,稱(chēng)為 分布式軟總線的極簡(jiǎn)協(xié)議 ,能提升有效載荷。
通過(guò)報(bào)文簡(jiǎn)化、包頭簡(jiǎn)化、交互簡(jiǎn)化,基于應(yīng)用場(chǎng)景的緩沖機(jī)制等方式,提升有效的傳輸負(fù)荷、解決傳統(tǒng) TCP/IP 協(xié)議過(guò)于復(fù)雜的協(xié)議層次模型、層層增加包頭和解包,充分發(fā)揮物理通信通道的最大效能。
通過(guò)對(duì)協(xié)議的優(yōu)化,分布式軟總線無(wú)線連接、高帶寬、低時(shí)延、低功耗、安全接入的優(yōu)點(diǎn)。分布式軟總線實(shí)現(xiàn)小于20ms的低時(shí)延,端到端時(shí)延小于20ms,有效吞吐量達(dá)到1.2Gbps,抗丟包性達(dá)到25%, 高性能IPC將進(jìn)程間的通信效率提升了5倍 。
簡(jiǎn)單理解可以把它想象成優(yōu)化的tcp更快實(shí)現(xiàn)資源共享。
鴻蒙系統(tǒng)的cmd命令在文件中。根據(jù)查詢(xún)相關(guān)公開(kāi)信息顯示配備鴻蒙系統(tǒng)的電腦使用的任然是Windows系統(tǒng),所以在文件夾中開(kāi)啟cmd命令。命令提示符是在操作系統(tǒng)中,提示進(jìn)行命令輸入的一種工作提示符。在不同的操作系統(tǒng)環(huán)境下,命令提示符各不相同。在windows環(huán)境下,命令行程序?yàn)閏md.exe。