鴻蒙南向開發 編寫一個簡單子系統

文章目錄

  • 前言
  • 給設備,編寫一個簡單子系統
  • 總結
一、前言

對于應用層的開發,搞了十幾年,其實已經有點開發膩的感覺了,翻來覆去,就是調用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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91900.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超詳細:2026年博士申請時間線

博士申請是一場持久戰&#xff0c;需要提前規劃。那么&#xff0c;如何科學安排2026年博士申請時間線&#xff1f;SCI論文發表的最佳時間節點是什么&#xff1f;今天給所有打算申博的同學們&#xff0c;詳細解析下&#xff0c;每個時間節點的重點內容。2025年4月&#xff1a;是…

Python爬蟲實戰:研究tproxy代理工具,構建電商數據采集系統

1. 引言 1.1 研究背景 在大數據與人工智能技術快速發展的背景下,網絡數據已成為企業決策、學術研究、輿情監控的核心資源。據 Statista 統計,2024 年全球互聯網數據總量突破 180ZB,其中 80% 為非結構化數據,需通過爬蟲技術提取與轉化。Python 憑借其簡潔語法與豐富的爬蟲…

HighgoDB查詢慢SQL和阻塞SQL

文章目錄環境文檔用途詳細信息環境 系統平臺&#xff1a;N/A 版本&#xff1a;6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2 文檔用途 本文介紹了如何對數據庫日志進行分析…

day15 SPI

1串行外設接口概述1.1基本概念SPI&#xff08;串行外設接口&#xff09;是一種高速、全雙工、同步的串行通信協議。串行外設接口一般是需要4根線來進行通信&#xff08;NSS、MISO、MOSI、SCK&#xff09;&#xff0c;但是如果打算實現單向通信&#xff08;最少3根線&#xff09…

阿里云微服務引擎 MSE 及 API 網關 2025 年 7 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。

RFID技術在汽車倍速鏈中的應用:驅動智能制造的隱形引擎

RFID技術在汽車倍速鏈中的應用&#xff1a;驅動智能制造的隱形引擎某汽車汽車倍速鏈現場存在問題&#xff1a;&#xff08;1&#xff09;條形碼需人工掃描&#xff0c;數據采集延遲率高達15%&#xff0c;導致生產調度與實際工況脫節&#xff1b;&#xff08;2&#xff09;涂裝車…

ES集群調優策略

Index(寫)調優 副本數置0 如果是集群首次灌入數據,可以將副本數設置為0&#xff0c;寫入完畢再調整回去&#xff0c;這樣副本分片只需要拷貝&#xff0c;節省了索引過 程。 PUT /my_temp_index/_settings { "number_of_replicas": 0 } 自動生成doc ID? 通過Elast…

mysql的安裝步驟

安裝步驟1.下載軟件包&#xff0c;安裝依賴環境2.安裝mysql服務器3.基礎安裝路徑&#xff0c;創用戶&#xff0c;與權限4.初始化5.添加環境變量&#xff0c;把服務放到開機自啟里面6.啟動mysql服務器7.獲取初始密碼并且修改一&#xff0c;下載軟件&#xff08;yum&#xff0c;源…

Ant Design Vue notification自定義

<script setup> import { onMounted, h, ref, watch, getCurrentInstance } from vue; import { notification, Button } from ant-design-vue; onMounted(() > { const list [{id: 11,warnLevel: 嚴重,...},...]showMessage(list); }); function showMessage(){ for…

藍橋杯算法之搜索章 - 2

大家好&#xff0c;接下來&#xff0c;我將帶來對于搜索篇的新內容&#xff0c;這部分我將打算圍繞DFS深度優先搜索去講解。 溫馨提示&#xff1a;由于這篇文章是接著上一篇文章的&#xff0c;如果新讀者沒有看過前一篇的話&#xff0c;推薦去看一下&#xff0c;不然有些地方可…

藍橋杯----AT24C02

&#xff08;5-1&#xff09;、AT24C02掉電不丟失寫入與讀取AT24C02就是將數據寫入E2PROM&#xff0c;保證寫入數據掉電不丟失。考頻低&#xff0c;一般不考&#xff0c;頂天考幾個數據E2PROM&#xff0c;上電立馬讀取。AT24C02數據讀取一定放在主程序最前面&#xff0c;否則會…

【物聯網】基于樹莓派的物聯網開發【19】——樹莓派搭建MQTT客戶端及MQTTX使用

場景介紹 實現測試客戶端與 MQTT 服務器的連接、訂閱、取消訂閱、收發消息等功能。 MQTT發布消息到代理服務器 安裝paho-mqtt 使用pip工具安裝paho-mqtt&#xff0c;輸入以下指令即可&#xff1a; sudo pip install paho-mqtt安裝 MQTT 客戶端庫 為了方便連接到 MQTT 服務器&am…

5G-A技術浪潮勾勒通信產業新局,微美全息加快以“5.5G+ AI”新勢能深化場景應用

7月31日&#xff0c;國家互聯網信息辦公室發布《國家信息化發展報告》。《報告》中提出&#xff0c;新一代通信技術研發取得新成果&#xff0c;5G-A地空通信&#xff08;5G-ATG&#xff09;技術研發成功并完成測試驗證。5G-A技術研發測試驗證移動通信技術一般代際生命周期為10年…

SQLite Where 子句詳解

SQLite Where 子句詳解 SQLite 是一款輕量級的數據庫管理系統,廣泛應用于移動設備、嵌入式系統以及個人電腦。在 SQLite 中,WHERE 子句是 SQL 查詢語句中不可或缺的一部分,它用于指定查詢條件,從而篩選出滿足特定條件的記錄。本文將詳細介紹 SQLite 中的 WHERE 子句,包括…

AI IDE+AI 輔助編程-生成的大綱-一般般

引言概述 AI IDE 和 AI 輔助編程的興起及其對開發效率的影響提出核心問題&#xff1a;AI 工具能否真正幫助程序員減少加班&#xff08;告別 996&#xff09;&#xff1f;AI IDE 與 AI 輔助編程的定義與現狀解釋 AI IDE&#xff08;集成 AI 的開發環境&#xff09;和 AI 輔助編程…

ABP VNext + Dapr Workflows:輕量級分布式工作流

&#x1f680; ABP VNext Dapr Workflows&#xff1a;輕量級分布式工作流 &#x1f4da; 目錄&#x1f680; ABP VNext Dapr Workflows&#xff1a;輕量級分布式工作流一、引言 ?TL;DR &#x1f525;二、環境與依賴 &#x1f6e0;?三、系統架構與流程圖 &#x1f3d7;?四、…

? Unity 實現UI視差滾動效果(Parallax)鼠標控制、可拓展陀螺儀與腳本控制

? 效果如下在許多游戲、APP 或動效頁面中&#xff0c;我們常見的一種視覺效果是 視差滾動&#xff08;Parallax Scrolling&#xff09;&#xff1a;前景、中景、背景在鼠標或設備移動時以不同速率輕微移動&#xff0c;從而營造出一種空間感和深度感。目前遇到這樣一個需求 所以…

【05】VM二次開發——模塊參數配置--帶渲染/不帶渲染(WinForm界面調用 模塊參數配置)

文章目錄1 Winform 窗口界面 &#xff08;帶渲染的參數配置控件&#xff09;2 配置代碼3 運行測試4 不帶渲染的參數配置控件 對比4.1 添加控件4.2 代碼及演示效果模塊參數配置本教程介紹如何在VM二次開發中對模塊參數進行配置 1 Winform 窗口界面 &#xff08;帶渲染的參數配置…

Android 之 藍牙通信(2.0 經典)

??一、環境配置??1. ??添加依賴??在 build.gradle 中添加庫依賴&#xff1a;dependencies {implementation com.github.akexorcist:bluetoothspp:1.0.0 }2. ??權限聲明&#xff08;AndroidManifest.xml&#xff09;?<uses-permission android:name"androi…

使用 Scikit-LLM 進行零樣本和少樣本分類

使用 Scikit-LLM 進行零樣本和少樣本分類 使用 Scikit-LLM 進行零樣本和少樣本分類 在本文中&#xff0c;您將學習&#xff1a; Scikit-LLM如何將OpenAI的GPT等大型語言模型與Scikit-learn框架集成以進行文本分析。零樣本和少樣本分類之間的區別以及如何使用Scikit-LLM實現它…