鸿蒙南向开发 编写一个简单子系统
文章目录
- 前言
- 给设备,编写一个简单子系统
- 总结
一、前言
对于应用层的开发,搞了十几年,其实已经有点开发腻的感觉了,翻来覆去,就是调用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