文章目錄
- 前言
- 給設備,編寫一個簡單子系統
- 總結
一、前言
對于應用層的開發,搞了十幾年,其實已經有點開發膩的感覺了,翻來覆去,就是調用api,頁面實現,最多就再加個性能優化,但對底層了解并不深入。所以,其實不管是android,還是鴻蒙開發,一直都有一個心病,就是怎么進到系統開發中來。
現在智能設備是越來越多,想要做智能設備的開發,那么就需要搞懂系統源碼,并再此基礎上進行二次開發,以及優化。
這里呢,我是從鴻蒙南向系統開發來著手,首先就是系統源碼的下載,還有編譯。這些是最基礎的,如果這個都搞不定,那么也就沒有后面的事了。
我用的是OpenHarmony4.0 源碼,編譯總共花了4個小時,經過幾個魂牽夢繞的夜晚,最終編譯成功。編譯出來的鏡像有3.31個G。
其實呢,系統的開發,本質是要會c/c++,因為要開發驅動,要跟硬件打交道的。還有要搞懂系統源碼,包括系統的框架,以及編譯相關的內容。接下來,我們就簡單的開發一個子系統,對系統的開發有一個簡單的概念。
二、簡單的子系統開發
先看看,最終的目錄和文件如下:
接下來,我們就一步步來實現。
1、創建目錄,編寫簡單的業務代碼
在源碼的根目錄下,比如我的oh40下,然后創建一個sample文件夾,然后再創建hello/src/helloworld.c 這個目錄以及文件,其實就一個簡單的打印語句函數,輸出Hello World!
#include <stdio.h>
#include "helloworld.h"int main(int argc, char **argv)
{HelloPrint();return 0;
}void HelloPrint()
{printf("\n\n");printf("\n\t\tHello World!\n");printf("\n\n");
}
2、添加頭文件sample/hello/include/helloworld.h
一樣的操作,創建一個所要依賴的頭文件
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endifvoid HelloPrint();#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // HELLOWORLD_H
3、新建編譯組織文件
新建sample/hello/BUILD.gn
這個文件很重要,主要是用來生成ninja文件的,也是為了后面我們能夠執行命令的關鍵
(注意點,因為這個編譯類似文本的,編譯工具不會檢查,所以代碼一定不能敲錯,不然檢查起來會很麻煩)
import("//build/ohos.gni") # 導入編譯模板
ohos_executable("helloworld") { # 可執行模塊sources = [ # 模塊源碼"src/helloworld.c"]include_dirs = [ # 模塊依賴頭文件目錄"include" ]cflags = []cflags_c = []cflags_cc = []ldflags = []configs = []deps =[] # 部件內部依賴part_name = "hello" # 所屬部件名稱,必選install_enable = true # 是否默認安裝(缺省默認不安裝),可選
}
4、新建部件配置規則文件
新建sample/hello/bundle.json文件,添加部件sample 的描述
{"name": "@ohos/hello","description": "Hello world example.","version": "3.1","license": "Apache License 2.0","publishAs": "code-segment","segment": {"destPath": "sample/hello"},"dirs": {},"scripts": {},"component": {"name": "hello","subsystem": "sample","syscap": [],"features": [],"adapted_system_type": [ "mini", "small", "standard" ],"rom": "10KB","ram": "10KB","deps": {"components": [],"third_party": []},"build": {"sub_component": ["//sample/hello:helloworld"],"inner_kits": [],"test": []}}
}//上面代碼分兩部分看:前面那部分是描述該部件,所屬子系統的信息。第二部分component定義該部件構建的相關配置。sub_component 一定要指明該部件包含的模塊
5、修改子系統配置文件
在根目錄下,找到 build/subsystem_config.json,這個文件包含了很多子系統,因為我們要添加自己的子系統,所以找到最后位置,添加我們的子系統。
"sample": {"path": "sample","name": "sample"}
//最前面有個逗號,自己要加上
6、修改產品配置文件。
因為我用的是4.0的源碼進行編譯的,而且是rk3568的設備,所以直接根目錄下去找到這個文件 vendor/hihope/rk3568/config.json
這里有很多部件,我們只要在最后,添加對應我們自己的hello部件即可
{"subsystem": "sample","components": [{"component": "hello","features": []}]
}
三、編譯
1、執行編譯命令
./build.sh --product-name rk3568 --ccache
2、編譯成功
編譯成功會輸出下面的提示
3、編譯之后輸出的鏡像
編譯之后的文件都存放在根目錄的out 對應的設備下面,比如我的是out/rk3568下面,
鏡像文件就在 out/rk3568/packages/phone/images
四、燒錄
1、下載rk3568設備的燒錄工具,以及usb驅動
根據廠家提供的工具,以及文檔說明,將鏡像燒錄到設備中
導入鏡像,然后執行hdc target boot loader 重啟設備,能夠識別設備之后,點擊設備分區表,然后點擊執行,當右邊出現,下載完成,緊接著看到設備重啟,也就燒錄成功了。
五、運行
用MobaXterm 連接串口,這個時候會不斷輸出系統的日志,這個時候只要輸入 helloworld 回車,就會看到Hello World! 的字樣,這樣就說明我們的子系統正確運行了。
注意:helloworld 輸入的時候會被打斷,可以通故dmesg -n 1 然后回車,將日志停止,這樣就能比較好的輸入命令了,下面是正常執行后的效果:
以上就是全部,制作簡單子系統的全部過程。
最后獻上我的個人v,專屬終身顧問,解答關于鴻蒙相關的東西,包括項目中的問題,還有最新的技術點,快速開發,搶在前頭。hmssz1
技術迭代很快,不要在一個問題上拔不出來,找到專業的人,快速的解決,作為程序員時間是最寶貴的,不要自己蒙頭苦干,等你搞懂了,這個技術已經過時了。
總結
1、介紹鴻蒙南向開發背景
2、簡單的子系統開發過程
3、最后成功運行子系統
如果對你有一點點幫助,那是值得高興的事情。:)
我的csdn:http://blog.csdn.net/shenshizhong
我的簡書:http://www.jianshu.com/u/345daf0211ad