• Home
Name Date Size #Lines LOC

..--

apps/led_rgb/12-May-2024-186151

config/12-May-2024-9692

drv/12-May-2024-244168

LICENSED12-May-202411.1 KiB202169

README.mdD12-May-20247.2 KiB189117

README.md

1# 示例程序:led_rgb
2
3 * Author: liangkz @ https://ost.51cto.com/column/46
4 * Date  : 2022.04.01
5
6## 1. 概述
7
8- 当前已适配:**润和AI_Camera_Hi3516DV300开发板 、 润和DAYU200开发板**
9
10- 软件分支:**OpenHarmony  Master(最新2022-07-01) or v3.1 Release(2022-03-30)**
11
12- 部署路径: **vendor/hihope/rk3568/demo/led_rgb/**
13
14- 注意:本示例程序以适配Master分支最新代码为例进行部署说明,对于LTS 3.0分支、3.1 Release分支或其他分支代码,请开发者自行修改一下代码、代码路径、编译脚本的相关配置即可。
15
16本示例程序用于展示OpenHarmony设备驱动开发的相关要点,通过控制GPIO接口,点亮:
17
18- Hi3516DV300开发板上的红色指示灯(R)、绿色指示灯(G)、红外补光灯(代码中标记为B),在小型系统(适配LiteOS_A内核和Linux内核)、标准系统上都适用;
19- DAYU200开发板上的RGB三色灯。
20- 适配其他开发板,请自行添加 led_rgb/config/led/led_config_xxx.hcs配置文件,配置对应的LED灯的GPIO管脚编号。
21
22## 2. 目录结构
23
24```
25./led_rgb/
26├── apps
27│   └── led_rgb
28│       ├── BUILD.gn
29│       └── led_rgb.c
30├── config
31│   ├── device_info
32│   │   └── device_info.hcs
33│   └── led
34│       ├── led_config_hi3516.hcs
35│       └── led_config_rk3568.hcs
36├── drv
37│   ├── build_linux
38│   │   └── Makefile
39│   ├── build_liteos
40│   │   ├── BUILD.gn
41│   │   └── Makefile
42│   └── led_drv.c
43└── README.md
44```
45
46## 3. 编译配置
47
48### 3.1. apps/
49
50烧录新编译的系统镜像到开发板上,在开发板的shell上执行:
51
52```
53./bin/led_rgb [args]
54```
55
56args = args&0x07,按位与取参数的低3位,分别对应B-G-R三色灯;对应位为1,点亮对应颜色的灯,对应位为0,熄灭对应颜色的灯。
57
58不带 args 参数:默认依次执行7~0共计8组参数的灯控操作。
59
60#### 3.1.1 小型系统(LiteOS_A内核和Linux内核)
61
62在编译应用程序时,两个内核的小型系统的编译配置是一样的。
63
64在最新Master分支代码中,已经没有//build/lite/components/applications.json 文件了,可以去修改 //applications/sample/camera/bundle.json文件,在"sub_component"下添加编译目标即可:
65
66```
67"//vendor/hihope/rk3568/demo/led_rgb/apps/led_rgb:led_rgb",
68```
69
70
71
72如果是LTS或Release分支的代码,则可以打开 //build/lite/components/applications.json 文件,找到camera_sample_app组件的信息,
73
74在它的"dirs"和"targets"下,分别添加下面两句语句即可:
75
76          "dirs": [
77              "vendor/hihope/rk3568/demo/led_rgb/apps/led_rgb",
78              ......
79          ],
80          "targets": [
81              "//vendor/hihope/rk3568/demo/led_rgb/apps/led_rgb:led_rgb",
82              ......
83          ],
84          "adapted_kernel": [ "liteos_a", "linux" ],
85
86#### 3.1.2 标准系统(Linux内核)
87
88在标准系统上配置应用的编译,与3.1.1的做法类似。
89
90打开 //applications/standard/hap/ohos.build 文件,在其module_list上增加下面一句语句即可:
91
92```
93"//vendor/hihope/rk3568/demo/led_rgb/apps/led_rgb:led_rgb",
94```
95
96
97
98### 3.2. config/
99
100这是led设备的hcs配置文件,按如下四部分进行配置,可分别将led设备的hcs配置文件加入到对应系统的设备配置树中,一起编译进内核并被使用。
101
102#### 	3.2.1 小型系统(Hi3516开发板+LiteOS_A内核)
103
104在//vendor/hisilicon/hispark_taurus/hdf_config/hdf.hcs文件的 include 部分增加两行代码即可:
105
106    #include "../../../../vendor/hihope/rk3568/demo/led_rgb/config/led/led_config_hi3516.hcs"
107    #include "../../../../vendor/hihope/rk3568/demo/led_rgb/config/device_info/device_info.hcs"
108
109#### 	3.2.2 小型系统(Hi3516开发板+Linux内核)
110
111在//vendor/hisilicon/hispark_taurus_linux/hdf_config/hdf.hcs文件的 include 部分增加两行代码即可:
112
113    #include "../../../../vendor/hihope/rk3568/demo/led_rgb/config/led/led_config_hi3516.hcs"
114    #include "../../../../vendor/hihope/rk3568/demo/led_rgb/config/device_info/device_info.hcs"
115
116注意:修改了hdf.hcs文件,建议删除//vendor/hisilicon/hispark_taurus_linux/hdf_config/hdf_test/hdf_hcs.hcb文件后再重新编译,确保上述led的配置信息能编译进内核。
117
118#### 	3.2.3 标准系统(Hi3516开发板+Linux内核)
119
120在//vendor/hisilicon/Hi3516DV300/hdf_config/khdf/hdf.hcs文件的 include 部分增加两行代码即可:
121
122    #include "../../../../../vendor/hihope/rk3568/demo/led_rgb/config/led/led_config_hi3516.hcs"
123    #include "../../../../../vendor/hihope/rk3568/demo/led_rgb/config/device_info/device_info.hcs"
124
125注意:修改了hdf.hcs文件,建议删除下列文件:
126
127- //vendor/hisilicon/Hi3516DV300/hdf_config/khdf/hdf_test/hdf_hcs.hcb
128- //out/KERNEL_OBJ/kernel/vendor/hisilicon/hispark_taurus_standard/hdf_config/khdf/hdf_test/hdf_hcs_hex.o
129- //out/KERNEL_OBJ/kernel/OBJ/linux-5.10/arch/arm/boot/Image、uImage、zImage、zImage-dtb
130- //out/hispark_taurus/packages/phone/images/uImage、zImage-dtb
131
132再重新编译,确保上述led的配置信息能编译进内核。
133
134#### 	3.2.4 标准系统(RK3568开发板+Linux内核)
135
136​        在//vendor/hihope/rk3568/hdf_config/khdf/hdf.hcs文件的 include 部分增加两行代码即可:
137
138    #include "../../../../../vendor/hihope/rk3568/demo/led_rgb/config/led/led_config_rk3568.hcs"
139    #include "../../../../../vendor/hihope/rk3568/demo/led_rgb/config/device_info/device_info.hcs"
140
141注意:修改了hdf.hcs文件,建议删除下列文件:
142
143- //vendor/hihope/rk3568/hdf_config/khdf/hdf_test/hdf_hcs.hcb
144- //out/kernel/vendor/hihope/rk3568/hdf_config/khdf/hdf_test/hdf_hcs_hex.o
145- //out//kernel/OBJ/linux-5.10/arch/arm64/boot/ImageImage.lz4
146- //out/rk3568/packages/phone/images/boot_linux.img
147
148再重新编译,确保上述led的配置信息能编译进内核。
149
150
151
152### 3.3. drv/
153
154这里存放着驱动程序的实现代码,以及编译配置脚本。
155
156驱动开发工程师根据项目的实际情况来修改这里的实现和编译配置。
157
158#### 	3.3.1 drv/src/
159
160这是驱动程序的实现代码存放路径,与内核无关。
161
162#### 	3.3.2 drv/build_liteos_a/
163
164这是驱动程序适配LiteOS_A内核的小型系统的编译配置文件。
165
166**BUILD.gn**:将编译出来的驱动入口“g_ledDriverEntryHdfEntry”链接到OHOS_Image.bin中,有模板的。
167
168这个是BUILD.gn脚本所在路径。BUILD.gn中module_switch用不到就要注释掉,否则会导致驱动入口 “g_ledDriverEntryHdfEntry”无法链接到OHOS_Image.bin中。
169
170在//device/soc/hisilicon/common/platform/BUILD.gn文件的deps关系中,添加如下一句语句:
171
172```
173"//vendor/hihope/rk3568/demo/led_rgb/drv/build_liteos"
174```
175
176#### 	3.3.3 drv/build_linux/
177
178这是驱动程序适配Linux内核的小型系统和标准系统的编译配置文件。
179
180**Makefile**:编译drv/src/目录下源代码的脚本,有模板的。
181
182在//drivers/hdf_core/adapter/khdf/linux/Makefile文件的末尾,添加如下一句语句即可:
183
184```
185obj-$(CONFIG_DRIVERS_HDF) += ../../../../../vendor/hihope/rk3568/demo/led_rgb/drv/build_linux/
186```
187
188把这个Makefile纳入khdf/linux的编译体系中。
189