1d6aed566Sopenharmony_ci# QEMU(Tutorials of C-SKY ) 2d6aed566Sopenharmony_ci 3d6aed566Sopenharmony_ci## 1.Introduction 4d6aed566Sopenharmony_ci 5d6aed566Sopenharmony_ciQEMU can simulate the kernel to run on different boards, freeing the dependence on the physical development board.The `SmartL_E802/` subdirectory contains part of the OpenHarmony kernel\_liteos\_m code verified by the Qemu C-SKY virtualization platform,you can simulate a single board based on the C-SKY architecture. 6d6aed566Sopenharmony_ci 7d6aed566Sopenharmony_ci## 2.Setup Environment 8d6aed566Sopenharmony_ci 9d6aed566Sopenharmony_ci 1. Set up the Compilation tool chain 10d6aed566Sopenharmony_ci 11d6aed566Sopenharmony_ci Note: [Downloadable directly](https://repo.huaweicloud.com/openharmony/compiler/gcc_csky/v3.10.29/linux/csky-v3.10.29.tar.gz) 12d6aed566Sopenharmony_ci 13d6aed566Sopenharmony_ci Optional compiler installation process: 14d6aed566Sopenharmony_ci 15d6aed566Sopenharmony_ci a) Create the `csky_toolchain` folder and enter it 16d6aed566Sopenharmony_ci 17d6aed566Sopenharmony_ci ```shell 18d6aed566Sopenharmony_ci mkdir csky_toolchain && cd csky_toolchain 19d6aed566Sopenharmony_ci ``` 20d6aed566Sopenharmony_ci 21d6aed566Sopenharmony_ci b) Download csky-elfabiv2-tools-x86_64-minilibc-20210423.tar.gz to `csky_toolchain`folder and unzip,download link: https://occ.t-head.cn/community/download?id=3885366095506644992 22d6aed566Sopenharmony_ci 23d6aed566Sopenharmony_ci ```shell 24d6aed566Sopenharmony_ci wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource/1356021/1619529111421/csky-elfabiv2-tools-x86_64-minilibc-20210423.tar.gz 25d6aed566Sopenharmony_ci tar -xf csky-elfabiv2-tools-x86_64-minilibc-20210423.tar.gz 26d6aed566Sopenharmony_ci ``` 27d6aed566Sopenharmony_ci 28d6aed566Sopenharmony_ci c) Add the csky-elfabiv2 compilation tool chain to the environment variable (modify user_toolchain_xxx_path to your own installation path): 29d6aed566Sopenharmony_ci 30d6aed566Sopenharmony_ci ```shell 31d6aed566Sopenharmony_ci vim ~/.bashrc 32d6aed566Sopenharmony_ci export PATH=$PATH:user_toolchain_xxx_path/csky_toolchain/bin 33d6aed566Sopenharmony_ci source ~/.bashrc 34d6aed566Sopenharmony_ci ``` 35d6aed566Sopenharmony_ci 36d6aed566Sopenharmony_ci 2. Install qemu 37d6aed566Sopenharmony_ci 38d6aed566Sopenharmony_ci a) create `csky_qemu` folder and enter it 39d6aed566Sopenharmony_ci 40d6aed566Sopenharmony_ci ```shell 41d6aed566Sopenharmony_ci mkdir csky_qemu && cd csky_qemu 42d6aed566Sopenharmony_ci ``` 43d6aed566Sopenharmony_ci 44d6aed566Sopenharmony_ci b) download csky-qemu-x86_64-Ubuntu-16.04-20210202-1445.tar.gz to `csky_qemu`folder and unzip,download link: https://occ.t-head.cn/community/download?id=636946310057951232 45d6aed566Sopenharmony_ci 46d6aed566Sopenharmony_ci ```shell 47d6aed566Sopenharmony_ci wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource/1356021/1612269502091/csky-qemu-x86_64-Ubuntu-16.04-20210202-1445.tar.gz 48d6aed566Sopenharmony_ci tar -xf csky-qemu-x86_64-Ubuntu-16.04-20210202-1445.tar.gz 49d6aed566Sopenharmony_ci ``` 50d6aed566Sopenharmony_ci 51d6aed566Sopenharmony_ci c) Add qemu to the environment variable (modify user_qemu_xxx_path to your own installation path): 52d6aed566Sopenharmony_ci 53d6aed566Sopenharmony_ci ```shell 54d6aed566Sopenharmony_ci vim ~/.bashrc 55d6aed566Sopenharmony_ci export PATH=$PATH:user_qemu_xxx_path/csky-qemu/bin 56d6aed566Sopenharmony_ci source ~/.bashrc 57d6aed566Sopenharmony_ci ``` 58d6aed566Sopenharmony_ci 59d6aed566Sopenharmony_ci d) Installation dependencies 60d6aed566Sopenharmony_ci 61d6aed566Sopenharmony_ci ```shell 62d6aed566Sopenharmony_ci ldd qemu_installation_path/bin/qemu-system-cskyv2 63d6aed566Sopenharmony_ci ``` 64d6aed566Sopenharmony_ci 65d6aed566Sopenharmony_ci According to the execution result of ldd, install the missing dependent libraries 66d6aed566Sopenharmony_ci 67d6aed566Sopenharmony_ci (Annotation: For more installation instructions, please refer to the following link: https://occ.t-head.cn/community/download?id=636946310057951232) 68d6aed566Sopenharmony_ci 69d6aed566Sopenharmony_ci## 3.Get source code 70d6aed566Sopenharmony_ci 71d6aed566Sopenharmony_ci[code acquisition ](https://gitee.com/openharmony/docs/blob/master/en/device-dev/get-code/sourcecode-acquire.md) 72d6aed566Sopenharmony_ci 73d6aed566Sopenharmony_ciHint : You can use the `repo` command to get the source code. 74d6aed566Sopenharmony_ci 75d6aed566Sopenharmony_ci## 4.Source building 76d6aed566Sopenharmony_ci 77d6aed566Sopenharmony_ci 1. Execute the hb set command and select the project`qemu_csky_mini_system_demo`. 78d6aed566Sopenharmony_ci 79d6aed566Sopenharmony_ci 2. Execute the hb clean && hb build command to build the executable file that produces `OHOS_Image`. 80d6aed566Sopenharmony_ci 81d6aed566Sopenharmony_ci ```shell 82d6aed566Sopenharmony_ci hb set 83d6aed566Sopenharmony_ci hb clean && hb build 84d6aed566Sopenharmony_ci ``` 85d6aed566Sopenharmony_ci 86d6aed566Sopenharmony_ci 3. After the building is complete,the corresponding executable file is in the home directory: 87d6aed566Sopenharmony_ci 88d6aed566Sopenharmony_ci ``` 89d6aed566Sopenharmony_ci out/SmartL_E802/qemu_csky_mini_system_demo/ 90d6aed566Sopenharmony_ci ``` 91d6aed566Sopenharmony_ci 92d6aed566Sopenharmony_ci## 5.Run the image in Qemu 93d6aed566Sopenharmony_ci 94d6aed566Sopenharmony_ci 1. Run qemu(Don't cooperate with GDB) 95d6aed566Sopenharmony_ci 96d6aed566Sopenharmony_ci ```shell 97d6aed566Sopenharmony_ci ./qemu-run 98d6aed566Sopenharmony_ci ``` 99d6aed566Sopenharmony_ci 100d6aed566Sopenharmony_ci 2. Run qemu(Cooperate with GDB) 101d6aed566Sopenharmony_ci 102d6aed566Sopenharmony_ci a) Start the GDB server and wait for the connection 103d6aed566Sopenharmony_ci 104d6aed566Sopenharmony_ci ```shell 105d6aed566Sopenharmony_ci ./qemu-run -g 106d6aed566Sopenharmony_ci ``` 107d6aed566Sopenharmony_ci 108d6aed566Sopenharmony_ci b) Create a new terminal and use GDB to connect to qemu 109d6aed566Sopenharmony_ci 110d6aed566Sopenharmony_ci ```shell 111d6aed566Sopenharmony_ci csky-abiv2-elf-gdb out/SmartL_E802/qemu_csky_mini_system_demo/OHOS_Image -ex "target remote localhost:1234" 112d6aed566Sopenharmony_ci ``` 113d6aed566Sopenharmony_ci 114d6aed566Sopenharmony_ci Annotation: The way to exit qemu : press ctrl and a,then release and press x. 115