Qemu仿真----(10)运行ArchLinux Rootfs

Posted __毛豆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qemu仿真----(10)运行ArchLinux Rootfs相关的知识,希望对你有一定的参考价值。

平台: ubuntu-22.04-desktop-amd64.
对象: archlinux rootfs、qemu.
文件: linux-6.1.26.tar.xz、ArchLinuxARM-2023.03-aarch64-rootfs.tar.gz.

本例通过qemu运行archlinux rootfs for arm64。

1.安装依赖

$ sudo apt install qemu-system-aarch64 gcc-aarch64-linux-gnu

2.下载文件

linux-6.1.26.tar.xz

[https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.1.26.tar.xz]

ArchLinuxARM-2023.03-aarch64-rootfs.tar.gz

[http://mirrors.ustc.edu.cn/archlinuxarm/os/multi/ArchLinuxARM-2023.03-aarch64-rootfs.tar.gz]

或者从官方下载rootfs:

[http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz]

Note: 如果下载rpi的版本,请去除其中的/etc/fstab里的默认内容。

3.编译内核

$ make defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

4.创建文件系统

$ dd if=/dev/zero of=archlinux-base.ext4 bs=4096 count=512K
$ mkfs.ext4 archlinux-base.ext4
$ sudo mount -t ext4 archlinux-base.ext4 /mnt
$ sudo tar -xf ArchLinuxARM-2023.03-aarch64-rootfs.tar.gz -C /mnt
$ sync
$ sudo rm -rf /mnt/boot/
$ sudo rm -rf /mnt/lib/modules/6.2.1-1-aarch64-ARCH/

安装内核模块:

$ cd linux-6.1.26/
$ sudo make modules_install INSTALL_MOD_PATH=/mnt ARCH=arm64
$ cd ..

使用默认的rootfs即可,不需要chroot修改和配置。

5.运行

$ touch start-qemu.sh
$ chmod +x start-qemu.sh
$ vim start-qemu.sh

填入如下内容:

#!/bin/sh

qemu-system-aarch64 \\
    -M virt \\
    -cpu cortex-a53 \\
    -nographic \\
    -smp 1 \\
    -m 512M \\
    -kernel linux-6.1.26/arch/arm64/boot/Image \\
    -append "rootwait root=/dev/vda rw console=ttyAMA0" \\
    -netdev user,id=eth0 \\
    -device virtio-net-device,netdev=eth0 \\
    -drive file=archlinux-base.ext4,if=none,format=raw,id=hd0 \\
    -device virtio-blk-device,drive=hd0

运行start-qemu.sh,正常启动,登录界面默认有两个账号:

1).用户名:root,密码:root;

2).用户名:alarm,密码:alarm;

登录进入后,进行pacman-key的初始化:

$ pacman-key --init
$ pacman-key --populate archlinuxarm

之后,就可以使用了。

QEMU剧终版QEMU搭建的两种仿真开发板(详细使用方法)

之前详细搭建过程应该是烂尾了,后面有些许的具体具体步骤没有来得及记录。建议读者,可直接使用本文所搭建好的环境。

下面将分别介绍QEMU搭建好的两种开发环境:

1、QEMU仿真的MINI2440开发板开发环境
2、QEMU仿真的Vexpress V9开发板开发环境

所有的命令尽量在root模式下进行!!!


一、QEMU在Xubuntu仿真Mini2440 使用方法

交叉编译工具链:arm-linux-gcc-4.3.2
linux内核:2.6.32

下载搭建好的环境可到网盘下载,<传送门>提取码:fn9q

【虚拟机版本是15.5.0 build-14665864,一并上传云盘】

1、下载并安装虚拟机、解压Xubuntu镜像到合适的目录

2、开启虚拟机并打开镜像文件,其中若提示是否移动虚拟机的对话框,选择“我已复制该虚拟机”类似的选项。【开机密码:111111】

3、启动后,可以看到如下界面(终端已进入root模式,终端密码:111111)

接下来可按照虚拟机桌面文档详细操作,或者按照本文继续操作。

【切记】:
①、终端要最小化,并放到屏幕右下角
②、要进入root模式操作。
否则会发生不可预知的错误!!!

4、在终端输入cd /opt/micro2440/mini2440

5、输入./mini2440_start.sh

6、在终端继续输入如下内容

set bootargs noinitrd root=/dev/nfs rw nfsroot=10.0.0.1:/opt/root_qtopia ip=10.0.0.10:10.0.0.1::255.255.255.0 console=ttySAC0,115200 mini2440=1tb

7、输入bootm,即可运行成功。

8、按下ctrl+shift+t打开另一个终端,输入ping 10.0.0.10测试板子和虚拟机之间的通信。

【输入ctrl+c结束ping】

9、ping通之后,输入telnet 10.0.0.10登录到虚拟的开发板上,当出现FriendlyARM login:输入root

10、虚拟开发板运行hello world

再开启一个终端,进入宿主机(虚拟机)的/opt/micro2440/code/app目录下,可以看到有一个main.c

输入arm-linux-gcc main.c,进行交叉编译main.c,并生成a.out的ARM可执行文件。

显然这个可执行文件在我们的虚拟机,即×86架构上是不能运行的。

读者若有兴趣,可尝试使用gcc main.c生成a.out文件,看看是否可以在虚拟机上运行。

但是当我们把它放到虚拟开发板上时,便可以运行。将a.out拷贝到根文件系统目录下,即cp a.out /opt/root_qtopia/work/

回到telnet登录开发板的终端界面,并进入work目录,即cd work,发现a.out确实拷贝过来了。

然后输入./a.out,可以看到输出了结果!

说明了我们的环境搭建移植是成功的。

二、QEMU在Xubuntu仿真VexpressV9 使用方法

大体跟Mini2440类似,主要是文件所在目录的差异,下面一并详细列出

1、同前所述,正确下载并打开镜像。开机密码是123456,ROOT密码123456

2、输入cd /home/tftpboot

3、输入sudo ./boot-nfs.sh即可运行!

4、虚拟开发板运行输出hello world

打开另一个终端,进入/home/tftpboot/code/app,然后输入arm-linux-gnueabi-gcc main.c交叉编译生成a.out文件,随后输入cp a.out /home/nfs/work,将生成的a.out文件拷贝到文件系统中的work文件夹。

然后在虚拟开发板所在终端输入,cd work,随后输入./a.out即可看到输出结果!

以上是关于Qemu仿真----(10)运行ArchLinux Rootfs的主要内容,如果未能解决你的问题,请参考以下文章

QEMU 串行标准输出在 archlinux 客户机上发散

Qemu仿真----创建并安装虚拟机

随想录(qemu仿真linux kernel)

基于 QEMU进行 STM32 仿真开发

Qemu STM32 仿真

怎么有aarch64的ubuntu呢