1d6aed566Sopenharmony_ci### Qemu Arm Cortex-m55 mps3-an547 HOWTO 2d6aed566Sopenharmony_ci 3d6aed566Sopenharmony_ci#### 1. Brief introduction 4d6aed566Sopenharmony_ci`arm_mps3_an547/` subdirectory contains part of the OpenHarmony LiteOS demonstration support for Qemu Arm Cortex-m55 mps3-an547 Platform, here called *arm_mps3_an547*. 5d6aed566Sopenharmony_cicortex-m55 Virtual platform is a `qemu-system-arm` machine target that provides emulation 6d6aed566Sopenharmony_cifor a generic, arm-based board. 7d6aed566Sopenharmony_ci 8d6aed566Sopenharmony_ciIntroduced functionality adds support for Cortex-m55 (1 CPU with security extensions), 16MB memory virtual platform. 9d6aed566Sopenharmony_ci 10d6aed566Sopenharmony_ciNote: System memory size is hard-coded to 16MB. 11d6aed566Sopenharmony_ci 12d6aed566Sopenharmony_ci#### 2. Setting up environment 13d6aed566Sopenharmony_ci 14d6aed566Sopenharmony_ci[Setting up a development environment](https://gitee.com/openharmony/docs/blob/master/en/device-dev/quick-start/Readme-EN.md) 15d6aed566Sopenharmony_ci 16d6aed566Sopenharmony_ciCompiler install 17d6aed566Sopenharmony_ci 18d6aed566Sopenharmony_ci1.Command to install 19d6aed566Sopenharmony_ci 20d6aed566Sopenharmony_ciNote: Command to install toolchain without arm-none-eabi-gdb, gdb cannot be debugged. 21d6aed566Sopenharmony_ci 22d6aed566Sopenharmony_ci``` 23d6aed566Sopenharmony_cisudo apt install gcc-arm-none-eabi 24d6aed566Sopenharmony_ci``` 25d6aed566Sopenharmony_ci 26d6aed566Sopenharmony_ci2.The installation package to install 27d6aed566Sopenharmony_ci 28d6aed566Sopenharmony_ciNote: The MVE feature of cortex-m55 processor can only be supported by installing the cross tool chain launched after 2020. If you have already passed the command to install gcc-arm-none-eabi, can through the command: `sudo apt remove 29d6aed566Sopenharmony_cigcc-arm-none-eabi` after unloading, install again. 30d6aed566Sopenharmony_ci 31d6aed566Sopenharmony_ciDownload toolchain: [package](https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2)。 32d6aed566Sopenharmony_ci 33d6aed566Sopenharmony_ci``` 34d6aed566Sopenharmony_cichmod 777 gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 35d6aed566Sopenharmony_citar -xvf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 install_path 36d6aed566Sopenharmony_ci``` 37d6aed566Sopenharmony_ci 38d6aed566Sopenharmony_ciAdd the installation path to the environment variable: 39d6aed566Sopenharmony_ci 40d6aed566Sopenharmony_ci``` 41d6aed566Sopenharmony_civim ~/.bashrc 42d6aed566Sopenharmony_ci``` 43d6aed566Sopenharmony_ci 44d6aed566Sopenharmony_ciAdd the following command line to the last line of ~/.bashrc: 45d6aed566Sopenharmony_ci 46d6aed566Sopenharmony_ci``` 47d6aed566Sopenharmony_ciexport PATH=$PATH:install_path/gcc-arm-none-eabi-10.3-2021.10/bin 48d6aed566Sopenharmony_ci``` 49d6aed566Sopenharmony_ci 50d6aed566Sopenharmony_ci#### 3. Code acquisition 51d6aed566Sopenharmony_ci 52d6aed566Sopenharmony_ci[Code acquisition](https://gitee.com/openharmony/docs/blob/HEAD/en/device-dev/get-code/sourcecode-acquire.md) 53d6aed566Sopenharmony_ci 54d6aed566Sopenharmony_ciNote: One can use `repo` to fetch code in a straightforward manner. 55d6aed566Sopenharmony_ci 56d6aed566Sopenharmony_ci#### 4. Building from sources 57d6aed566Sopenharmony_ci 58d6aed566Sopenharmony_ciIn the root directory of the obtained source code, run the following command: 59d6aed566Sopenharmony_ci 60d6aed566Sopenharmony_ci``` 61d6aed566Sopenharmony_cihb set 62d6aed566Sopenharmony_ci``` 63d6aed566Sopenharmony_ci 64d6aed566Sopenharmony_ciSelect `qemu_cm55_mini_system_demo` under **ohemu**. 65d6aed566Sopenharmony_ci 66d6aed566Sopenharmony_ciRun the following build command: 67d6aed566Sopenharmony_ci``` 68d6aed566Sopenharmony_cihb build -f 69d6aed566Sopenharmony_ci``` 70d6aed566Sopenharmony_ci 71d6aed566Sopenharmony_ciThis will build `OHOS_Image` for Qemu Cortex-m55 mps3-an547 machine. 72d6aed566Sopenharmony_ci 73d6aed566Sopenharmony_ci 74d6aed566Sopenharmony_ciAfter build is finished, the resulting image can be found in: 75d6aed566Sopenharmony_ci``` 76d6aed566Sopenharmony_ciout/arm_mps3_an547/qemu_cm55_mini_system_demo/ 77d6aed566Sopenharmony_ci``` 78d6aed566Sopenharmony_ci#### 5. Running image in Qemu 79d6aed566Sopenharmony_ci 80d6aed566Sopenharmony_ciNote: The MVE feature of cortex-m55 processor can only be supported by installing QEMU version 6.2.0. 81d6aed566Sopenharmony_ci 82d6aed566Sopenharmony_cia) If not installed, please install `qemu-system-arm` 83d6aed566Sopenharmony_ciFor details, please refer to the HOWTO: [Qemu installation](https://gitee.com/openharmony/device_qemu/blob/HEAD/README.md) 84d6aed566Sopenharmony_ci 85d6aed566Sopenharmony_cib) Run 86d6aed566Sopenharmony_ci 87d6aed566Sopenharmony_ciRun the `./qemu-run --help` command. The following information is displayed: 88d6aed566Sopenharmony_ci 89d6aed566Sopenharmony_ci``` 90d6aed566Sopenharmony_ciUsage: qemu-run [OPTION]... 91d6aed566Sopenharmony_ciRun a OHOS image in qemu according to the options. 92d6aed566Sopenharmony_ci 93d6aed566Sopenharmony_ci Options: 94d6aed566Sopenharmony_ci 95d6aed566Sopenharmony_ci -e, --exec file_name kernel exec file name 96d6aed566Sopenharmony_ci -g, --gdb enable gdb for kernel 97d6aed566Sopenharmony_ci -t, --test test mode, exclusive with -g 98d6aed566Sopenharmony_ci -h, --help print help info 99d6aed566Sopenharmony_ci 100d6aed566Sopenharmony_ci By default, the kernel exec file is: out/arm_mps3_an547/qemu_cm55_mini_system_demo/OHOS_Image. 101d6aed566Sopenharmony_ci``` 102d6aed566Sopenharmony_ci 103d6aed566Sopenharmony_ci#### 6. gdb debug 104d6aed566Sopenharmony_ci 105d6aed566Sopenharmony_ci``` 106d6aed566Sopenharmony_cicd device/qemu/arm_mps3_an547 107d6aed566Sopenharmony_civim liteos_m/config.gni 108d6aed566Sopenharmony_ci``` 109d6aed566Sopenharmony_ci 110d6aed566Sopenharmony_ciIn the modified `board_opt_flags` compiler options: 111d6aed566Sopenharmony_ci 112d6aed566Sopenharmony_ci``` 113d6aed566Sopenharmony_ciboard_opt_flags = [] 114d6aed566Sopenharmony_ci``` 115d6aed566Sopenharmony_cito: 116d6aed566Sopenharmony_ci 117d6aed566Sopenharmony_ci``` 118d6aed566Sopenharmony_ciboard_opt_flags = [ "-g" ] 119d6aed566Sopenharmony_ci``` 120d6aed566Sopenharmony_ci 121d6aed566Sopenharmony_ciSave and exit, recompile under OHOS root directory: 122d6aed566Sopenharmony_ci 123d6aed566Sopenharmony_ci``` 124d6aed566Sopenharmony_cihb build -f 125d6aed566Sopenharmony_ci``` 126d6aed566Sopenharmony_ci 127d6aed566Sopenharmony_ciIn a window to enter the command: 128d6aed566Sopenharmony_ci 129d6aed566Sopenharmony_ci``` 130d6aed566Sopenharmony_ci./qemu-run -g 131d6aed566Sopenharmony_ci``` 132d6aed566Sopenharmony_ci 133d6aed566Sopenharmony_ciIn another window to enter the command: 134d6aed566Sopenharmony_ci 135d6aed566Sopenharmony_ci``` 136d6aed566Sopenharmony_ciarm-none-eabi-gdb out/arm_mps3_an547/qemu_cm55_mini_system_demo/OHOS_Image 137d6aed566Sopenharmony_ci(gdb) target remote localhost:1234 138d6aed566Sopenharmony_ci(gdb) b main 139d6aed566Sopenharmony_ci``` 140d6aed566Sopenharmony_ci 141d6aed566Sopenharmony_ciMore GDB related debugging can refer to [GDB instruction manual](https://sourceware.org/gdb/current/onlinedocs/gdb). 142