
测试适配的HDF驱动 原创
适配L2芯片后,一般需要验证hdf模块是否正常工作,下面介绍GPIO、ADC、PWM测试流程。注:硬件不同,但可参考流程。
1 GPIO
测试接口GPIO202,对应开发板的LED(D14)。
1.2 sysfs操作,测试GPIO
-
首先,查看可导出的gpio
-
导出gpio188,用于操作
-
查看GPIO状态
-
GPIO导出后默认为输入in,改为输出
-
获取GPIO电平状态
-
GPIO输出控制
1.3 HDI操作GPIO
可以基于open、write操作gpio,也可以基于HDI硬HDI件驱动接口操作GPIO,具体代码见applications/sample/taget_board/app/gpio/src/hdf_gpio_test.c
参考1:GPIO 平台驱动开发(openharmony.cn)
参考2:GPIO平台驱动使用 (openharmony.cn)
1.4 编写测试用例BUILD.gn
- 编写测试用例的编译规则和依赖,applications/sample/taget_board/app/gpio/BUILD.gn
-
修改applications/sample/taget_board/app/BUILD.gn,加入编译
其中 app是applications的组件targets名(component),features中gpio是目录,gpio_led是编译的目标/可执行程序
1.5 添加应用程序组件
OpenHarmony编译框架中编译用户程序和内核一样,需要配置成组件才能加入编译。
- ①修改文件build/lite/components/communication.json
添加组件目标板如taget_board的配置(放在最前面),如下所示为communication.json文件片段,"##start##“和”##end##“之间为新增配置(”##start##“和”##end##"仅用来标识位置,添加完配置后删除这两行):
-
②修改vendor/xx/xx/config.json文件
如下所示代码片段为applications子系统配置,新增taget_board组件的条目,让编写的应用程序加入编译。
1.6 编译gpio程序
只编译应用程序可以使用build.sh脚本编译,操作如下:
在工程根目录out/fx6evb/fx6evb/bin下可以看到应用程序的可执行文件,hb build -f全量编译时可执行文件会打包到文件镜像中/bin/下,更新文件系统即可更新对应程序;当然单独编译应用程序时,也可以单独拷贝编译出的可执行程序到开发板中执行。
1.7 运行应用程序
拷贝可执行文件到系统中,在启动界面,进入bin目录
进入bin目录后可以看到gpio_led文件,通过以下命令运行程序。
界面打印“GPIO_202 亮 灭log”,Led在闪烁,程序运行成功。
2 ADC
参考2:OpenHarmony:全流程讲解如何编写ADC平台驱动以及应用程序
2.2 直接使用指令查看
可以输出数值,taget_board的ADC0 一共10个通道,说明Linux内核驱动都正常
2.2 HDF框架下使用ADC
参考1:ADC平台驱动开发 (openharmony.cn)
参考2:ADC平台驱动使用 (openharmony.cn)
第一步,ADC适配层驱动程序
- 实例化HdfDriverEntry结构体成员
- 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。
第二步,配置ADC hcs文件
- 在device_info.hcs文件中添加deviceNode描述。
- 添加adc_config.hcs器件属性文件。
device_info.hcs中的配置:
adc_config.hcs中的配置
第三步,实例化核心层接口函数
- 初始化AdcDevice成员。
- 实例化AdcDevice成员AdcMethod
第四步,编译ADC HDF到内核
- vendor下的hdf.hcs中 #include “device/adc/adc_config_linux.hcs”
- 打开内核宏配置, //kernel/linux/config/下的配置文件,CONFIG_DRIVERS_HDF_PLATFORM_ADC=y
- 编译到内核,烧录内核镜像
第五步,编写ADC应用程序
applications/sample/taget_board/app/adc/src/hdf_adc_test.c
编译配置,applications/sample/taget_board/app/adc/BUILD.gn,参考gpio,只需修改如下内容
编译后,gpio33_adc可执行文件在bin目录下,烧录文件系统到开发板,
第六步,ADC读取端口数值
3 PWM
3.1 预测试:
sysfs操作,测试内核是否正确加载pwm:
3.2 HDF测试:
参考1:PWM驱动开发指导 (openharmony.cn)
参考2:PWM平台驱动使用 (openharmony.cn)
PWM默认关闭的,修改设备树文件,打开全部通道,便于测试:
注意有冲突:
- 第二步,编写hcs,适配层、核心层驱动已经编写。
- 第三步,调用HDF用户层接口,编写测试案例
- 第四步,烧录内核镜像、设备树、文件系统
- 第五步,运行调试
-
思考:每个PWM设备都有不同的通道,那么在使用 handle = PwmOpen(num);时,num与pwm设备、通道号之间的关系是什么?
pwm0:2channel 、 pwm1-3: 6 channel
实测:PwmOpen(0) 为PWM0_0 PwmOpen(1)为PWM0_1,PwmOpen(2) 不是 PWM1_0,怎么使用 PWM(1-3)_(0-5) 呢?
