1# QEMU(ESP32 教程) 2 3## 1.简介 4 5QEMU可以模拟内核运行在不同的单板,解除对物理开发板的依赖。esp32子目录包含部分Qemu esp32虚拟化平台验证的OpenHarmony kernel\_liteos\_m的代码,它可以用来模拟单核esp32单板。 6 7## 2.环境搭建 8 9 1. esp-idf安装 10 11 使用安装指导请参考:(https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.1/get-started/index.html) 12 13 注:esp-idf安装可以跳过,当前已将生成好的bootloader.bin和partition-table.bin放入vendor\ohemu\qemu_xtensa_mini_system_demo\image文件夹中。 14 15 注:若跳过安装esp-idf可以按照下列方式安装工具链: 16 17 提示:用户也可以直接使用下列指令来使用默认环境中配置好的编译器,跳过该步骤。 18 19 若要使用默认环境请先执行 '3.获取源码' ,然后在根目录下执行下列指令安装默认编译器。 20 21 ```shell 22 sh build/prebuilts_download.sh 23 ``` 24 25 可选的编译器安装流程: 26 27 a) 下载官方release的SDK包:https://www.espressif.com/zh-hans/support/download/sdks-demos?keys=&field_type_tid%5B%5D=13 28 29 b) 将下载好的SDK包放入linux系统,进入目录执行如下指令: 30 31 ```shell 32 unzip esp-idf-v4.3.1.zip 33 cd esp-idf-v4.3.1/ 34 ./install.sh 35 . ./export.sh 36 ``` 37 38 c) 删除默认的编译器路径: 39 40 修改esp32\liteos_m\config.gni: 41 42 ```c 43 board_toolchain_path = "$ohos_root_path/prebuilts/gcc/linux-x86/esp/esp-2019r2-8.2.0/xtensa-esp32-elf/bin/" 44 ``` 45 46 改为 47 48 ```c 49 board_toolchain_path = "" 50 ``` 51 52 注:本教程使用的工具链版本为gcc version 8.2.0 (crosstool-NG esp-2019r2)或gcc version 8.4.0 (crosstool-NG esp-2021r1) 53 54 2. esptool安装 55 56 a) 步骤1中export.sh脚本会设置esptool工具路径,需要确保esptool工具版本为3.1及以上。 57 ```shell 58 esptool.py version 59 ``` 60 b) 如果esp-idf自带esptool工具版本过低,需删除当前esptool路径对应的环境变量,并执行以下命令。(python版本建议为3.8及以上) 61 ```shell 62 python -m pip install esptool 63 ``` 64 65 3. qemu-system-xtensa编译 66 67 a) 编译安装 68 69 ```shell 70 git clone https://github.com/espressif/qemu.git 71 cd qemu 72 ./configure --target-list=xtensa-softmmu \ 73 --enable-gcrypt \ 74 --enable-debug --enable-sanitizers \ 75 --disable-strip --disable-user \ 76 --disable-capstone --disable-vnc \ 77 --disable-sdl --disable-gtk 78 ``` 79 80 b) 等待编译结束,执行安装命令(如果编译失败请参考https://github.com/espressif/qemu/issues/21): 81 82 ```shell 83 ninja -C build 84 ``` 85 86 c) 将qemu添加到环境变量中(user_qemu_xxx_path修改为自己的安装路径): 87 88 ```shell 89 vim ~/.bashrc 90 export QEMU=user_qemu_xxx_path/qemu/build 91 source ~/.bashrc 92 ``` 93 94 d) 安装依赖 95 96 ```shell 97 ldd $QEMU/qemu-system-xtensa 98 ``` 99 100 根据ldd执行结果,安装缺少的依赖库 101 102 (注:更多安装指导,请参考链接:[Home · espressif/qemu Wiki · GitHub](https://github.com/espressif/qemu/wiki#configure)) 103 104## 3.获取源码 105 106[代码获取](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/sourcecode-acquire.md) 107 108提示: 可以使用 `repo` 命令来获取源码。 109 110## 4.源码构建 111 112 1. 执行hb set命令并选择项目`qemu_xtensa_mini_system_demo`。 113 114 2. 执行hb clean && hb build命令构建产生 `OHOS_Image` 的可执行文件。 115 116 ```shell 117 hb set 118 hb clean && hb build 119 ``` 120 121 3. 在构建完成之后,对应的可执行文件在主目录下: 122 123 ``` 124 out/esp32/qemu_xtensa_mini_system_demo/ 125 ``` 126 127## 5.在Qemu中运行镜像 128 129 1. 运行qemu(不配合GDB) 130 131 ```shell 132 ./qemu-run 133 ``` 134 135 2. 启动qemu(配合GDB) 136 137 a) 启动GDB服务器,等待连接 138 139 ```shell 140 ./qemu-run -g 141 ``` 142 143 b) 新建终端并使用GDB连接qemu 144 145 ```shell 146 xtensa-esp32-elf-gdb out/esp32/qemu_xtensa_mini_system_demo/OHOS_Image -ex "target remote :1234" 147 ``` 148 149 注:由于默认安装的qemu自带qemu-system-xtensa工具与当前安装的qemu-system-xtensa工具重名,因此采用绝对路径执行当前的qemu-system-xtensa工具。 150 注:qemu退出方式为:按下ctrl加a键,然后松开再按下x键。 151 152(注:更多操作指导,请参考:[Home · espressif/qemu Wiki · GitHub](https://github.com/espressif/qemu/wiki#configure)) 153