文章目录

  • 前言
  • 给设备,编写一个简单子系统
  • 总结
一、前言

对于应用层的开发,搞了十几年,其实已经有点开发腻的感觉了,翻来覆去,就是调用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实现它…