韋東山鴻蒙移植01-移植RTOS需要做的事
1. 框架

鴻蒙是一套完整的、普通人可以直接使用的操作系統(tǒng),跟Windows、安卓、IOS類似。
常見的錯誤觀點是把鴻蒙跟Linux放在一起來對比,這不對:
Linux只是一個內(nèi)核,普通人無法使用
還需要在Linux之上安裝各類程序
比如Ubuntu等發(fā)行版,它們在Linux內(nèi)核之上,還有桌面、各類辦公軟件
鴻蒙支持多種內(nèi)核:Linux、Liteos(又分為Liteos-a、Liteos-m)
在內(nèi)核之上,鴻蒙還有各種子系統(tǒng),在子系統(tǒng)之上又有桌面等軟件
2. 嵌入式軟件系統(tǒng)的組成

我們可以把內(nèi)核之上的軟件,簡單稱為APP(實際上還可以細分,比如各類子系統(tǒng)、桌面等APP)。
啟動內(nèi)核,并不復(fù)雜,使用U-boot即可。
3. 移植最小系統(tǒng)要做的幾件事
串口相關(guān)
打印(只是打印調(diào)試信息)
串口驅(qū)動(可發(fā)可收,APP執(zhí)行printf時可以從串口打印,所以需要驅(qū)動)
MMU(Memory Management Unit,內(nèi)存管理單元)的設(shè)置:虛擬地址與物理地址
完善中斷子系統(tǒng)
提供系統(tǒng)tick時鐘
為串口驅(qū)動實現(xiàn)基于中斷的讀取字符函數(shù)
實現(xiàn)存儲設(shè)備驅(qū)動程序
在存儲設(shè)備上燒錄文件系統(tǒng)
3.1 串口相關(guān)
與Linux的串口驅(qū)動相比,鴻蒙的串口驅(qū)動極大簡化了。
對于輸出:不使用中斷,直接使用查詢方式輸出。
對于輸入:使用中斷,我們只需要提供底層硬件相關(guān)的代碼。
要注意:使用的是虛擬地址。
3.2 MMU設(shè)置
MMU有2大功能:
3.2.1 權(quán)限管理
比如可以把進程A、B的地址空間完全隔離開,它們互不影響
寫得差的進程、有惡意的進程,不能影響到其他進程
用戶程序、內(nèi)核地址空間完全隔離開:不允許用戶直接訪問硬件
示例如下

3.2.2 地址映射
使能MMU后,CPU發(fā)出的地址被稱為"虛擬地址",它不是直接發(fā)送給硬件,而是發(fā)給MMU
MMU根據(jù)頁表
進行權(quán)限判定
轉(zhuǎn)換為物理地址,發(fā)給外設(shè)
運行app1時,CPU發(fā)出的addr,通過MMU映射到paddr1;
運行app2時,CPU發(fā)出的同一個addr,通過MMU映射到paddr2;
雖然app1、app2使用的地址相同,但是對應(yīng)的內(nèi)存不同,如下圖:

在移植過程中,我們不需要關(guān)注“權(quán)限”,只需要關(guān)注“地址映射”
3.3 中斷子系統(tǒng)
操作系統(tǒng)跟單片機程序最大的區(qū)別,就是多任務(wù),也就是同時運行多個程序。
同時,對人類來說是這樣的,多個程序好像可以同時運行,實際上它們是輪流運行。
3.3.1 操作系統(tǒng)"同時"運行多個任務(wù)
輪流運行:

3.3.2 串口接收數(shù)據(jù)的中斷
使用串口接收數(shù)據(jù)時,如果使用"查詢"方式,低效并且費電。
一般都使用中斷方式。
3.4 存儲設(shè)備的驅(qū)動程序
板子上一般都有EMMC、SD/TF卡、Nor Flash、Nand Flash等存儲設(shè)備。
Nor Flash、Nand Flash的驅(qū)動程序相對簡單,但是這些設(shè)備比較少見了。
而EMMC、SD/TF卡的驅(qū)動程序又太復(fù)雜,足夠出一個專題了。
我們聚焦在最小系統(tǒng)的移植,先把流程走通:用內(nèi)存來模擬Flash。
3.5 根文件系統(tǒng)
光有存儲設(shè)備還不行,上面需要有文件:這就是根文件系統(tǒng)。
一個程序要能運行,出了你寫出的程序本身,還需要其他庫,比如printf
就不是你寫的,它在庫文件里。
根文件系統(tǒng)里會有這些內(nèi)容:
程序
庫
配置文件
用戶數(shù)據(jù)(可選)
驅(qū)動程序(可選)
4. 想做更多
為有更好的人機交互可以移植LCD、觸摸屏驅(qū)動
為了方便開發(fā),移植EMMC驅(qū)動、網(wǎng)卡驅(qū)動
要接各類外設(shè),還需要I2C、SPI、GPIO、UART驅(qū)動
攝像頭、聲卡驅(qū)動
百問網(wǎng)技術(shù)論壇:
http://bbs.100ask.net/
線上教學(xué)網(wǎng)站:
https://www.100ask.net/index
百問網(wǎng)開發(fā)板:
https://weidongshan.tmall.com/
技術(shù)交流群(鴻蒙開發(fā)/Linux/嵌入式/驅(qū)動/資料下載)
QQ群:869222007
單片機-嵌入式Linux交流群:
QQ群:536785813

百問科技公眾號

百問科技服務(wù)號

韋東山嵌入式Linux隨身課堂