Qemu仿真----运行Ubuntu Base
Posted __毛豆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qemu仿真----运行Ubuntu Base相关的知识,希望对你有一定的参考价值。
平台: ubuntu-22.04-desktop-amd64.
对象: ubuntu base、qemu.
文件: ubuntu-base-22.04.2-base-arm64.tar.gz、linux-6.1.26.tar.xz
Ubuntu Base不是一个超小的内存运行嵌入式发行版;它是Ubuntu的最小实现,本例通过qemu运行ubuntu-base.
1.安装依赖
$ sudo apt install binfmt-support qemu-user-static 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]
ubuntu-base-22.04.2-base-arm64.tar.gz
[http://cdimage.ubuntu.com/ubuntu-base/releases/22.04.2/release/ubuntu-base-22.04.2-base-arm64.tar.gz]
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=ubuntu22-base.ext4 bs=1M count=1024 $ mkfs.ext4 ubuntu22-base.ext4 $ sudo mount -t ext4 ubuntu22-base.ext4 /mnt/ $ sudo tar -xf ubuntu-base-22.04.2-base-arm64.tar.gz -C /mnt/ $ sudo cp /usr/bin/qemu-aarch64-static /mnt/usr/bin/ $ sudo cp /etc/resolv.conf /mnt/etc/ $ sudo mount -t proc /proc /mnt/proc $ sudo mount -t sysfs /sys /mnt/sys $ sudo mount -o bind /dev /mnt/dev $ sudo mount -o bind /dev/pts /mnt/dev/pts
安装内核模块:
cd linux-6.1.26/ sudo make modules_install ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt cd ..
5.chroot
$ sudo chroot /mnt
进入chroot环境:
$ apt update $ apt install systemd sudo rsyslog resolvconf udev vim $ useradd -s \'/bin/bash\' -m -G adm,sudo phoebus $ passwd phoebus $ echo "ubuntu22" > /etc/hostname $ cp /lib/systemd/system/serial-getty\\@.service /lib/systemd/system/serial-getty\\@ttyAMA0.service
其中[serial-getty\\@ttyAMA0.service]做如下修改:
--- lib/systemd/system/serial-getty@.service +++ lib/systemd/system/serial-getty@ttyAMA0.service @@ -11,8 +11,8 @@ Description=Serial Getty on %I Documentation=man:agetty(8) man:systemd-getty-generator(8) Documentation=http://0pointer.de/blog/projects/serial-console.html -BindsTo=dev-%i.device -After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target +#BindsTo=dev-%i.device +#After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target After=rc-local.service # If additional gettys are spawned during boot then we should make
然后执行:
$ systemctl enable serial-getty\\@ttyAMA0.service
$ exit
退出chroot之后,执行:
$ sudo umount /mnt/proc $ sudo umount /mnt/sys $ sudo umount /mnt/dev/pts $ sudo umount /mnt/dev $ sudo umount /mnt
6.运行
$ 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=ubuntu22-base.ext4,if=none,format=raw,id=hd0 \\ -device virtio-blk-device,drive=hd0
执行start-qemu.sh,顺利的话,就可以进入ubuntu base了,可以直接apt安装需要的软件。
基于 QEMU进行 STM32 仿真开发
背景
老师送给我的STM32的板子不小心给我坏了,现在疫情还没过去,为了复习巩固stm32有关的移植,只能先玩玩仿真了。
我们在这一讲主要以搭建环境为主。
host平台 :Ubuntu 16.04
QEMU 介绍
Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。
正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰。
QEMU 同时也是一个非常简单的虚拟机,给它一个硬盘镜像就可以启动一个虚拟机,如果想定制这个虚拟机的配置,比如用什么样的 CPU 啊、什么样的显卡啊、什么样的网络配置啊,指定相应的命令行参数就可以了。它支持许多格式的磁盘镜像,包括 VirtualBox 创建的磁盘镜像文件。它同时也提供一个创建和管理磁盘镜像的工具 qemu-img。QEMU 及其工具所使用的命令行参数,直接查看其文档即可。
QEMU 安装
由于包管理器中的qemu太老了,所以我们采取基于源码的安装。
在此之前,需要先准备好有关的环境
sudo apt-get install build-essential pkg-config zlib1g-dev libglib2.0-0 libglib2.0-dev libsdl1.2-dev libpixman-1-dev libfdt-dev autoconf automake libtool librbd-dev libaio-dev flex bison -y
下载有关的源码
wget https://download.qemu.org/qemu-2.9.0.tar.xz
tar xf qemu-2.9.0.tar.xz
cd qemu-2.9.0
以上是关于Qemu仿真----运行Ubuntu Base的主要内容,如果未能解决你的问题,请参考以下文章