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