0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【鴻蒙】小型系統(tǒng)LiteOS-A內(nèi)核

王程 ? 來源: jf_75796907 ? 作者: jf_75796907 ? 2024-02-29 16:16 ? 次閱讀

LiteOS-A 內(nèi)核

移植概述
移植場景
LiteOS-A 當(dāng)前支持 ARMv7-a 指令集架構(gòu),如果三方芯片為 ARMv7-a 架構(gòu),可以進(jìn)行內(nèi)核基礎(chǔ)適配;否則還需要先根據(jù)芯片的架構(gòu)來新增內(nèi)核對(duì)該芯片架構(gòu)的支持,這個(gè)工作較為復(fù)雜,不在這篇文章范圍內(nèi)。

基礎(chǔ)適配

LiteOS-A 提供系統(tǒng)運(yùn)行所需的系統(tǒng)初始化流程和定制化配置選項(xiàng)。移植過程中,需要關(guān)注初始化流程中跟硬件配置相關(guān)的函數(shù)。
如下圖所示,LiteOS-A 的初始化流程主要包含以下七步:

1.新增 target_config.h 文件,并且編寫單板內(nèi)存相關(guān)的配置宏 DDR_MEM_ADDR 和 DDR_MEM_SIZE,分別表示內(nèi)存起始地址和內(nèi)存的長度,預(yù)鏈接腳本 board.ld.S 會(huì)根據(jù)這兩個(gè)宏進(jìn)行展開生成鏈接腳本 board.ld。

2.新增定義 MMU 映射全局?jǐn)?shù)組(g_archMmuInitMapping),指定各個(gè)內(nèi)存段屬性及虛實(shí)映射關(guān)系,內(nèi)核啟動(dòng)階段根據(jù)該表建立內(nèi)存映射關(guān)系。

3.如果是多核,需要新增定義從核操作函數(shù)句柄(struct SmpOps),其中 SmpOps->SmpCpuOn 函數(shù)需要實(shí)現(xiàn)喚醒從核的功能;接著定義 SmpRegFunc 函數(shù),調(diào)用 LOS_SmpOpsSet 接口進(jìn)行句柄注冊(cè);最后通過啟動(dòng)框架完成注冊(cè)過程,即 LOS_MODULE_INIT(SmpRegFunc, LOS_INIT_LEVEL_EARLIEST)。

4.鏈接階段根據(jù)鏈接腳本 board.ld 生成內(nèi)核鏡像。

5.單核 CPU 鏡像運(yùn)行入口為匯編文件 reset_vector_up.S,多核 CPU 的入口為 reset_vector_mp.S,在匯編文件中進(jìn)行中斷向量表初始化、MMU 頁表初始化等操作。

6.reset_vector.S 匯編代碼最終會(huì)跳轉(zhuǎn)到 C 語言的 main 函數(shù),進(jìn)行硬件時(shí)鐘、軟件定時(shí)器、內(nèi)存和任務(wù)等初始化,這個(gè)過程會(huì)依賴 target_config.h 的特性宏配置,最后會(huì)創(chuàng)建 SystemInit 任務(wù),并且開啟任務(wù)調(diào)度 OsSchedStart()。

7.SystemInit 任務(wù)在單板代碼中實(shí)現(xiàn),其中調(diào)用 DeviceManagerStart 函數(shù)進(jìn)行 HDF 驅(qū)動(dòng)初始化,這個(gè)過程會(huì)調(diào)用單板代碼中的驅(qū)動(dòng)配置文件 hdf.hcs 以及 drivers 源碼實(shí)現(xiàn)
整體啟動(dòng)流程如下圖所示:
圖 1 整體啟動(dòng)流程

wKgaomXgPHuAFOY_AADXtfIfvnU676.png

從圖 1 中可以看到,內(nèi)核基礎(chǔ)適配需要單板進(jìn)行適配的代碼包含三部分:

新增 target_config.h 文件,其中新增單板硬件配置參數(shù)和特性開關(guān)的配置參數(shù),具體說明如下:

表 1 target_config.h 配置項(xiàng)說明

wKgZomXgPIeAKffvAABaqujn2k0998.png

SystemInit 函數(shù)用于單板用戶態(tài)業(yè)務(wù)初始化,典型的初始化場景如圖 2 所示:
圖 2 業(yè)務(wù)啟動(dòng)流程

wKgaomXgPJGACdXgAAAuNs3CjmU203.png

main 函數(shù)用于內(nèi)核基礎(chǔ)初始化和單板內(nèi)核態(tài)業(yè)務(wù)初始化,流程如下圖 3 所示,整體由內(nèi)核啟動(dòng)框架主導(dǎo)初始化流程,圖中淺藍(lán)色部分為啟動(dòng)框架中可接受外部模塊注冊(cè)啟動(dòng)的階段。

注意:
同一層級(jí)內(nèi)的模塊不能有依賴關(guān)系。
圖 3 內(nèi)核啟動(dòng)框架

wKgaomXgPKCASjxMAAlZmjg4a_0462.png

表 2 啟動(dòng)框架層級(jí)

wKgaomXgPK2Aa4U9AAEZGTRPe2s140.png

可通過查看系統(tǒng)編譯生成文件 OHOS_Image.map 中.rodata.init.kernel.*段內(nèi)的符號(hào)表來了解當(dāng)前已注冊(cè)進(jìn)內(nèi)核啟動(dòng)框架中的各個(gè)模塊初始化入口,以及檢查新注冊(cè)的模塊初始化入口是否生效。

編程樣例

在單板 SDK 文件中

/* 內(nèi)核啟動(dòng)框架頭文件 */
#include "los_init.h"
......
/* 新增模塊的初始化函數(shù) */
unsigned int OsSampleModInit(void)
{
    PRINTK("OsSampleModInit SUCCESS!n");
    ......
}
......
/* 在啟動(dòng)框架的目標(biāo)層級(jí)中注冊(cè)新增模塊 */
LOS_MODULE_INIT(OsSampleModInit, LOS_INIT_LEVEL_KMOD_EXTENDED);

?

驗(yàn)證

main core booting up...
OsSampleModInit SUCCESS!
releasing 1 secondary cores
cpu 1 entering scheduler
cpu 0 entering scheduler

根據(jù)上述系統(tǒng)啟動(dòng)階段的打印可知,內(nèi)核在啟動(dòng)時(shí)進(jìn)行了該注冊(cè)模塊的初始化函數(shù)調(diào)用,完成該模塊的初始化操作。
系統(tǒng)啟動(dòng)完畢后進(jìn)入內(nèi)核態(tài) shell,能夠運(yùn)行 task 命令能夠正常顯示即可。

OHOS # help
***shell commands:*
arp           cat           cd            chgrp         chmod         chown         cp            cpup      
date          dhclient      dmesg         dns           format        free          help          hwi       
ifconfig      ipdebug       kill          log           ls            lsfd          memcheck      mkdir     
mount         netstat       oom           partinfo      partition     ping          ping6         pmm       
pwd           reset         rm            rmdir         sem           shm           stack         statfs    
su            swtmr         sync          systeminfo    task          telnet        touch         umount    
uname         v2p           virstatfs     vmm           watch         writeproc   

為了能讓大家更好的學(xué)習(xí)鴻蒙 (OpenHarmony) 開發(fā)技術(shù),這邊特意整理了《鴻蒙 (OpenHarmony)開發(fā)學(xué)習(xí)手冊(cè)》,希望對(duì)大家有所幫助:

《鴻蒙(Harmony OS)開發(fā)學(xué)習(xí)手冊(cè)》

入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用開發(fā)導(dǎo)讀(ArKTS)
2.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統(tǒng)定義
2.技術(shù)框架
3.技術(shù)特性
4.系統(tǒng)安全

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構(gòu)建第一個(gè)ArkTS應(yīng)用
3.……

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

開發(fā)基礎(chǔ)知識(shí):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用基礎(chǔ)知識(shí)
2.配置文件
3.應(yīng)用數(shù)據(jù)管理
4.應(yīng)用安全管理
5.應(yīng)用隱私保護(hù)
6.三方應(yīng)用調(diào)用管控機(jī)制
7.資源分類與訪問
8.學(xué)習(xí)ArkTS
9…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于ArkTS 開發(fā):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發(fā)
2.UI開發(fā)
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網(wǎng)絡(luò)與鏈接
8.電話服務(wù)
9.數(shù)據(jù)管理
10.后臺(tái)任務(wù)(Background Task)管理
11.設(shè)備管理
12.設(shè)備使用信息統(tǒng)計(jì)
13.DFX
14.國際化開發(fā)
15.折疊屏系列
16………

wKgZomXW6RKATahiAAKz-zSMnR4040.png

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49622

    瀏覽量

    417089
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40082
  • Liteos
    +關(guān)注

    關(guān)注

    10

    文章

    32

    瀏覽量

    47483
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42481
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29732
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺談OpenHarmony LiteOS-A內(nèi)核之基礎(chǔ)硬件——中斷控制器GIC400

    OpenHarmony(以下簡稱“OpenHarmony”)采用多內(nèi)核架構(gòu),支持Linux內(nèi)核的標(biāo)準(zhǔn)系統(tǒng)、LiteOS-A小型
    的頭像 發(fā)表于 10-26 23:00 ?2061次閱讀

    【精品連載】韋東山老師帶你上手鴻蒙內(nèi)核Liteos-a開發(fā)

    驗(yàn)Harmony系統(tǒng)。作為Harmony系統(tǒng)內(nèi)核liteos-a,設(shè)計(jì)精巧而輕薄,只需要簡單移植就可以在第3方芯片上運(yùn)行。本課程注重實(shí)戰(zhàn),將在第3方芯片上移植
    發(fā)表于 09-18 18:05

    鴻蒙介紹--韋東山老師帶你上手鴻蒙內(nèi)核Liteos-a開發(fā)

    使用這些完整系統(tǒng)。所以鴻蒙要對(duì)標(biāo)的是Windows、安卓、IOS這類完整系統(tǒng),而Linux只是鴻蒙支持的內(nèi)核之一。
    發(fā)表于 09-19 08:59

    基于liteos-a,能方便地開發(fā)GUI程序嗎?

    現(xiàn)在我們知道鴻蒙內(nèi)核liteos-a,那么基于liteos-a,能方便地開發(fā)GUI程序嗎?
    發(fā)表于 09-30 10:03

    韋東山鴻蒙系統(tǒng)移植課程:給IMX6ULL編譯Liteos-a

    /rootfs.jffs2 // 改個(gè)名易辨認(rèn),燒寫工具使用rootfs.jffs2 如果一切正常,結(jié)果如下: 上面得到的liteos.bin、rootfs.jffs2可以使用燒寫工具直接運(yùn)行。請(qǐng)參考《第3篇 體驗(yàn)鴻蒙內(nèi)核
    發(fā)表于 09-30 15:51

    鴻蒙是一套龐大的體系,底層支持很多內(nèi)核吧?liteos-m, liteos-a,linux 都支持?

    大家都知道鴻蒙是一套龐大的體系,那么底層應(yīng)該支持很多內(nèi)核吧?liteos-m, liteos-a,linux 都支持嗎?
    發(fā)表于 10-10 10:08

    【HarmonyOS】鴻蒙Liteos-a內(nèi)核移植手冊(cè)(PDF下載)

    Liteos-a。鴻蒙的體系很龐大,看下圖,內(nèi)核只是其中之一:Liteos-a是什么Liteos-a是一個(gè)
    發(fā)表于 10-27 10:37

    鴻蒙liteos-a如何啟動(dòng)第一個(gè)用戶進(jìn)程init_lite

    負(fù)責(zé)在內(nèi)核啟動(dòng)之后,應(yīng)用啟動(dòng)之前的操作系統(tǒng)中間層的啟動(dòng)。涉及以下模塊:·init啟動(dòng)引導(dǎo)支持使用LiteOS-A內(nèi)核的平臺(tái),當(dāng)前包括:Hi3516DV300平臺(tái)和Hi3518EV300
    發(fā)表于 12-10 15:02

    LiteOS-A內(nèi)核

    是面向IoT領(lǐng)域構(gòu)建的輕量級(jí)物聯(lián)網(wǎng)操作系統(tǒng)。在IoT產(chǎn)業(yè)高速發(fā)展的潮流中,OpenHarmony LiteOS-A內(nèi)核能夠帶給用戶小體積、低功耗、高性能的體驗(yàn)以及統(tǒng)一開放的生態(tài)系統(tǒng)能力
    發(fā)表于 04-23 17:10

    OpenHarmony LiteOS-A內(nèi)核介紹

    簡介OpenHarmony LiteOS-A內(nèi)核是基于Huawei LiteOS內(nèi)核演進(jìn)發(fā)展的新一代內(nèi)核,Huawei
    發(fā)表于 08-19 10:46

    Liteos-a是什么?為什么還要開發(fā)Liteos-a呢?

    鴻蒙是什么?Liteos-a是什么?為什么還要開發(fā)Liteos-a呢?移植Liteos-a,需要哪些資料?
    發(fā)表于 10-13 06:05

    在100ASK_IMX6ULL上移植Liteos-a

    鴻蒙內(nèi)核Liteos-a的官方代碼目前只支持海思的芯片,我作為首批開發(fā)者入駐華為一個(gè)多月,成功在100ASK_IMX6ULL上移植了Liteos-a。本文先讓大家體驗(yàn)一下
    發(fā)表于 01-14 08:44

    VectorCAST/QA如何在LiteOS-A內(nèi)核上實(shí)現(xiàn)系統(tǒng)白盒測試

    本文將通過演示實(shí)例介紹VectorCAST/QA如何在LiteOS-A內(nèi)核上實(shí)現(xiàn)系統(tǒng)白盒測試,獲取被測程序的代碼覆蓋信息。具體實(shí)現(xiàn)在支持sudo超級(jí)用戶模式的Ubuntu 18.04(或以上)版本中
    的頭像 發(fā)表于 06-26 16:21 ?9115次閱讀
    VectorCAST/QA如何在<b class='flag-5'>LiteOS-A</b><b class='flag-5'>內(nèi)核</b>上實(shí)現(xiàn)<b class='flag-5'>系統(tǒng)</b>白盒測試

    鴻蒙liteos-a系統(tǒng)入門實(shí)戰(zhàn)直播亮點(diǎn)

    直播亮點(diǎn) 鴻蒙官方開發(fā)板功能講解,不同設(shè)備的硬件和軟件差異比較。 直播大綱 1、hi3518板子功能介紹及應(yīng)用領(lǐng)域; 2、操作系統(tǒng)liteos-a與lite-m,linux差別介紹 3
    的頭像 發(fā)表于 11-21 09:20 ?2026次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>liteos-a</b><b class='flag-5'>系統(tǒng)</b>入門實(shí)戰(zhàn)直播亮點(diǎn)

    Liteos-a內(nèi)核工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯??萍糚PG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)

    摘要OpenHarmony系統(tǒng)中使用了liteos-m、liteos-a、linux三種內(nèi)核,工作隊(duì)列是linux內(nèi)核引入的一種異步處理機(jī)制
    的頭像 發(fā)表于 04-26 09:26 ?1751次閱讀
    <b class='flag-5'>Liteos-a</b><b class='flag-5'>內(nèi)核</b>工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯??萍糚PG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)