@toc
一、简介
ipcamera_hispark_taurus(代码版本openharmony3.1 liteos-a), 编译myapptest调用驱动GPIO_TEST
。从配置、编译,烧录到运行。
1.下载openharmony 3.1代码。
2.添加myapp子系统
3.编译烧录
4.运行
二、代码下载
代码下载参考:openharmony 3.1
三、添加myapp子系统
- 子系统配置:
添加:build\lite\components\myapp.json
{ "components": [ { "component": "myapptest", "description": "myapptest", "optional": "false", "dirs": [ "myapp" ], "targets": [ "//myapp:myapp" ], "rom": "", "ram": "", "output": [ ], "adapted_kernel": [ "liteos_a", "liteos_m" ], "features": [], "deps": { "third_party": [ "bounds_checking_function" ], "components": [] } } ] }
- 编译配置
在vendor\hisilicon\hispark_taurus\config.json
中添加:{ "subsystem": "myapp", "components": [ { "component": "myapp", "features":[] } ] }
-
修改驱动日志输出
修改文件:drivers\framework\test\unittest\platform\common\gpio_driver_test.c
static int32_t GpioTestDispatch(struct HdfDeviceIoClient *client, int cmd, struct HdfSBuf *data, struct HdfSBuf *reply) { // 开始修改---------------- HDF_LOGD("%s: my app test enter!", __func__); if (cmd == 0) { const char *readData = HdfSbufReadString(data); if (readData != NULL) { HDF_LOGE("%s: read data is %s!", __func__, readData); } // 结束修改-------------- if (reply == NULL) { HDF_LOGE("%s: reply is null!", __func__); return HDF_ERR_INVALID_PARAM; } if (!HdfSbufWriteBuffer(reply, &g_config, sizeof(g_config))) { HDF_LOGE("%s: write reply failed", __func__); return HDF_ERR_IO; } } else { return HDF_ERR_NOT_SUPPORT; } return HDF_SUCCESS; }
- myapp代码目录添加
添加在根目录下,代码见附件
。目录结构如下图:
四、编译烧录
-
在代码根目录下,执行编译docker环境:
sudo docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5
docker编译环境参考:docker
- 编译
执行下面三条命令hb set . hb build -f
如果
hb set
报错Invalid vendor path
,删除ohos_config.json
再执行上面的命令。 - 烧录
烧录使用hitool
四个文件中 三个是编译生成的,一个是源代码目录中的二进制。
源代码目录中的二进制:device\hisilicon\hispark_taurus\sdk_liteos\uboot\out\boot\u-boot-hi3516dv300.bin
将二进制拷贝到同一的目录D:\harmony_tool\hispark_taurus
中:
添加的Hi3516DV300-emmc.xml
内容如下:
```html/xml
<?xml version="1.0" encoding="GB2312" ?>
<Partition_Info>
<Part Sel="1" PartitionName="fastboot" FlashType="emmc" FileSystem="none" Start="0" Length="1M" SelectFile="D:\harmony_tool\hispark_taurus\u-boot-hi3516dv300.bin"/>
<Part Sel="1" PartitionName="kernel" FlashType="emmc" FileSystem="none" Start="1M" Length="9M" SelectFile="D:\harmony_tool\hispark_taurus\OHOS_Image.bin"/>
<Part Sel="1" PartitionName="rootfs" FlashType="emmc" FileSystem="none" Start="10M" Length="35M" SelectFile="D:\harmony_tool\hispark_taurus\rootfs_vfat.img"/>
<Part Sel="1" PartitionName="userfs" FlashType="emmc" FileSystem="none" Start="45M" Length="120M" SelectFile="D:\harmony_tool\hispark_taurus\userfs_vfat.img"/>
</Partition_Info>`Length > 文件的大小, 下一条的start = 本条的start + 本条Length` kernel的开始地址=fastboot的开始地址+fastboot的长度,即kernel的开始地址=0 + 1M
- 烧录完成,实际上没有进入系统
OHOS #
, 需要进行启动配置 - 启动配置
每一行是一条命令。setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800;go 0x80000000;"; setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rw rootaddr=10M rootsize=35M"; setenv bootdelay 3 saveenv print reset
rootaddr的值是Hi3516DV300-emmc.xml文件中rootfs的开始地址,rootsize的值是rootfs的长度
。
启动配置参考:Hi3516DV300开发板->运行 - 执行启动配置最后一条命令
reset
后,进入系统。 即进入OHOS #
。五、运行
执行:
myapptest
此文档是在HDF驱动框架探路(二):openharmony最新源码,打通应用态到内核态的基础上实践。
编译和启动配置这篇文章可参考。
附件链接:https://ost.51cto.com/resource/1740
想了解更多关于鸿蒙的内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://ost.51cto.com/#bkwz
::: hljs-center
:::