码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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的版本号可能不同,但您还是会看到这样的输出:

    1. docker-ce:
    2. Installed: (none)
    3. Candidate: 18.03.1~ce~3-0~ubuntu
    4. Version table:
    5. 18.03.1~ce~3-0~ubuntu 500
    6. 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

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

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

    2. 运行docker

    构建docker 

    1. # cd qemu-arm-linux
    2. # ./build-docker-image.sh
    3. 截至 2022-9-15 在虚拟机由于Dockerfile没有把make -j 改为make -j8导致虚拟机卡死,
    4. 需要把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

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

  • 相关阅读:
    nginx的ip_hash算法
    学习笔记:物理渲染-间接光照
    SeeOD应用:He-Ne激光束聚焦物镜设计
    2022年全球市场军用光电系统总体规模、主要企业、主要地区、产品和应用细分研究报告
    一次搞定33种python机器学习回归算法!超级全!
    C: . 与 -> 的区别
    阿里最新分享的《多线程核心技术第三版》神书就此霸榜GitHub,3天点击量已破百万
    shiro详解-shiro史上最全学习笔记
    基于SpringBoot的大学城水电管理系统
    【自然语言处理】【向量表示】PairSupCon:用于句子表示的成对监督对比学习
  • 原文地址:https://blog.csdn.net/m0_37844072/article/details/126615410
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号