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":[] }
]
}
- 修改驱动日志输出
修改文件: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环境:
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
再执行上面的命令。
- 烧录
烧录使用hitool
四个文件中 三个是编译生成的,一个是源代码目录中的二进制。
源代码目录中的二进制:device\hisilicon\hispark_taurus\sdk_liteos\uboot\out\boot\u-boot-hi3516dv300.bin
将二进制拷贝到同一的目录D:\harmony_tool\hispark_taurus
中:
添加的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 #
, 需要进行启动配置
- 启动配置
每一行是一条命令。
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文件大小必须相同。 |
启动配置参考:Hi3516DV300开发板->运行
- 执行启动配置最后一条命令
reset
后,进入系统。 即进入OHOS #
。
五、运行
执行:myapptest
此文档是在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
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
myapp.rar 2.17K 354次下载
已于2023-10-9 17:43:15修改
赞
9
收藏 8
回复
相关推荐
赞,很全面的分享
666