You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.8 KiB

LiteOS

一、环境安装

1. 安装docker环境

[docker加载镜像下载]

链接: https://pan.baidu.com/s/1GVossI98riHL2xEzo7HmMQ?pwd=we75 提取码: we75

$ cd docker_package
$ sudo dpkg -i containerd.io_1.5.11-1_amd64.deb
$ sudo dpkg -i docker-ce-cli_20.10.14_3-0_ubuntu-focal_amd64.deb
$ sudo dpkg -i docker-ce_20.10.14_3-0_ubuntu-focal_amd64.deb

docker加载liteos-env镜像

$ cd docker_images
$ sudo docker load -i openharmony-v31.tar

2. 下载源代码

LiteOS v3.1

3. 将用户添加到docker用户组

$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ newgrp docker
$ ./run_docker.sh

4.编译liteos-a内核和应用

编译 hb set 使用上下方向键盘选择"qemu_small_system_demo" hb build编译

root@62deba27a240:/home/openharmony# hb set 
root@62deba27a240:/home/openharmony# hb build -f

运行

root@62deba27a240:/home/openharmony# ./qemu-run -f 

等待内核在qemu下加载完成回车进入OHOS shell 如果无法进入请检查out目录下是否存在smallmmc.img不存在请复制smallmmc.img到out目录下 并重新编译执行

root@62deba27a240:/home/openharmony# ./qemu-run -f
Redo making flash.img...

Start making flash.img...
1+0 records in
1+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 0.498911 s, 135 MB/s
2191+1 records in
2191+1 records out
1122100 bytes (1.1 MB, 1.1 MiB) copied, 0.0123126 s, 91.1 MB/s
0+1 records in
0+1 records out
89 bytes copied, 0.000333672 s, 267 kB/s
9818+1 records in
9818+1 records out
5027048 bytes (5.0 MB, 4.8 MiB) copied, 0.0291576 s, 172 MB/s
63+1 records in
63+1 records out
32492 bytes (32 kB, 32 KiB) copied, 0.000204982 s, 159 MB/s
Success making flash.img...

Enter to start qemu[y/n]:Waiting VNC connection on: 5920 ...(Ctrl-C exit)

******************Welcome******************

Processor   : Cortex-A7
Run Mode    : UP
GIC Rev     : GICv2
build time  : Nov 15 2022 11:40:20
Kernel      : Huawei LiteOS 2.0.0.37/debug

*******************************************

main core booting up...
cpu 0 entering scheduler
mem dev init ...
DevMmzRegister...
Date:Nov 15 2022.
Time:11:40:19.
net init ...
[ERR]virtio-mmio ID=1 device not found
[ERR]add virtio-mmio net device failed

************************************************************
DeviceManagerStart start ...
[CfiFlashInit]CFI flash init start ...
[CfiFlashInit]CFI flash init end ...
[CfiFlashInit]CFI flash init start ...
DeviceManagerStart end ...
OsMountRootfs start ...
OsMountRootfs end ...
virtual_serial_init start ...
virtual_serial_init end ...
system_console_init start ...
system_console_init end ...
OsUserInitProcess start ...
OsUserInitProcess end ...
[ERR]Failed to find block driver /dev/mmcblk0
[ERR]Failed to find block driver /dev/mmcblk1
hilog ringbuffer full, drop 19 line(s) log
hilog ringbuffer full, drop 7 line(s) log
hilog ringbuffer full, drop 2 line(s) log
Set log level : 3 
Default log level: 3 
[ERR]Unsupported API tcgetpgrp
01-01 00:00:00.081 2 4 D 02500/devmgr_service: DevmgrServiceUpdateStatus host:storage_host 2 device:HDF_PLATFORM_CFI_0 0 status:1
...............
01-01 00:00:26.001 7 29 I 01800/Samgr: Goto next boot step return code:-9
01-01 00:00:26.002 7 14 I 00000/(null): [appspawn] HOS_SystemInit is called!
01-01 00:00:26.003 7 14 I 00000/(null): [appspawn] main, entering wait.

回车之后进入OHOS shell

OHOS:/$ cd bin
OHOS:/bin$              

测试结束

Ctrl-A + x 退出Qemu模拟环境

二、命令行调试liteOS

1、安装gdb-multiarch工具包(docker 容器中安装)

$ apt install gdb-multiarch

2、修改debug.config文件

$ cd ./vendor/ohemu/qemu_small_system_demo/kernel_configs
$ vim debug.config

LOSCFG_CC_STACKPROTECTOR_ALL=y 修改为:

# LOSCFG_CC_STACKPROTECTOR_ALL is not set
LOSCFG_COMPILE_DEBUG=y

3、重新编译项目

保存并退出在OHOS根目录重新编译:

$ hb build -f

4、debug LiteOS

在一个窗口中输入命令:

$ ./qemu-run -g

在另一个窗口中输入命令:

$ docker exec -it ohos /bin/bash
$ gdb-multiarch out/arm_virt/qemu_small_system_demo/OHOS_Image
(gdb) target remote localhost:1234
(gdb) b main
Breakpoint 1 at 0x4005110c: file ../../../kernel/liteos_a/kernel/common/main.c, line 36.
(gdb) c
Continuing.

Breakpoint 1, main () at ../../../kernel/liteos_a/kernel/common/main.c:36
36	{
(gdb) l
31	
32	#include "los_config.h"
33	#include "los_sched_pri.h"
34	
35	LITE_OS_SEC_TEXT_INIT INT32 main(VOID)
36	{
37	    UINT32 ret = OsMain();
38	    if (ret != LOS_OK) {
39	        return (INT32)LOS_NOK;
40	    }
(gdb) q
  • gdb 调试常用代码

    1、 b (break) :设置断点

    2、 r (run): 运行程序

    3、 bt (backtrace): 显示程序栈

    4、 Print : 打印变量

    5、 c (continue): 继续运行程序,直到下一个断点停止

    6、 n (next) : 单步运行程序,不进入函数

    7、 l (list) : 查看当前代码显示当前后10行

    8、 edit (+function): 查看函数代码

    9、 S (step) : 进入函数执行代码

    10、 Q(Quit)退出gdb

    11、 Info b : 查看断点信息

三、VSCode调试liteOS

1、安装VScode

$ sudo apt install code

2、安装VScode 插件

![截图 2023-06-02 13-03-44](fig/截图 2023-06-02 13-03-44.png)

3、连接docker

选择CONTAINERS目录下openharmony:v3.1...右键选择附加VScode

![截图 2023-06-02 13-07-32](fig/截图 2023-06-02 13-07-32.png)

4、给docker安装VScode插件

  • 注意插件一定要安装在docker容器中

![截图 2023-06-02 13-14-19](fig/截图 2023-06-02 13-14-19.png)

5、配置launch.json文件

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "debug liteOS",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/out/arm_virt/qemu_small_system_demo/OHOS_Image",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "miDebuggerServerAddress": "localhost:1234",
            "miDebuggerPath": "/usr/bin/gdb-multiarch",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "pretty printing",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "logging": {
                 "engineLogging": true,
                 "programOutput": true,
            },
        }
    ]
}

6、新建终端

运行

./qemu-run -g

7、vscode debug

点击debug