> 技术文档 > 鸿蒙南向开发 编写一个简单子系统

鸿蒙南向开发 编写一个简单子系统

文章目录

一、前言

对于应用层的开发,搞了十几年,其实已经有点开发腻的感觉了,翻来覆去,就是调用api,页面实现,最多就再加个性能优化,但对底层了解并不深入。所以,其实不管是android,还是鸿蒙开发,一直都有一个心病,就是怎么进到系统开发中来。

现在智能设备是越来越多,想要做智能设备的开发,那么就需要搞懂系统源码,并再此基础上进行二次开发,以及优化。

这里呢,我是从鸿蒙南向系统开发来着手,首先就是系统源码的下载,还有编译。这些是最基础的,如果这个都搞不定,那么也就没有后面的事了。

我用的是OpenHarmony4.0 源码,编译总共花了4个小时,经过几个魂牵梦绕的夜晚,最终编译成功。编译出来的镜像有3.31个G。

其实呢,系统的开发,本质是要会c/c++,因为要开发驱动,要跟硬件打交道的。还有要搞懂系统源码,包括系统的框架,以及编译相关的内容。接下来,我们就简单的开发一个子系统,对系统的开发有一个简单的概念。

二、简单的子系统开发

先看看,最终的目录和文件如下:
在这里插入图片描述
接下来,我们就一步步来实现。

1、创建目录,编写简单的业务代码

在源码的根目录下,比如我的oh40下,然后创建一个sample文件夹,然后再创建hello/src/helloworld.c 这个目录以及文件,其实就一个简单的打印语句函数,输出Hello World!

#include #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 __cplusplusextern \"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