韋東山鴻蒙移植02_必備基礎知識

1. 基礎知識

移植內核對技術的要求比較高、比較細。

1.1 單片機相關的知識

  • 棧的作用

  • 加載地址、鏈接地址

  • 重定位

  • 幾個簡單的硬件知識

    • 串口
    • 定時器
  • 中斷的概念

1.2 Linux操作相關的知識

  • Linux常用命令
  • 簡單的腳本:腳本就是把命令寫在一個文件裏
  • Makefile
  • GCC編譯命令

1.3 芯片相關知識

  • 能閱讀芯片手冊(英文)

    • 移植最小系統時,涉及的手冊內容不多
  • 能看懂硬件原理圖

    • 移植最小系統時,涉及的原理圖內容不多

2. 驅動程序知識

對於只有單片機知識的人來說,怎麼去操作硬件?

  • 直接讀寫寄存器
  • 使用庫函數

在RTOS中,本質也是去讀寫寄存器,但是需要有統一的驅動程序框架。
所以:RTOS驅動 = 驅動框架 + 硬件操作

2.1 以點燈爲例

2.1.1 硬件原理

在這裏插入圖片描述

2.1.2 單片機點燈

  • 方法1:直接讀寫寄存器
    在這裏插入圖片描述

  • 方法2:使用廠家的HAL庫
    在這裏插入圖片描述

2.1.3 FreeRTOS點燈

在這裏插入圖片描述

2.1.4 rt-thread點燈

  • 方法1:直接操作寄存器
    在這裏插入圖片描述

  • 方法2:使用驅動程序

    • 驅動模型如下:
      在這裏插入圖片描述

    • 驅動示例如下:
      在這裏插入圖片描述

  • 調用過程框架
    在這裏插入圖片描述

  • 調用過程示例

    在這裏插入圖片描述

2.1.5 Liteos-a/Linux怎麼點燈

使用MMU時,一般APP與內核是相互隔離的。APP通過標準的open/read/write等文件操作函數去調用驅動程序。
如下圖所示:
在這裏插入圖片描述

爲何要多此一舉?

  • 它們支持MMU(內存管理單元)
  • 用戶程序跟內核是分隔開的,用戶程序不能直接讀寫寄存器
  • 用戶程序通過標準接口訪問驅動程序
  • 基於這些內核的軟件一般都比單片機軟件複雜,術業有專攻
  • 不應該讓寫APP的人去看原理圖、寫驅動、寫寄存器
  • 軟件和硬件隔離,硬件再怎麼變化,只需要改驅動,APP不需要改

2.1.6 Android怎麼點燈

在這裏插入圖片描述

  • Android是Linux操作系統上的一套操作系統
  • Android通過Linux來訪問硬件,本質還是Linux驅動
  • 一般的C程序、C++程序,可以直接調用open/read/write等函數
  • 使用java編寫的程序要訪問C函數需要通過JNI

2.2 以LCD爲例

2.2.1 硬件原理

在這裏插入圖片描述

  • 設置LCD控制器,它會自動從FrameBuffer中讀取每個像素的數據發送到LCD上
  • 把要顯示的文字、圖像放入FrameBuffer中

2.2.2 Liteos-a/Linux怎麼操作LCD

在這裏插入圖片描述

爲何要多此一舉?

  • 它們支持MMU(內存管理單元)
  • 用戶程序跟內核是分隔開的,用戶程序不能直接讀寫寄存器
  • 用戶程序通過標準接口訪問驅動程序
  • 基於這些內核的軟件一般都比單片機軟件複雜,術業有專攻
  • 不應該讓寫APP的人去看原理圖、寫驅動、寫寄存器
  • 軟件和硬件隔離,硬件再怎麼變化,只需要改驅動,APP不需要改

2.2.3 Android怎麼操作LCD

在這裏插入圖片描述

Android/QT等GUI系統裏:

  • LCD會被多個APP使用,如果不統一管理必定亂套
  • 所以,肯定有一個管理軟件,或稱爲服務軟件
  • APP自行構造自己的界面,提交給顯示顯示服務軟件
  • 顯示服務軟件:根據多個APP的前後層次,合併最終的顯示圖像
  • 再調用驅動程序顯示出來

2.2.4 鴻蒙怎麼操作LCD

鴻蒙支持Liteos、Linux內核,在內核之上怎麼去爲多個APP管理唯一的顯示設備?
鴻蒙還支持軟總線,理論上可以支持更多的LCD,怎麼做?
務軟件:根據多個APP的前後層次,合併最終的顯示圖像

  • 再調用驅動程序顯示出來

2.2.4 鴻蒙怎麼操作LCD

鴻蒙支持Liteos、Linux內核,在內核之上怎麼去爲多個APP管理唯一的顯示設備?
鴻蒙還支持軟總線,理論上可以支持更多的LCD,怎麼做?
不知道,一起期待它開放出更多源碼吧。

百問網技術論壇:
http://bbs.100ask.net/

線上教學網站:
https://www.100ask.net/index

百問網開發板:
https://weidongshan.tmall.com/

技術交流羣(鴻蒙開發/Linux/嵌入式/驅動/資料下載)
QQ羣:869222007

單片機-嵌入式Linux交流羣:
QQ羣:536785813
百問科技

百問科技公衆號

在這裏插入圖片描述

百問科技服務號

在這裏插入圖片描述

韋東山嵌入式Linux隨身課堂