qemu 内核调试环境搭建

目录

【Docker + qemu】

1. 安装docker

2. 运行docker

【unsuccess版 】手动搭建

1. 下载linux kernel

2. 安装qemu

3. 安装交叉工具链

4. 编译内核

5. 用qemu启动尝试

6. 制作根文件系统

下载、编译和安装busybox

形成根目录结构

制作根文件系统镜像

7. 系统启动运行


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

【Docker + qemu】

用的大佬的新的博客再续【从零使用qemu模拟器搭建arm运行环境】_海枫的博客-CSDN博客_arm模拟器

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参数不对,不知怎么解决。

qemu + Linux 从零使用qemu模拟器搭建arm运行环境_海枫的博客-CSDN博客

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=

  • 报错:
  • centos安装qemu遇到Dependency “pixman-1“ not found的问题_ashagaogao的博客-CSDN博客_pixman-1

编译和安装:

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启动时需要使用该镜像
 

  • 报错:linux报错:/bin/sh: 1: flex: not found scripts/Makefile.host:9: recipe for target ‘scripts/kconfig/lexe_锅锅是锅锅的博客-CSDN博客 

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目录,该目录下的程序就是单板运行所需要的命令。

  • 报错:编译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=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

qemu 内核调试环境搭建_第1张图片

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  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运行结束或配置出错

你可能感兴趣的:(操作系统,linux)