目录
【Docker + qemu】
1. 安装docker
2. 运行docker
【unsuccess版 】手动搭建
1. 下载linux kernel
2. 安装qemu
3. 安装交叉工具链
4. 编译内核
5. 用qemu启动尝试
6. 制作根文件系统
下载、编译和安装busybox
形成根目录结构
制作根文件系统镜像
7. 系统启动运行
用的大佬的新的博客再续【从零使用qemu模拟器搭建arm运行环境】_海枫的博客-CSDN博客_arm模拟器
首先,更新现有的包列表:
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
构建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参数不对,不知怎么解决。
qemu + Linux 从零使用qemu模拟器搭建arm运行环境_海枫的博客-CSDN博客
源码官网:The Linux Kernel Archives
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=
- 报错:
- centos安装qemu遇到Dependency “pixman-1“ not found的问题_ashagaogao的博客-CSDN博客_pixman-1
编译和安装:
make
make install
sudo apt-get install gcc-arm-linux-gnueabi
可根据自己的工具链调整
生成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启动时需要使用该镜像
- 报错:linux报错:/bin/sh: 1: flex: not found scripts/Makefile.host:9: recipe for target ‘scripts/kconfig/lexe_锅锅是锅锅的博客-CSDN博客
- 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进程。所以接下来需要创建根文件系统
下载、编译和安装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目录,该目录下的程序就是单板运行所需要的命令。
- 报错:编译busybox 错误 error: storage size of ‘rlimit_fsize’ isn’t known_skyaizl的博客-CSDN博客
形成根目录结构
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=322. 格式化成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
完成上述所有步骤之后,就可以启动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 console=ttyAMA0"
-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
- 报错
运行QEMU时,出现错误:(process:8559): GLib-WARNING...gmem.c:483: custom memory allocation vtable not support_宅学部落-王利涛的博客-CSDN博客_qemu运行结束或配置出错