• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## 向内核传递参数<a name="sectiondebug"></a>
2---
3
4liteos_a提供了定制bootargs的机制,通过qemu-run可以向内核传递参数,格式为:-b arg0=val0,arg1=val1...。当不与-f参数同时使用时,可在现有flash镜像基础上,仅更新镜像中bootargs分区内容。
5
6传递到内核的参数名字和值均为字符串,具体使用方式请见fs/rootfs有关代码。
7
8## 用MMC映像传递文件<a name="sectionfatfs"></a>
9---
10
11MMC映像可用于在宿主机和虚拟机之间传递文件。注意:MMC映像同时用于一些系统文件,防止误删除。
12
131. 在宿主机上挂载
14
15```
16sudo modprobe nbd
17sudo qemu-nbd --connect=/dev/nbd0 out/smallmmc.img
18sudo mount /dev/nbd0p1 some_directory   # 1st partition, total 3 partitions
19```
20
212. 拷贝
22
23常用的cp、mkdir命令。
24
253. 卸载。
26
27```
28sudo umount /mnt
29sudo qemu-nbd -d /dev/nbd0
30sudo modprobe -r nbd
31```
32
33## 添加一个HelloWorld程序<a name="addhelloworld"></a>
34---
351. 创建helloworld目录
36```
37helloworld目录结构如下:
38applications/sample/helloworld
39applications/sample/helloworld/src
40```
41
422. 创建helloworld.c文件
43```
44applications/sample/helloworld/src下创建helloworld.c文件,并添加如下代码:
45```
46```
47#include <stdio.h>
48
49int main(int argc, char **argv)
50{
51    printf("\n************************************************\n");
52    printf("\n\t\tHello OHOS!\n");
53    printf("\n************************************************\n\n");
54
55    return 0;
56}
57```
58
593. 为helloworld创建BUILD.gn文件
60```
61applications/sample/helloworld下添加BUILD.gn文件,并添加如下代码:
62```
63```
64import("//build/lite/config/component/lite_component.gni")
65lite_component("hello-OHOS") {
66  features = [ ":helloworld" ]
67}
68executable("helloworld") {
69  output_name = "helloworld"
70  sources = [ "src/helloworld.c" ]
71  include_dirs = []
72  defines = []
73  cflags_c = []
74  ldflags = []
75}
76```
77
78**提示**:helloworld最后目录结构为
79```
80applications/sample/helloworld
81applications/sample/helloworld/BUILD.gn
82applications/sample/helloworld/src
83applications/sample/helloworld/src/helloworld.c
84```
85
864. 在build/lite/components中新建配置文件helloworld.json,并添加如下代码:
87```
88{
89  "components": [
90    {
91      "component": "hello_world_app",
92      "description": "Communication related samples.",
93      "optional": "true",
94      "dirs": [
95        "applications/sample/helloworld"
96      ],
97      "targets": [
98        "//applications/sample/helloworld:hello-OHOS"
99      ],
100      "rom": "",
101      "ram": "",
102      "output": [],
103      "adapted_kernel": [ "liteos_a" ],
104      "features": [],
105      "deps": {
106        "components": [],
107        "third_party": []
108      }
109    }
110  ]
111}
112```
113
114**注意**:helloworld.json中dirs和targets的属性值是不带src的
115
1165. 在vendor/ohemu/qemu_small_system_demo/config.json配置文件中找到subsystems属性,并下面追加helloworld的subsystem配置,配置参考如下:
117```
118    {
119      "subsystem": "helloworld",
120       "components": [
121        { "component": "hello_world_app", "features":[] }
122      ]
123    }
124```
125
126**注意**:修改JSON配置的时候一定要将多余的逗号去掉,否则编译时会报错
127
1286. 编译并构建qemu虚拟环境
129
130参考链接: [编译方法](README_zh.md)
131
132**注意**:helloworld 正常编译后会出现在 out/arm_virt/qemu_small_system_demo/bin中,如果没有,请返回检查相关配置文件中的路径和名称是否有误,并尝试重新编译直到出现helloworld
133
134```
135提示:编译完成后,代码根目录下会生成qemu-run脚本,直接运行该脚本默认以非root权限运行qemu环境(不含网络配置)。其他参数配置
136详见qemu-run --help
137```
138
139
1407. 运行helloworld
141
142helloworld在qemu虚拟机的bin目录下面,进入qemu虚拟机环境后,在bin目录下执行 ./helloworld,会出现如下信息,表示Hello World程序添加成功
143
144```
145OHOS # ./helloworld
146OHOS #
147************************************************
148
149                Hello OHOS!
150
151************************************************
152```
153
154## 运行简单图形demo程序<a name="simple_ui_demo"></a>
155---
156
157说明:这次操作指导主要是基于noVNC的方式进行vnc链接,用作屏幕显示。
158
1591. 在一个terminal中运行qemu程序
160
161```
162./qemu-run
163```
164
1652. 在另外一个terminal中运行noVNC程序代理VNC server,以便远端浏览器通过链接地址
166访问vnc server,需要知道本机的IP
167
168```
169wget https://github.com/novnc/noVNC/archive/refs/tags/v1.2.0.tar.gz
170tar -zxvf v1.2.0.tar.gz
171cd noVNC-1.2.0/
172./utils/launch.sh --vnc localhost:5920
173```
174
175后面会显示一个链接,用于vnc访问
176
177```
178Navigate to this URL:
179
180    http://ubuntu:6080/vnc.html?host=ubuntu&port=6080
181```
182
183其中ubuntu表示域名,需要替换为对应的本机IP,例如本机IP是192.168.66.106,那么访
184问的链接地址为
185
186```
187http://192.168.66.106:6080/vnc.html?host=192.168.66.106&port=6080
188```
189
1903. 在第一个terminal中运行`simple_ui_demo`程序
191
192```
193./bin/simple_ui_demo
194```
195
196console每秒输出为图形的帧率
197
198```
19901-01 00:00:46.990 10 44 D 00000/UiDemo: 53 fps
200```
201
2024. 在浏览器中看到的vnc输出即为`960*480`的屏幕显示输出,并且能够用鼠标按钮点击。
203
2045. 退出
205
206在terminal中输入`Ctrl + c`
207
208## 观察dsoftbus组网发现<a name="dsoftbus_discover"></a>
209---
210
211### 运行一台虚拟机
212
2131. 启动结束后,观察日志显示dsoftbus试图发现设备。
214```
215./qemu-run -n
216```
217
218### 运行另一台虚拟机
219
2202. 为这个虚拟机单独拷贝一份虚拟机映像。
221```
222cp flash.img flash2.img
223cp out/smallmmc.img out/smallmmc1.img
224```
225
2263. 从//vendor/ohemu/qemu_small_system_demo/qemu_run.sh中拷贝出qemu命令:
227```
228sudo `which qemu-system-arm` -M virt, ...
229```
230
231修改映像文件名、MMC映像文件名、MAC地址,删除替换脚本变量;为便于观察可增加-nographic参数。
232
2334. 如果ip地址恰好与第1台虚拟机相同,修改ip地址。在OHOS提示符下:
234```
235ifconfig wlan0 inet 10.0.2.XX
236```
237
2385. 观察:启动快结束时,两台虚拟机的日志显示,相互发现了对方,并试图组网。
239
240## Hack图形桌面<a name="desktop"></a>
241---
242
243[applications_sample_camera](https://gitee.com/openharmony/applications_sample_camera)仓库提供了一个小型桌面应用示例。虽然qemu虚拟机没有摄录放驱动,但可以利用hisilicon的SDK,来Hack一个图形桌面。
244
2451. 让//device/soc/hisilicon仓库:支持我们的板子
246
247修改文件`common/hal/{media/BUILD.gn,middleware/BUILD.gn}`,找到`if (board_name == "hispark_taurus" || board_name == "aegis_hi3516dv300")`,加上`board_name == "arm_virt"`。
248
2492. 让//foundation/multimedia/media_utils_lite/仓库:到hisilicon那儿找库
250
251修改文件`BUILD.gn`,找到
252```
253      "$ohos_board_adapter_dir/media:hardware_media_sdk",
254      "$ohos_board_adapter_dir/middleware:middleware_source_sdk",
255```
256改成
257```
258      "//device/soc/hisilicon/common/hal/media:hardware_media_sdk",
259      "//device/soc/hisilicon/common/hal/middleware:middleware_source_sdk",
260```
261
2623. //device/qemu仓库:增加一个拷贝hi3516dv300的mpp库动作
263
264修改文件`arm_virt/liteos_a/BUILD.gn`,增加一个`"mpp:copy_mpp_libs"`依赖,同时在该目录下增加一个指向`../../../soc/hisilicon/hi3516dv300/sdk_liteos/mpp/`的符号链接`mpp`。
265
266**重要**:这部分库使用了git-lfs形式存储,因此要恢复其正常内容:
267```
268cd device/soc/hisilicon/hi3516dv300/sdk_liteos/mpp/lib/
269git lfs checkout *.so
270```
271
2724. //vendor/ohemu仓库:增加桌面应用组件
273
274修改文件`qemu_small_system_demo/config.json`,把`"aafwk_lite"`组件的特性值改为`true`,增加如下新组件
275```
276      {
277        "subsystem": "applications",
278        "components": [
279          { "component": "camera_sample_app", "features":[] },
280          { "component": "camera_screensaver_app", "features":[] }
281        ]
282      },
283      {
284        "subsystem": "powermgr",
285        "components": [
286          { "component": "powermgr_lite", "features":[ "enable_screensaver = true" ] }
287        ]
288      },
289```
290