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的主要内容,如果未能解决你的问题,请参考以下文章