初衷是想在qemu中调试linux内核。本文是基于现有的条件搭建一个开发环境。这里有几个先决条件:

1,qemu支持特定的CPU版本

2,linux kernel 中最好有相应的default_config,这样会省去不少工作量

最终我选了linux-2.6.38.6,CPU结构暂时选择versatilepb(后继改为AT91)

定制qemu

qemu中支持多种架构的CPU,其实我感兴趣的只是arm部分。下载qemu源码,然后进行编译使用。做这个步骤主要是为了后继在qemu增加AT91系列CPU的支持。

下载源码

用git同步过来就好了。qemu git 源:

https://github.com/qemu/qemu.git

功能定制

编译整个qemu时间不短,所以尽可能减少编译时间吧,只选择自己想要的功能。详细的可以通过./configure --help来查看

arch@archdev:/mnt/git/qemu$ ./configure --help

Usage: configure [options]

Options: [defaults in brackets after descriptions]

Standard options:

--help print this message

--prefix=PREFIX install in PREFIX [/usr/local]

--interp-prefix=PREFIX where to find shared libraries, etc.

use %M for cpu name [/usr/gnemul/qemu-%M]

--target-list=LIST set target list (default: build everything)默认会编译所有qemu工具

Available targets: aarch64-softmmu alpha-softmmu

--target-list-exclude=LIST exclude a set of targets from the default target-list

Advanced options (experts only):

--cross-prefix=PREFIX use PREFIX for compile tools []

--cc=CC use C compiler CC [cc]

--iasl=IASL use ACPI compiler IASL [iasl]

--host-cc=CC use C compiler CC [cc] for code run at

build time

--cxx=CXX use C++ compiler CXX [c++]

--objcc=OBJCC use Objective-C compiler OBJCC [cc]

--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS

--extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS

--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS

--cross-cc-ARCH=CC use compiler when building ARCH guest test cases

--cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests

...

...

这里我只对arm部分的感兴趣,所以最后的命令是:

$ ./configure --target-list=arm-softmmu --disable-git-update

$ make

编译生成:arm-softmmu/qemu-system-arm,arm-softmmu 这个目录加到PATH中,方便使用。效果如下代码:

$ qemu-system-arm --version

QEMU emulator version 4.0.92 (v4.1.0-rc2-dirty)

Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

$

编译过程中可能遇到缺少库,安装上就行了。ERROR: glib-2.40 gthread-2.0 is required to compile QEMU

kernel源码编译

如果连接失效,请去官网下载。

安装的话只要解压到YOUR_PREFERD_PATH就行了。加入YOUR_PREFERD_PATH到PATH中,方便使用。 然后输入 arm-linux-gcc -v ,如果能显示到版本就代表成功了。

交叉编译工具可能错误:-bash: /mnt/git/gcc-arm/bin/arm-none-eabi-gcc: No such file or directory 这是在64bit机器上运行32bit程序出现的报错。解决:

sudo apt-get install gcc-multilib

启动

遇到的问题是启动停留在这个打印,没有后继:Uncompressing Linux... done, booting the kernel.

首先要在编译内核时选中:

[] Kernel low-level debugging functions

[] Early printk

然后在qemu参数中配置kernel print的输出位置。

qemu-system-arm -M versatilepb -kernel /mnt/git/linux-2.6.38.6/arch/arm/boot/zImage -nographic -serial file:output.txt -append "console=ttyAMA0"

-serial file:output.txt: 这个配置会将启动信息放输入到output.txt。

console=ttyAMA0

这里并没有配置root 和文件系统。

END

qemu交叉编译arm内核_arm qemu (1) 内核启动调试环境搭建相关推荐

  1. qemu 内核调试环境搭建

    目录 [Docker + qemu] 1. 安装docker 2. 运行docker [unsuccess版 ]手动搭建 1. 下载linux kernel 2. 安装qemu 3. 安装交叉工具链 ...

  2. SUSE Linux Enterprise Server 安装内核源码及部署crash调试环境,分析内核崩溃文件(基于sles 15.2)

    实验环境: yg-net-static:~ # uname -a Linux yg-net-static 5.3.18-22-default #1 SMP Wed Jun 3 12:16:43 UTC ...

  3. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

    一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...

  4. linux下s3c2440开发板,SAMSUNG S3C2440 ARM LINUX 开发板 上手初体验 --开发环境搭建

    1,linux开发环境搭建 2,程序测试 easyOpentag驱动安装,打开连接,选择ARM-linux 1,环境搭建 我的系统版本 root@ubuntu:~# lsb_release -a No ...

  5. linux内核调试环境搭建-

    kvm系统的前端是qemu-kvm,工作在用户空间,给用户提供一套方便的kvm虚拟化工具集合.下面来介绍一下qemu-kvm-0.11.0的编译过程. 1.下载 wget http://sourcef ...

  6. mac 内核调试环境搭建

    操作系统安装 先从 app store 下载 下载完后安装程序在应用里 打开 vm 新建 双击从光盘或映像安装 安装 安装失败 用其它工具安装 还可以先在 windows 上的 VM 下先安装好再拷贝 ...

  7. [ARM入门]瑞萨单片机RA族开发环境搭建

    接触瑞萨是因为我们的产品真的很难找到MCU来替代了,从最开始的STM32,磕磕绊绊开发完成,结果ST涨价缺货,我们换了GD32,将功能转移完成,测试通过后GD也陷入了交货困难,亏得我之前还发帖子介绍了 ...

  8. 交叉编译和交叉调试环境搭建及使用

    From: http://blog.chinaunix.net/uid-25119314-id-226230.html 1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编 ...

  9. 学内核之二:基于QEMU搭建Linux内核运行调试环境

    目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...

最新文章

  1. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系
  2. PCL安装常见的错误集合解决方案(一)
  3. 使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令
  4. linux 后台任务 前台任务 查看切换终止开始命令 bg、fg、ctrl+z、ctrl+d和ctrl+c 简介
  5. Spark常规性能调优三:并行度调节
  6. java 模块 分工_Java秒杀系统实战系列~构建SpringBoot多模块项目
  7. c语言qt生成dll与加载dll,Qt制作界面的DLL以及调用
  8. Vue(MVVM)、React(MVVM)、Angular(MVC)对比
  9. 通过ajax传值,出现的乱码和特殊字符问题
  10. Requests 入门
  11. 应用安全-浏览器安全-攻防
  12. JAVA编程练习50题超详细
  13. k2p 高恪魔改固件
  14. YT88 USB 加密狗 使用方法(一)加壳
  15. 谷歌 发布android 8,2017谷歌大会正式发布Android 8.0!
  16. html5网页特效-水墨动画
  17. 裸金属服务器开通原理
  18. Fiddler抓包工具详细介绍
  19. javaweb项目网页自动刷新
  20. 将 google chrome 浏览器 安装到非系统盘(D盘、E盘、F盘……)

热门文章

  1. java的准动态(反射)
  2. CopyOnWrite容器
  3. python tk 当输入数值错误是报错_Python的异常处理
  4. 8 种常见SQL错误用法,你千万别犯!
  5. 高并发之并发容器,了解多少(从入门到超神)
  6. 数据结构:线性表(java实现)
  7. 蓝桥杯-最小乘积(java)
  8. 基于Struts2的供求信息网设计(二)
  9. Java 线程池(ThreadPoolExecutor)原理分析与使用
  10. hdu1181变形课dfs/bfs/并查集三种解法(java)