# qemu **Repository Path**: itopen/qemu ## Basic Information - **Project Name**: qemu - **Description**: qemu的环境配置 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-05-10 - **Last Updated**: 2024-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QEMU安装并调试内核 ## 一、工具安装 ### 1.1 主机环境 - **主机版本**:Ubuntu20.04 - **主机环境**:wsl/虚拟机/实体机 ### 1.2 QEMU安装 - **安装命令** 命令的版本是:4.2.1 ```shell sudo apt-get install qemu sudo apt-get install qemu-system ``` - **手动安装** 官网下载地址:https://download.qemu.org/ 本次选择qemu-7.1.0 ```shell wget https://download.qemu.org/qemu-7.1.0.tar.xz tar -xvf qemu-7.1.0.tar.xz # 编译依赖安装包安装 sudo apt-get install ninja-build sudo apt-get install libglib2.0-dev sudo apt-get install libpixman-1-dev sudo apt-get install libusb-1.0-0-dev sudo apt-get install libsdl2-2.0 sudo apt-get install libsdl2-dev sudo pip3 install --user meson sudo apt install device-tree-compiler # 编译QEMU cd qemu-7.1.0 ./configure --enable-libusb --enable-sdl --prefix=/home/wen_fei/bin/qemu-7.1.0 # 路径必须是绝对路径,默认是/user/local/bin make -j$(nproc) make install # 设置QEMU的路径 vim ~/.bashrc # 最后一行添加 export PATH=~/bin/qemu-7.1.0/bin:$PATH # 重置.bashrc source ~/.bashrc ``` - **查看QEMU版本** ```shell $ qemu-system-arm --version QEMU emulator version 7.1.0 Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers ``` ### 1.3 riscv交叉编译工具链安装 - **版本选择** 使用的是riscv64-linux-gnu-gcc - **工具链下载安装** ```shell sudo apt-get install gcc-riscv64-linux-gnu sudo apt-get install g++-riscv64-linux-gnu sudo apt-get install pkg-config-riscv64-linux-gnu ``` - **查看`riscv64-linux-gnu-gcc`版本** ```shell $ riscv64-linux-gnu-gcc --version riscv64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` ## 二、内核编译 ### 2.1 内核版本选择 ​ 本次选择的是linux-5.10 ### 2.2 linux kernel下载 [官网下载路径](https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/) [aliyun下载路径](https://mirrors.aliyun.com/linux-kernel/v5.x/?spm=a2c6h.25603864.0.0.279743c0qJqmV8) [网易开源镜像下载路径](http://mirrors.163.com/kernel/v5.x/) ```shell wget http://mirrors.163.com/kernel/v5.x/linux-5.10.tar.xz tar -xvf linux-5.10.tar.xz ``` ### 2.3 内核编译 #### 2.3.1 riscv内核编译和镜像选择 - **内核编译** ```shell export ARCH=riscv export CROSS_COMPILE=riscv64-linux-gnu- make defconfig make -j$(nproc) ``` - **镜像选择** zImage: arch/riscv/boot/Image ## 三、文件系统制作 ### 3.1 busybox制作rootfs - **busybox版本选择** 本次选择的是busybox-1.36.0.tar.bz2 - **下载busybox** 官网下载地址:https://busybox.net/downloads/ ```shell wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2 tar -xvf busybox-1.36.0.tar.bz2 ``` - **编译riscv的busybox** ```shell export ARCH=riscv export CROSS_COMPILE=riscv64-linux-gnu- # 设置 static binary make defconfig menuconfig Settings ---> --- Build Options [*] Build static binary (no shared libs) # 编译安装 make -j$(nproc) make install CONFIG_PREFIX=/home/wen_fei/qemu/qemu_riscv/rootfs ``` ### 3.2 镜像打包 直接将[mkrootfs.sh](./shell/mkrootfs.sh)和rootfs放在同一目录下后运行即可 ```shell ./mkrootfs.sh ``` ## 四、QEMU启动内核 ### 4.1 riscv的内核启动 将以下文件放到一个目录下后,直接运行[qemu-riscv-run.sh](../../code/qemu/qemu-riscv-run.sh)脚本即可 qemu-riscv-run.sh Image rootfs.ext4 ```shell ./qemu-riscv-run.sh ``` ### 4.2 启动成功 有如下显示表示运行成功 ```shell test ...... Please press Enter to activate this console. ``` ### 4.3 QEMU退出 退出qemu,运行如下命令: 先执行`Ctrl + a`后松开键盘输入x即可退出 ## 五、常见问题处理 ### 5.1 QEMU配置`--enable-libusb`报错处理 **【问题描述】** 为使能qemu的usb功能,需要在编译qemu时添加`--enable-libusb`选项,此时报错如下 ```shell $ ./configure --prefix=/home/wen_fei/qemu/version/qemu_kvm --enable-libusb ... ../meson.build:1243:2: ERROR: Dependency "libusb-1.0" not found, tried pkgconfig A full log can be found at /home/wen_fei/qemu/version/qemu-7.0.0/build/meson-logs/meson-log.txt ERROR: meson setup failed ``` **【问题分析】** Ubuntu中缺少libusb-1.0库引起的 **【问题处理】** 执行以下命令安装libusb-1.0库 ```shell sudo apt-get install libusb-1.0-0-dev ```