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

碼磚民工
发布于 2022-3-11 10:40
浏览
8收藏

@toc

一、简介

ipcamera_hispark_taurus(代码版本OpenHarmony 3.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": "myapp",
      "description": "myapp",
      "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环境:
3.1beta1: sudo docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5
3.1release: sudo docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

注:不通版本的代码使用的docker镜像不一样,编译失败要不换docker镜像,要不升级hb. 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的长度
执行命令 命令解释

reset 表示复位单板
saveenv 表示保存当前配置。
setenv bootargs “console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=35M rw”; 表示设置启动参数,输出模式为串口输出,波特率为115200,数据位8,rootfs挂载于emmc器件,文件系统类型为vfat,“rootaddr=10M rootsize=35M rw”处对应填入rootfs.img的烧写起始位置与长度,此处与IDE中新增rootfs.img文件时所填大小必须相同。
setenv bootcmd “mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000”; 读取FLASH起始地址为0x800(单位为512B,即1MB),大小为0x4800(单位为512B,即9MB)的内容到0x80000000的内存地址,该大小(9MB)与IDE中所填写OHOS_Image.bin文件大小必须相同。

OpenHarmony 3516应用调用到驱动尝试(L1)-鸿蒙开发者社区
启动配置参考:Hi3516DV300开发板->运行

  • 执行启动配置最后一条命令reset后,进入系统。 即进入OHOS #
    OpenHarmony 3516应用调用到驱动尝试(L1)-鸿蒙开发者社区

五、运行

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

补充:ipcamera_hispark_taurus_linux烧录配置

<?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_linux\u-boot-hi3516dv300_emmc.bin"/>
<Part Sel="1" PartitionName="image" FlashType="emmc" FileSystem="none" Start="1M" Length="9M" SelectFile="D:\harmony_tool\hispark_taurus_linux\uImage_hi3516dv300_smp"/>
<Part Sel="1" PartitionName="rootfs" FlashType="emmc" FileSystem="ext3/4" Start="10M" Length="60M" SelectFile="D:\harmony_tool\hispark_taurus_linux\rootfs_ext4.img"/>
<Part Sel="1" PartitionName="userfs" FlashType="emmc" FileSystem="ext3/4" Start="70M" Length="60M" SelectFile="D:\harmony_tool\hispark_taurus_linux\userfs_ext4.img"/>
<Part Sel="1" PartitionName="userdata" FlashType="emmc" FileSystem="ext3/4" Start="130M" Length="1512M" SelectFile="D:\harmony_tool\hispark_taurus_linux\userdata_ext4.img"/>
</Partition_Info>
setenv bootargs "mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),9M(kernel),60M(rootfs),60M(userfs),1512M(userdata)"
setenv bootcmd "mmc read 0x0 0x82000000 0x800 0x4800;mw 0x10FF0044 0X600;mw 0x120D2010 0x00000000;mw 0x120D2400 0x000000ff;mw 0x120D2010 0x00000000;bootm 0x82000000"
saveenv
reset

不使用虚拟机,hb的安装卸载

hb安装:python3 -m pip install --user build/lite

hb卸载:python3 -m pip uninstall ohos-build

hb安装某个特定版本:python3 -m pip uninstall ohos-build && python3 -m pip install --user ohos-build==0.4.6

参考:https://ost.51cto.com/posts/9876
OpenHarmony文档

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
myapp.rar 2.17K 346次下载
已于2023-10-9 17:43:15修改
9
收藏 8
回复
举报
2条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

赞,很全面的分享

2
回复
2022-3-11 14:40:16
民之码农
民之码农

666

回复
2022-3-14 08:01:08
回复
    相关推荐