diff --git a/README.en.md b/README.en.md index e247ef426a45da66cc5a34717c5cd780a3f254e2..000c1d96c9afd5423c4a4c87209ee986ab4f59e1 100644 --- a/README.en.md +++ b/README.en.md @@ -4,6 +4,8 @@ English | [简体中文](./README.md) This repository is main repository of openEuler RaspberryPi SIG, and provides scripts for building openEuler image for Raspberry Pi and related documents. +In addition, RaspberryPi SIG also aims to migrate openEuler to other SoCs, such as [Rockchip](https://gitee.com/openeuler/rockchip). + - [raspberrypi](#raspberrypi) @@ -48,6 +50,7 @@ You can get introduction of openEuler RaspberryPi SIG from [sig-RaspberryPi](htt - [How to use Raspberry Pi](documents/树莓派使用.md) - [Building openEuler image for Raspberry Pi](documents/openEuler镜像的构建.md) - [Cross-compile the kernel](documents/交叉编译内核.md) + - [Emulate Raspberry Pi with QEMU](documents/QEMU启动树莓派.md) - [openEuler 20.03 LTS SP1 alpha version ChangeLog](documents/changelog/changelog-20.03-LTS-SP1.en.md) - [openEuler 20.03 LTS SP1 alpha version (UKUI desktop environment and Chinese input method) ChangeLog](documents/changelog/changelog-20.03-LTS-SP1-UKUI.en.md) - [openEuler 20.03 LTS SP1 alpha version (DDE desktop environment and Chinese input method) ChangeLog](documents/changelog/changelog-20.03-LTS-SP1-DDE.en.md) diff --git a/README.md b/README.md index 8589d4c4f3b42c32f580b3c8a2e823585e9ee625..2660146356bb41eff43f4782b7a84ea90897a71f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ 本仓库是 openEuler 社区树莓派 SIG 组的主仓库,提供 SIG 组相关信息以及适用于树莓派的 openEuler 镜像的构建脚本和相关文档。 +此外,树莓派 SIG 还致力于将 openEuler 移植到其他开发板,例如 [Rockchip](https://gitee.com/openeuler/rockchip)。 + - [raspberrypi](#raspberrypi) @@ -47,6 +49,7 @@ SIG 组基本信息位于 [sig-RaspberryPi](https://gitee.com/jianminw/community - [树莓派使用](documents/树莓派使用.md) - [openEuler 镜像的构建](documents/openEuler镜像的构建.md) - [交叉编译内核](documents/交叉编译内核.md) + - [QEMU 启动树莓派](documents/QEMU启动树莓派.md) - [openEuler 20.03 LTS SP1 更新日志](documents/changelog/changelog-20.03-LTS-SP1.md) - [openEuler 20.03 LTS SP1 内测版(UKUI 桌面、中文输入法)更新日志](documents/changelog/changelog-20.03-LTS-SP1-UKUI.md) - [openEuler 20.03 LTS SP1 内测版(DDE 桌面、中文输入法)更新日志](documents/changelog/changelog-20.03-LTS-SP1-DDE.md) diff --git "a/documents/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.md" "b/documents/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..40b31fbc29015cc9935afdd1a1e14e67ced97099 --- /dev/null +++ "b/documents/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.md" @@ -0,0 +1,121 @@ +# 介绍 + +本文档主要介绍如何使用 [QEMU](https://www.qemu.org/) 模拟启动 openEuler 的树莓派镜像。 + +# 实验环境 + +- 操作系统:EulixOS +- 架构:x86_64 + +实验环境相关信息见下图: + +![](images/QEMU实验环境.png) + + +# 安装 QEMU + +1. 下载 QEMU + + 从 [QEMU](https://download.qemu.org/) 下载源码。我们这里下载当前最新版本 [QEMU 6.0.0](https://download.qemu.org/qemu-6.0.0.tar.xz)。执行命令: + + `wget https://download.qemu.org/qemu-6.0.0.tar.xz` + +2. 解压缩源码 + + `tar xvJf qemu-6.0.0.tar.xz` + +3. 配置 QEMU + + `./configure --target-list=arm-softmmu,aarch64-softmmu --enable-debug --enable-sdl` + + 可以通过命令 `./configure --help` 查看配置相关选项和帮助信息。 + + 如配置失败,需根据提示解决问题。例如,可能需要安装依赖包 `SDL2-devel` 和 `meson`:`dnf -y install SDL2-devel meson`。 + +4. 编译 QEMU + + `make` + +5. 安装 QEMU + + `make install` + +6. 查看 QEMU 版本 + + 例如,通过命令 `qemu-system-aarch64 --version` 查看 qemu-system-aarch64 工具的版本。 + +# 准备 openEuler 镜像等文件 + +1. 下载 openEuler 的树莓派镜像 + + openEuler 的树莓派镜像下载链接详见 [RaspberryPi SIG 主仓库](https://gitee.com/openeuler/raspberrypi)。这里我们以 openEuler 社区发布的 openEuler 20.03 LTS SP1 版本的树莓派镜像为例,执行命令: + + `wget https://repo.openeuler.org/openEuler-20.03-LTS-SP1/raspi_img/aarch64/openEuler-20.03-LTS-SP1-raspi-aarch64.img.xz` + + 镜像所在路径记为 IMG_DIR。 + +2. 解压缩镜像 + + `xz -d openEuler-20.03-LTS-SP1-raspi-aarch64.img.xz` + + 得到镜像文件 `openEuler-20.03-LTS-SP1-raspi-aarch64.img`。 + +3. 提取 dtb 和 kernel8.img + + 1. 使用 losetup 将镜像文件虚拟成块设备 + + `losetup -f --show openEuler-20.03-LTS-SP1-raspi-aarch64.img` + + 例如,显示结果为 /dev/loop0。 + + 2. 使用 kpartx 创建分区表 /dev/loop0 的设备映射 + + `kpartx -va /dev/loop0` + + 得到结果将 /dev/loop0 三个分区挂载了: + ``` + add map loop0p1 ... + add map loop0p2 ... + add map loop0p3 ... + ``` + + 执行 `ls /dev/mapper/loop0p*` 可以看到 openEuler-20.03-LTS-SP1-raspi-aarch64.img 的三个分区: + + ``` + /dev/mapper/loop0p1 /dev/mapper/loop0p2 /dev/mapper/loop0p3 + ``` + + 3. 挂载镜像的 boot 分区 + + 创建挂载路径,如 /home/xxx/boot,则需要执行命令 `mkdir /home/xxx/boot`。下面将该挂载路径记为 `BOOT_DIR`。 + + 挂载镜像的 boot 分区到 BOOT_DIR:`mount /dev/mapper/loop0p1 BOOT_DIR`。 + + 4. 提取 dtb 和 kernel8.img 到 IMG_DIR + + ``` + cd IMG_DIR + cp BOOT_DIR/kernel8.img ./ + cp BOOT_DIR/*.dtb ./ + ``` + +# QEMU 模拟启动树莓派 + +1. 查看可供选择模拟的机器 + + `qemu-system-aarch64 -M help` + + 我们这里选择 `raspi3`。 + +2. 模拟启动树莓派 + + ``` + cd IMG_DIR + qemu-system-aarch64 -M raspi3 -cpu cortex-a53 -m 1024 -kernel kernel8.img -dtb bcm2710-rpi-3-b.dtb -sd openEuler-20.03-LTS-SP1-raspi-aarch64.img -net user,hostfwd=tcp::6022-:22 -append "rw earlyprintk loglevl=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p3 rootwait panic=1" -no-reboot -nographic + ``` + + QEMU 相关命令及其参数可参考 [QEMU Quick Start](https://qemu-project.gitlab.io/qemu/system/quickstart.html)。 + + 启动后根据提示输入用户名密码即可登录。如下图,登录成功后,输出显示当前系统相关信息。`ctl + a` 抬起后再输入 `x`,即可退出 QEMU 模拟器环境。 + + ![](images/QEMU启动树莓派.png) diff --git "a/documents/images/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.png" "b/documents/images/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..d1176ff621c4448d613304b4aea64ac7a3720634 Binary files /dev/null and "b/documents/images/QEMU\345\220\257\345\212\250\346\240\221\350\216\223\346\264\276.png" differ diff --git "a/documents/images/QEMU\345\256\236\351\252\214\347\216\257\345\242\203.png" "b/documents/images/QEMU\345\256\236\351\252\214\347\216\257\345\242\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..a8706241abc4f5599063346d0ef953e1e12478c0 Binary files /dev/null and "b/documents/images/QEMU\345\256\236\351\252\214\347\216\257\345\242\203.png" differ