自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[356877]]

想了解更多內(nèi)容,請訪問:

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

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

 1. 鴻蒙OS編譯知識

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

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

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

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


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

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

Hi3518EV300的編譯命令如下:

python build.py ipcamera_hi3518ev300 -b debug

這條編譯命令是怎么執(zhí)行的呢?


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

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

使用到的配置文件:


打開ipcamera_hi3518ev300.json,其中:

1.配置kernel為liteos_a;

2.指定編譯器為clang;

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


3. 第一個用戶態(tài)進程init_lite

Init_lite的位置:


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

啟動恢復負責在內(nèi)核啟動之后,應用啟動之前的操作系統(tǒng)中間層的啟動。涉及以下模塊:

· init啟動引導

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

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

· appspawn應用孵化

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

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

· bootstrap啟動服務模塊

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

提供了各服務和功能的啟動入口標識。在SAMGR啟動時,會調(diào)用boostrap標識的入口函數(shù),并啟動系統(tǒng)服務。

· 系統(tǒng)屬性

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

負責提供獲取與設置操作系統(tǒng)相關的系統(tǒng)屬性。

系統(tǒng)屬性包括:默認系統(tǒng)屬性、OEM廠商系統(tǒng)屬性和自定義系統(tǒng)屬性。OEM廠商部分僅提供默認值,具體值需OEM產(chǎn)品方按需進行調(diào)整,詳見“使用”部分。

base

├──startup 啟動恢復子系統(tǒng)根目錄

├──── frameworks

│ └── syspara_lite

│ ├── LICENSE 開源LICENSE文件

│ ├── parameter 系統(tǒng)屬性模塊源文件目錄

│ │ ├── BUILD.gn

│ │ └── src

│ │ ├── BUILD.gn

│ │ ├── param_impl_hal 系統(tǒng)屬性模塊基于LiteOS-M核實現(xiàn)

│ │ └── param_impl_posix 系統(tǒng)屬性模塊基于LiteOS-A核實現(xiàn)

│ └── token

│ ├── BUILD.gn

│ └── src

│ ├── token_impl_hal

│ └── token_impl_posix

├──── hals

│ └── syspara_lite 系統(tǒng)屬性模塊硬件抽象層頭文件目錄

├──── interfaces

│ └── kits

│ └── syspara_lite 系統(tǒng)屬性模塊對外接口目錄

└──── 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會讀取和執(zhí)行上面的配置文件命令行,其函數(shù)為InitReadCfg;

 

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

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


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


4. Init_lite是如何被kernel調(diào)用的?

liteos-a的啟動順序是:

1)reset_vector_up.s

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

3)OsMain

4)OsSystemInit

5)OsSystemInitTaskCreate

6)SystemInit

Hi3518 kernel啟動過程中會調(diào)用SystemInit:


SystemInit函數(shù)最后會調(diào)用OsUserInitProcess函數(shù),啟動init進程;


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


OsUserInitProcess中定義了第一個用戶態(tài)進程的地址是__user_init_entry;

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

這就是Kernel調(diào)用init_lite的入口:


想了解更多內(nèi)容,請訪問:

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

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

 【編輯推薦】

 

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

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-16 10:05:48

鴻蒙開發(fā)板Onenet平臺

2020-12-15 09:33:40

鴻蒙Hi3861開發(fā)板

2020-12-24 11:24:31

鴻蒙開發(fā)JS

2020-12-24 10:05:54

鴻蒙鴻蒙開發(fā)Hello World

2020-10-27 10:00:26

鴻蒙開發(fā)板物聯(lián)網(wǎng)

2020-11-19 10:25:24

MQTT

2021-12-29 16:13:03

鴻蒙HarmonyOS應用

2017-11-16 14:31:21

LinuxLinux LiteLinux 4.14

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2020-12-23 11:36:23

鴻蒙HarmonyOS應用程序開發(fā)

2020-12-07 12:34:33

開發(fā)板鴻蒙hello world

2020-12-11 12:45:04

鴻蒙Hi3861游戲

2009-06-26 16:07:43

MyEclipse開發(fā)Hibernate程序

2022-10-17 10:28:05

Web 組件代碼

2020-12-25 10:39:53

鴻蒙開發(fā)JS

2020-10-30 17:12:05

Hi3861

2021-06-02 16:32:23

鴻蒙HarmonyOS應用

2010-07-30 14:50:38

Flex項目

2020-12-21 09:57:52

OLED溫濕度計hi3861
點贊
收藏

51CTO技術棧公眾號