Openharmony – 3516应用调用到驱动尝试

系统教程10个月前发布 creeper
18 0 0

Openharmony - 3516应用调用到驱动尝试

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

一、简介

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":[] }
]
}

Openharmony - 3516应用调用到驱动尝试

修改驱动日志输出:

修改文件: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代码目录添加:

添加在根目录下,代码见附件。目录结构如下图:

Openharmony - 3516应用调用到驱动尝试

四、编译烧录

在代码根目录下,执行编译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再执行上面的命令。

Openharmony - 3516应用调用到驱动尝试

烧录:

烧录使用hitool:

Openharmony - 3516应用调用到驱动尝试

四个文件中 三个是编译生成的,一个是源代码目录中的二进制。

Openharmony - 3516应用调用到驱动尝试

源代码目录中的二进制:device\hisilicon\hispark_taurus\sdk_liteos\uboot\out\boot\u-boot-hi3516dv300.bin。

将二进制拷贝到同一的目录D:\harmony_tool\hispark_taurus中:

Openharmony - 3516应用调用到驱动尝试

添加的Hi3516DV300-emmc.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 #, 需要进行启动配置。

Openharmony - 3516应用调用到驱动尝试

启动配置:

每一行是一条命令。

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的长度。

Openharmony - 3516应用调用到驱动尝试

启动配置参考:Hi3516DV300开发板->运行。

执行启动配置最后一条命令reset后,进入系统。 即进入OHOS #。

Openharmony - 3516应用调用到驱动尝试

五、运行

执行:myapptest。

Openharmony - 3516应用调用到驱动尝试

此文档是在​​HDF驱动框架探路(二):openharmony最新源码,打通应用态到内核态​​的基础上实践。

编译和启动配置这篇文章可参考。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

Openharmony - 3516应用调用到驱动尝试

© 版权声明

相关文章