最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

韋東山鴻蒙移植01-移植RTOS需要做的事

2020-11-02 09:29 作者:韋東山  | 我要投稿

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隨身課堂


韋東山鴻蒙移植01-移植RTOS需要做的事的評論 (共 條)

分享到微博請遵守國家法律
台中市| 上栗县| 六枝特区| 阳泉市| 巴塘县| 桓仁| 民勤县| 东乌| 兴义市| 中卫市| 尉犁县| 定日县| 清新县| 铁力市| 安图县| 新乐市| 临夏市| 仁化县| 灌南县| 富裕县| 和顺县| 拉萨市| 务川| 阳春市| 穆棱市| 博爱县| 宁蒗| 武城县| 开封市| 西贡区| 浠水县| 大埔区| 高尔夫| 清流县| 库尔勒市| 融水| 西华县| 彝良县| 临漳县| 黄山市| 和政县|