首页 > 其他分享 >Qemu仿真----(9)运行Debian Rootfs

Qemu仿真----(9)运行Debian Rootfs

时间:2023-05-27 20:11:07浏览次数:53  
标签:service qemu sudo mnt dev ---- linux Qemu Debian

平台: ubuntu-22.04-desktop-amd64.
对象: debian rootfs、qemu.
文件: linux-6.1.26.tar.xz

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

1.安装依赖

$ sudo apt install binfmt-support qemu-user-static qemu-system-aarch64 gcc-aarch64-linux-gnu debootstrap

2.下载文件

linux-6.1.26.tar.xz

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

debian rootfs

$ mkdir rootfs
$ sudo qemu-debootstrap --arch arm64 --variant=minbase --include=whiptail,ca-certificates,tzdata buster rootfs https://mirrors.ustc.edu.cn/debian/

参数说明:

minbase: 包含必要的包和apt包管理器;

buildd: 包含编译工具包;

fakechroot: 包含不用root权限的包;

scratchbox: 包含scratchbox(交叉编译工具链)相关包;

另外,制作ubuntu rootfs与制作debian rootfs类似,下载ubuntu rootfs如下(除此之外的以下其它步骤通用):

$ sudo qemu-debootstrap --arch arm64 --variant=minbase --include=whiptail,ca-certificates,tzdata jammy rootfs https://mirrors.ustc.edu.cn/ubuntu-ports/

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=debian10-base.ext4 bs=1M count=1024
$ mkfs.ext4 debian10-base.ext4
$ sudo mount -t ext4 debian10-base.ext4 /mnt/
$ sudo cp -raf rootfs/* /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 udev
$ useradd -s '/bin/bash' -m -G adm,sudo hellouser
$ passwd hellouser
$ echo "debian10" > /etc/hostname
$ cp /lib/systemd/system/serial-getty\@.service /lib/systemd/system/serial-getty\@ttyAMA0.service
$ systemctl enable serial-getty\@ttyAMA0.service
$ exit

然后执行:

$ sudo vim /mnt/lib/systemd/system/[email protected]

其中[serial-getty\@ttyAMA0.service]做如下修改:

--- lib/systemd/system/[email protected]
+++ lib/systemd/system/[email protected]
@@ -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

卸载:

$ 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

start-qemu.sh添加如下内容:

#!/bin/sh

qemu-system-aarch64 \
    -M virt \
    -cpu cortex-a53 \
    -nographic \
    -smp 1 \
    -m 1024M \
    -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=debian10-base.ext4,if=none,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0

执行start-qemu.sh,顺利的话,就可以进入ubuntu base了,可以直接apt安装需要的软件。

标签:service,qemu,sudo,mnt,dev,----,linux,Qemu,Debian
From: https://www.cnblogs.com/phoebus-ma/p/17437257.html

相关文章

  • 初学者编译的第一个小程序
    前言我们在往期的文章中讲到1.JDK的下载2.配置环境变量3.数据类型接下来我们就可以开始写小程序啦第一个程序1.编译环境我们认识Java编程的第一个程序,和其他语言一样,都是先从编译环境开始的,像Java的编译环境,还是很好记的,虽然没有c语言简洁。2.打印输出环境我们......
  • HTTP状态码是什么?常用的状态码有什么?
    HTTP(HypertextTransferProtocol)是一种用于传输超文本和其他内容的应用层协议。历史:HTTP最早的版本是HTTP/0.9,它只支持简单的GET请求,而不支持其他操作。HTTP/1.0版本增加了许多新特性,如支持多个请求,请求和响应头信息,以及管道化传输。HTTP/1.1版本是当前最常用的版本,它引入了持......
  • HTTP状态码是什么?常用的状态码有什么?
    HTTP(HypertextTransferProtocol)是一种用于传输超文本和其他内容的应用层协议。历史:HTTP最早的版本是HTTP/0.9,它只支持简单的GET请求,而不支持其他操作。HTTP/1.0版本增加了许多新特性,如支持多个请求,请求和响应头信息,以及管道化传输。HTTP/1.1版本是当前最常用的版本,它引入了持......
  • HTTP状态码是什么?常用的状态码有什么?
    HTTP(HypertextTransferProtocol)是一种用于传输超文本和其他内容的应用层协议。历史:HTTP最早的版本是HTTP/0.9,它只支持简单的GET请求,而不支持其他操作。HTTP/1.0版本增加了许多新特性,如支持多个请求,请求和响应头信息,以及管道化传输。HTTP/1.1版本是当前最常用的版本,它引入了持......
  • 自动驾驶业内动态简讯
    1.引言参与自动驾驶领域相关研发工作已有多年,针对该领域的快速发展,收集业内各大科技公司最新进展和技术突破,供伙伴们交流探讨。闲话少说,直接开始吧!2.博世据新闻介绍,博世在德国道路上测试L4级无人驾驶汽车,图示如下:博世已获得德国联邦交通管理局的许可,可以在任何天气下在公共道路......
  • Unity的IPreprocessBuild:深入解析与实用案例
    UnityIPreprocessBuildUnityIPreprocessBuild是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自动执行一些操作。这个功能可以帮助开发者提高工作效率,减少手动操作的时间和错误率。在本文中我们将介绍UnityIPreprocessBuild的使用方法,并提供三个使用例子,帮助读者......
  • 【基于容器的部署、扩展和管理】3.5 高可用性和故障恢复机制
    3.5高可用性和故障恢复机制云原生的高可用性是指在云原生环境中,通过自动化工具和技术手段,实现软件发布的高可用性机制。其主要思想是通过自动化部署、自动化监控、自动化修复等手段,提高软件系统的可用性和稳定性,从而减少系统故障和停机时间。故障恢复机制是指在云原生环境中,当系......
  • Traceback (most recent call last):错误问题解决
    原因是没有配置pymysql配置mysql连接https://blog.csdn.net/zzzcl112/article/details/80503690#:~:text=%5Broot%40VM_0_8_centos%20local%5D%20%23%20tar%20-zxvf%20PyMySQL-0.8.1.tar.gz%20%E8%BF%9B%E5%85%A5%2Fusr%2Flocal%2FPyMySQL-0.8.1%E7%9B%AE%E5%BD%95%2C%E6%89%A7%E8%......
  • 使用Linux安装Redis步骤
    在Linux上安装Redis的步骤:打开终端并使用以下命令下载Redistarball:wgethttp://download.redis.io/releases/redis-6.2.4.tar.gz解压缩tarball:tarxzfredis-6.2.4.tar.gz进入Redis目录:cdredis-6.2.4编译Redis:make安装Redis:sudomakeinstall创建Redis配置文件目录:su......
  • 第一章 初始java
    第一章初识java语言本课目标了解Java虚拟机与跨平台原理;熟练掌握安装、配置JDK开发环境;熟练掌握使用记事本开发Java;程序理解Java编译原理;会使用MyEclipse开发Java程序java技术平台javaSE-----基础核心javaEE-----webjavaME------移动端环境的搭建和配置jd......