目录

【Docker + qemu】

1. 安装docker

2. 运行docker

【unsuccess版 】手动搭建

1. 下载linux kernel

2. 安装qemu

3. 安装交叉工具链

4. 编译内核

5. 用qemu启动尝试

6. 制作根文件系统

下载、编译和安装busybox

形成根目录结构

制作根文件系统镜像

7. 系统启动运行


  • 所有内容均来自互联网,记录了些自己调试的过程

【Docker + qemu】

1. 安装docker

首先,更新现有的包列表:

sudo apt update

接下来,使用apt安装一些允许通过HTTPS才能使用的软件包:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

然后将官方Docker存储库的GPG密钥添加到您的系统:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将Docker存储库添加到APT源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

接下来,使用新添加的repo源中的Docker包更新包数据库

sudo apt update

确保您要从Docker repo安装而不是默认的Ubuntu repo:

apt-cache policy docker-ce

虽然Docker的版本号可能不同,但您还是会看到这样的输出:

docker-ce:
  Installed: (none)
  Candidate: 18.03.1~ce~3-0~ubuntu
  Version table:
     18.03.1~ce~3-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

现在docker-ce还没有安装,用上面这个命令我们能看到安装源来自的Docker官方存储库。

最后,安装Docker:

sudo apt install docker-ce

现在应该安装好Docker了,检查它是否正在运行:

sudo systemctl status docker

输出应类似于以下内容,表明该服务处于工作状态:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
     Docs: https://docs.docker.com
 Main PID: 10096 (dockerd)
    Tasks: 16
   CGroup: /system.slice/docker.service
           ├─10096 /usr/bin/dockerd -H fd://
           └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml

2. 运行docker

构建docker 

# cd qemu-arm-linux

# ./build-docker-image.sh
截至 2022-9-15 在虚拟机由于Dockerfile没有把make -j 改为make -j8导致虚拟机卡死,
需要把make -j 改为 make -j8
sudo docker run -it --privileged arm-kernel-3.16-qemu /bin/bash
 /opt/create_image.sh/opt/start_qemu.sh

手动搭建----没成功,用上面的方法就好

用的版本是ubuntu 18.04 ,qemu是6.0 ,按照下面的步骤做完了,提示-kernerl参数不对,不知怎么解决。

1. 下载linux kernel

源码官网:The Linux Kernel Archives

2. 安装qemu

wget http://wiki.qemu-project.org/download/qemu-6.0.0.tar.bz2

配置qemu前,需要安装几个软件包:

sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev

 


配置qemu,支持模拟arm架构下的所有单板:

./configure --target-list=arm-softmmu --audio-drv-list=
  • 报错:

编译和安装:

make

make install

3. 安装交叉工具链

sudo apt-get install gcc-arm-linux-gnueabi

可根据自己的工具链调整 

4. 编译内核

生成vexpress开发板子的config文件:
 
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig


编译:

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j8


生成的内核镱像位于arch/arm/boot/zImage, 后续qemu启动时需要使用该镜像
 


5. 用qemu启动尝试

• qemu-system-arm -M vexpress-a9 -m 512M -kernel /path/to/kernel/dir/arch/arm/boot/zImage -dtb  /path/to/kernel/dir/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0
pc123@ubuntu:~/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot$ qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/zImage -dtb  /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

红色部分是下载的内核的根目录位置


这里简单介绍下qemu命令的参数:

-M vexpress-a9 模拟vexpress-a9单板,你可以使用-M ?参数来获取该qemu版本支持的所有单板

-m 512M 单板运行物理内存512M

-kernel /path/to/kernel/dir/arch/arm/boot/zImage  告诉qemu单板运行内核镜像路径

-nographic 不使用图形化界面,只使用串口

-append "console=ttyAMA0" 内核启动参数,这里告诉内核vexpress单板运行,串口设备是那个tty。


  • 在上面的测试中,你会发现内核报panic,因为内核找不到根文件系统,无法启init进程。所以接下来需要创建根文件系统

6. 制作根文件系统

下载、编译和安装busybox

wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2


make defconfig

make CROSS_COMPILE=arm-linux-gnueabi-

make install CROSS_COMPILE=arm-linux-gnueabi-


安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。


形成根目录结构

1.  创建rootfs目录(根目录),根文件系统内的文件全部放到这里
 
mkdir -p rootfs/{dev,etc/init.d,lib}


2. 拷贝busybox命令到根目录下


sudo cp busybox-1.20.2/_install/* -r rootfs/


3. 从工具链中拷贝运行库到lib目录下


sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/


4. 创建4个tty端终设备

sudo mknod rootfs/dev/tty1 c 4 1

sudo mknod rootfs/dev/tty2 c 4 2

sudo mknod rootfs/dev/tty3 c 4 3

sudo mknod rootfs/dev/tty4 c 4 4

制作根文件系统镜像

1. 生成32M大小的镜像
 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32


2. 格式化成ext3文件系统----会生成a9rootfs.ext3文件

mkfs.ext3 a9rootfs.ext3


3.  将文件拷贝到镜像中

sudo mkdir tmpfs

sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop

sudo cp -r rootfs/*  ./tmpfs

sudo umount tmpfs

docker内安装anaconda docker内安装qemu_linux


7. 系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:

qemu-system-arm -M vexpress-a9 -m 512M
-kernel /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/zImage
-dtb /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
-nographic
-append "root=/dev/mmcblk0
-sd a9rootfs.ext3

pc123@ubuntu:~/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot$ qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/zImage -dtb /home/pc123/Public/qemu/linux-kernel-5.4.1/linux-5.4.1/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3