Openharmony 3516应用调用到驱动尝试(L1) 原创 精华

发布于 2022-3-11 10:40
浏览
8收藏

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

Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区

  • 修改驱动日志输出
    修改文件: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应用调用到驱动尝试(L1)-开源基础软件社区

四、编译烧录

  • 在代码根目录下,执行编译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应用调用到驱动尝试(L1)-开源基础软件社区

  • 烧录
    烧录使用hitool
    Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区
    四个文件中 三个是编译生成的,一个是源代码目录中的二进制。
    Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区
    源代码目录中的二进制:device\hisilicon\hispark_taurus\sdk_liteos\uboot\out\boot\u-boot-hi3516dv300.bin
    将二进制拷贝到同一的目录D:\harmony_tool\hispark_taurus中:
    Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区
    添加的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应用调用到驱动尝试(L1)-开源基础软件社区
  • 启动配置
    每一行是一条命令。
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应用调用到驱动尝试(L1)-开源基础软件社区
启动配置参考:Hi3516DV300开发板->运行

  • 执行启动配置最后一条命令reset后,进入系统。 即进入OHOS #
    Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区

五、运行

执行:myapptest
Openharmony 3516应用调用到驱动尝试(L1)-开源基础软件社区
此文档是在HDF驱动框架探路(二):openharmony最新源码,打通应用态到内核态的基础上实践。
完整添加自定义驱动步骤参考Openharmony 添加内核驱动(L1)
编译和启动配置这篇文章可参考。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
myapp.rar 2.17K 37次下载
已于2022-5-11 08:48:01修改
9
收藏 8
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐