成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2020征文-開發板鴻蒙liteos-a如何啟動第一個用戶進程Init_lite

系統
OpenHarmony源碼編譯系統使用了google開發的gn工具以及ninjia。這二者結合起來比傳統的makefile編譯系要高效,尤其適合大系統的并行編譯。對開發者而言,如果要參與OpenHarmony的開發,需要對gn的語法有些了解。本文僅做一些最基本的介紹.

[[356877]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 1. 鴻蒙OS編譯知識

OpenHarmony源碼編譯系統使用了google開發的gn工具以及ninjia。這二者結合起來比傳統的makefile編譯系要高效,尤其適合大系統的并行編譯。對開發者而言,如果要參與OpenHarmony的開發,需要對gn的語法有些了解。本文僅做一些最基本的介紹:

1.使用gn工具的話,開發者將編譯規則寫在名為BUILD.gn文件中。和Makefile一樣,gn文件有自己的語法規則,屬于領域語言(Domain Specific Language,DSL)。gn語法不難,但編譯規則本身有很多內容,所以一下子要掌握全部內容也不容易。

2.gn支持自定義模板函數,可放在名為.gni的文件中。OpenHarmony中最常見到的gn模板文件為./build/lite/config/component/lite_component.gni。.gn文件中通過import可導入gni模板文件。OpenHarmony定義了lite_component、lite_library等模板函數。

3.gn中,可執行文件的編譯函數入口為exectuable(“文件名”),共享庫的編譯規則函數為shared_library(“文件名”)。所以,如果要搜索某個文件對應的編譯規則,可以先搜索所有的BUILD.gn文件,然后grep executable。以下是grep所有的executable的結果截圖。


(以上原理引自中科創達OpenHarmony研究組 鴻蒙OS開源代碼精要解讀之——init)

2. 從編譯過程看鴻蒙OS代碼結構

Hi3518EV300的編譯命令如下:

python build.py ipcamera_hi3518ev300 -b debug

這條編譯命令是怎么執行的呢?


編譯的主文件是Build\lite\BUILD.gn文件,內容截取如下:

先編譯kernel,依賴庫;最后編譯rootfs, rootfs的編譯過程\build\lite\gen_rootfs.py打開看是先編譯userfs,再編譯rootfs。

使用到的配置文件:


打開ipcamera_hi3518ev300.json,其中:

1.配置kernel為liteos_a;

2.指定編譯器為clang;

3.列出了所有OS子系統和源碼位置,包括了kernel、startup子系統。Startup中的init_lite是kernel調用的第一個用戶態進程;


3. 第一個用戶態進程init_lite

Init_lite的位置:


官方手冊中對init的介紹 (init啟動引導指的就是init_lite)

啟動恢復負責在內核啟動之后,應用啟動之前的操作系統中間層的啟動。涉及以下模塊:

· init啟動引導

支持使用LiteOS-A內核的平臺,當前包括:Hi3516DV300平臺和Hi3518EV300平臺。

負責處理從內核加載第一個用戶態進程開始,到第一個應用程序啟動之間的系統服務進程啟動過程。啟動恢復子系統除負責加載各系統關鍵進程之外,還需在啟動的同時設置其對應權限,并在子進程啟動后對指定進程實行保活(若進程意外退出要重新啟動),對于特殊進程意外退出時,啟動恢復子系統還要執行系統復位操作。

· appspawn應用孵化

支持使用LiteOS-A內核的平臺,當前包括:Hi3516DV300平臺和Hi3518EV300平臺。

負責接受應用程序框架的命令孵化應用進程,設置其對應權限,并調用應用程序框架的入口。

· bootstrap啟動服務模塊

支持使用LiteOS-M內核的平臺,當前包括:Hi3861平臺。

提供了各服務和功能的啟動入口標識。在SAMGR啟動時,會調用boostrap標識的入口函數,并啟動系統服務。

· 系統屬性

支持使用LiteOS-M內核和LiteOS-A內核的平臺,包括:Hi3861平臺,Hi3516DV300平臺,Hi3518EV300平臺。

負責提供獲取與設置操作系統相關的系統屬性。

系統屬性包括:默認系統屬性、OEM廠商系統屬性和自定義系統屬性。OEM廠商部分僅提供默認值,具體值需OEM產品方按需進行調整,詳見“使用”部分。

base

├──startup 啟動恢復子系統根目錄

├──── frameworks

│ └── syspara_lite

│ ├── LICENSE 開源LICENSE文件

│ ├── parameter 系統屬性模塊源文件目錄

│ │ ├── BUILD.gn

│ │ └── src

│ │ ├── BUILD.gn

│ │ ├── param_impl_hal 系統屬性模塊基于LiteOS-M核實現

│ │ └── param_impl_posix 系統屬性模塊基于LiteOS-A核實現

│ └── token

│ ├── BUILD.gn

│ └── src

│ ├── token_impl_hal

│ └── token_impl_posix

├──── hals

│ └── syspara_lite 系統屬性模塊硬件抽象層頭文件目錄

├──── interfaces

│ └── kits

│ └── syspara_lite 系統屬性模塊對外接口目錄

└──── services

├── appspawn_lite 應用孵化模塊

│ ├── BUILD.gn 應用孵化模塊編譯配置

│ ├── include 應用孵化模塊頭文件目錄

│ ├── LICENSE 開源LICENSE文件

│ ├── moduletest 應用孵化模塊自測試代碼目錄

│ └── src 應用孵化木塊源文件目錄

├── bootstrap_lite 啟動服務模塊

│ ├── BUILD.gn 啟動服務模塊編譯配置

│ ├── LICENSE 開源LICENSE文件

│ └── source 啟動服務模塊源文件目錄

└── init_lite 啟動引導模塊

├── BUILD.gn 啟動引導模塊編譯配置

├── include 啟動引導模塊頭文件目錄

├── LICENSE 開源LICENSE文件

├── moduletest 啟動引導模塊自測試代碼目錄

└── src 啟動引導模塊源文件目錄

vendor

└──huawei

└──camera

└──init_configs 啟動引導模塊配置文件目錄(json格式,部署于/etc/目錄下)

Init_lite使用了配置文件init_configs;

Init_lite 的main.c會讀取和執行上面的配置文件命令行,其函數為InitReadCfg;

 

Init_lite在編譯后,生成”/bin/init”;

bin目錄在\build\lite\BUILD.gn中配置;


init名稱在base\startup\services\init_lite\BUILD.gn中指定;


4. Init_lite是如何被kernel調用的?

liteos-a的啟動順序是:

1)reset_vector_up.s

2)\kernel\liteos_a\platform\main.c

3)OsMain

4)OsSystemInit

5)OsSystemInitTaskCreate

6)SystemInit

Hi3518 kernel啟動過程中會調用SystemInit:


SystemInit函數最后會調用OsUserInitProcess函數,啟動init進程;


OsUserInitProcess函數在\kernel\liteos_a\kernel\base\core\los_process.c中定義:


OsUserInitProcess中定義了第一個用戶態進程的地址是__user_init_entry;

__user_init_entry通過宏定義LITE_USER_SEC_ENTRY進行定義,其所在文件是\kernel\liteos_a\kernel\user\src\los_user_init.c;

這就是Kernel調用init_lite的入口:


想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 【編輯推薦】

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-12-15 09:33:40

鴻蒙Hi3861開發板

2020-12-24 11:24:31

鴻蒙開發JS

2020-12-24 10:05:54

鴻蒙鴻蒙開發Hello World

2021-12-29 16:13:03

鴻蒙HarmonyOS應用

2020-11-19 10:25:24

MQTT

2020-10-27 10:00:26

鴻蒙開發板物聯網

2017-11-16 14:31:21

LinuxLinux LiteLinux 4.14

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2020-12-23 11:36:23

鴻蒙HarmonyOS應用程序開發

2020-12-07 12:34:33

開發板鴻蒙hello world

2020-12-11 12:45:04

鴻蒙Hi3861游戲

2009-06-26 16:07:43

MyEclipse開發Hibernate程序

2022-10-17 10:28:05

Web 組件代碼

2020-12-25 10:39:53

鴻蒙開發JS

2020-10-30 17:12:05

Hi3861

2021-06-02 16:32:23

鴻蒙HarmonyOS應用

2020-12-21 09:57:52

OLED溫濕度計hi3861

2010-07-30 14:50:38

Flex項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 草久久| 一区二区精品 | 亚洲国产一区在线 | 九九在线| 亚洲视频1区 | 国产精品一区二区日韩 | 福利视频网址 | 成人片在线看 | 97在线超碰| 日韩在线一区二区三区 | 日本在线看片 | 免费h视频 | 色综久久 | 欧美一区二区三区在线免费观看 | 精品一区二区在线观看 | 99精品国产在热久久 | 精品欧美一区二区三区久久久 | 国产精品日韩欧美一区二区三区 | 在线观看国产视频 | 国产区精品视频 | 日韩三级电影一区二区 | 日本精品一区二区三区视频 | 全免费a级毛片免费看视频免 | 精品视频在线观看 | 中文在线a在线 | 色播99 | 日韩伦理电影免费在线观看 | 在线国产一区二区三区 | 中国一级特黄真人毛片 | 中文字幕日韩欧美一区二区三区 | 精品国产黄色片 | 91精品国产综合久久精品 | 亚洲h在线观看 | 欧美精品v| 日韩欧美一区二区三区四区 | 亚洲 欧美 另类 日韩 | 99这里只有精品视频 | 天天操天天干天天曰 | 一区二区三区在线观看视频 | 亚洲va在线va天堂va狼色在线 | 欧美精品一区二区在线观看 |