1d6aed566Sopenharmony_ci# Qemu Arm Cortex-m4 mps2-an386 教程 2d6aed566Sopenharmony_ci 3d6aed566Sopenharmony_ci## 1. 简介 4d6aed566Sopenharmony_ci`arm_mps2_an386/` 子目录包含部分Qemu arn cortex-m4虚拟化平台验证的OpenHarmony kernel\_liteos\_m的代码,目录名为*arm_mps2_an386*。 5d6aed566Sopenharmony_ciArm Cortex-m4 虚拟化平台是一个 `qemu-system-arm` 的目标设备,通过它来模拟一个通用的、基于arm cortex-m4架构的单板。 6d6aed566Sopenharmony_ci 7d6aed566Sopenharmony_ci这次模拟的配置是:arm cortex-m4架构,1个CPU,16M内存。 8d6aed566Sopenharmony_ci 9d6aed566Sopenharmony_ci提示: 系统内存硬编码为16MB。 10d6aed566Sopenharmony_ci 11d6aed566Sopenharmony_ci## 2. 环境搭建 12d6aed566Sopenharmony_ci 13d6aed566Sopenharmony_ci[环境搭建](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/Readme-CN.md) 14d6aed566Sopenharmony_ci 15d6aed566Sopenharmony_ci编译器安装 16d6aed566Sopenharmony_ci 17d6aed566Sopenharmony_ci1.命令安装 18d6aed566Sopenharmony_ci 19d6aed566Sopenharmony_ci提示:命令安装的工具链无 arm-none-eabi-gdb,无法进行gdb调试 20d6aed566Sopenharmony_ci 21d6aed566Sopenharmony_ci``` 22d6aed566Sopenharmony_cisudo apt install gcc-arm-none-eabi 23d6aed566Sopenharmony_ci``` 24d6aed566Sopenharmony_ci 25d6aed566Sopenharmony_ci2.安装包安装 26d6aed566Sopenharmony_ci 27d6aed566Sopenharmony_ci提示:如果已经通过命令安装了gcc-arm-none-eabi, 可以通过命令:`sudo apt remove gcc-arm-none-eabi` 卸载之后,再进行安装。 28d6aed566Sopenharmony_ci 29d6aed566Sopenharmony_ci下载工具链[安装包](https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2)。 30d6aed566Sopenharmony_ci 31d6aed566Sopenharmony_ci``` 32d6aed566Sopenharmony_cichmod 777 gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 33d6aed566Sopenharmony_citar -xvf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 install_path 34d6aed566Sopenharmony_ci``` 35d6aed566Sopenharmony_ci 36d6aed566Sopenharmony_ci将安装路径添加到环境变量中: 37d6aed566Sopenharmony_ci 38d6aed566Sopenharmony_ci``` 39d6aed566Sopenharmony_civim ~/.bashrc 40d6aed566Sopenharmony_ci``` 41d6aed566Sopenharmony_ci 42d6aed566Sopenharmony_ci在~/.bashrc最末尾加入: 43d6aed566Sopenharmony_ci 44d6aed566Sopenharmony_ci``` 45d6aed566Sopenharmony_ciexport PATH=$PATH:install_path/gcc-arm-none-eabi-6-2017-q2-update/bin 46d6aed566Sopenharmony_ci``` 47d6aed566Sopenharmony_ci 48d6aed566Sopenharmony_ci## 3. 获取源码 49d6aed566Sopenharmony_ci 50d6aed566Sopenharmony_ci[代码获取](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/device-dev/get-code/sourcecode-acquire.md) 51d6aed566Sopenharmony_ci 52d6aed566Sopenharmony_ci提示: 可以使用 `repo` 命令来获取源码。 53d6aed566Sopenharmony_ci 54d6aed566Sopenharmony_ci## 4. 源码构建 55d6aed566Sopenharmony_ci 56d6aed566Sopenharmony_ci在已经获取的源码根目录,请输入: 57d6aed566Sopenharmony_ci 58d6aed566Sopenharmony_ci``` 59d6aed566Sopenharmony_cihb set 60d6aed566Sopenharmony_ci``` 61d6aed566Sopenharmony_ci 62d6aed566Sopenharmony_ci选择ohemu下的`qemu_mini_system_demo`选项。 63d6aed566Sopenharmony_ci 64d6aed566Sopenharmony_ci 65d6aed566Sopenharmony_ci然后执行构建命令如下: 66d6aed566Sopenharmony_ci``` 67d6aed566Sopenharmony_cihb build -f 68d6aed566Sopenharmony_ci``` 69d6aed566Sopenharmony_ci 70d6aed566Sopenharmony_ci这个命令构建会产生 `OHOS_Image` 的镜像文件。 71d6aed566Sopenharmony_ci 72d6aed566Sopenharmony_ci在构建完成之后,对应的镜像文件在如下目录: 73d6aed566Sopenharmony_ci``` 74d6aed566Sopenharmony_ciout/arm_mps2_an386/qemu_mini_system_demo/ 75d6aed566Sopenharmony_ci``` 76d6aed566Sopenharmony_ci## 5. 在Qemu中运行镜像 77d6aed566Sopenharmony_ci 78d6aed566Sopenharmony_cia) 如果没有安装 `qemu-system-arm` ,安装请参考链接:[Qemu安装指导](https://gitee.com/openharmony/device_qemu/blob/HEAD/README_zh.md) 79d6aed566Sopenharmony_ci 80d6aed566Sopenharmony_cib) 运行 81d6aed566Sopenharmony_ci 82d6aed566Sopenharmony_ci执行`./qemu-run --help`提示如下: 83d6aed566Sopenharmony_ci 84d6aed566Sopenharmony_ci``` 85d6aed566Sopenharmony_ciUsage: qemu-run [OPTION]... 86d6aed566Sopenharmony_ciRun a OHOS image in qemu according to the options. 87d6aed566Sopenharmony_ci 88d6aed566Sopenharmony_ci Options: 89d6aed566Sopenharmony_ci 90d6aed566Sopenharmony_ci -e, --exec file_name kernel exec file name 91d6aed566Sopenharmony_ci -n, --net-enable enable net 92d6aed566Sopenharmony_ci -g, --gdb enable gdb for kernel 93d6aed566Sopenharmony_ci -t, --test test mode, exclusive with -g 94d6aed566Sopenharmony_ci -h, --help print help info 95d6aed566Sopenharmony_ci 96d6aed566Sopenharmony_ci By default, the kernel exec file is: out/arm_mps2_an386/qemu_mini_system_demo/OHOS_Image. 97d6aed566Sopenharmony_ci``` 98d6aed566Sopenharmony_ci 99d6aed566Sopenharmony_ci## 6. gdb调试 100d6aed566Sopenharmony_ci 101d6aed566Sopenharmony_ci``` 102d6aed566Sopenharmony_cicd device/qemu/arm_mps2_an386 103d6aed566Sopenharmony_civim liteos_m/config.gni 104d6aed566Sopenharmony_ci``` 105d6aed566Sopenharmony_ci 106d6aed566Sopenharmony_ci将 `board_opt_flags` 中的 107d6aed566Sopenharmony_ci 108d6aed566Sopenharmony_ci``` 109d6aed566Sopenharmony_ciboard_opt_flags = [] 110d6aed566Sopenharmony_ci``` 111d6aed566Sopenharmony_ci 112d6aed566Sopenharmony_ci编译选项修改为: 113d6aed566Sopenharmony_ci 114d6aed566Sopenharmony_ci``` 115d6aed566Sopenharmony_ciboard_opt_flags = [ "-g" ] 116d6aed566Sopenharmony_ci``` 117d6aed566Sopenharmony_ci 118d6aed566Sopenharmony_ci保存并退出,在OHOS根目录重新编译: 119d6aed566Sopenharmony_ci 120d6aed566Sopenharmony_ci``` 121d6aed566Sopenharmony_cihb build -f 122d6aed566Sopenharmony_ci``` 123d6aed566Sopenharmony_ci 124d6aed566Sopenharmony_ci在一个窗口中输入命令: 125d6aed566Sopenharmony_ci 126d6aed566Sopenharmony_ci``` 127d6aed566Sopenharmony_ci./qemu-run -g 128d6aed566Sopenharmony_ci``` 129d6aed566Sopenharmony_ci 130d6aed566Sopenharmony_ci在另一个窗口中输入命令: 131d6aed566Sopenharmony_ci 132d6aed566Sopenharmony_ci``` 133d6aed566Sopenharmony_ciarm-none-eabi-gdb out/arm_mps2_an386/qemu_mini_system_demo/OHOS_Image 134d6aed566Sopenharmony_ci(gdb) target remote localhost:1234 135d6aed566Sopenharmony_ci(gdb) b main 136d6aed566Sopenharmony_ci``` 137d6aed566Sopenharmony_ci 138d6aed566Sopenharmony_ci更多gdb相关的调试可以查阅:[gdb指导手册](https://sourceware.org/gdb/current/onlinedocs/gdb)。 139