在qemu下练习linux内核是十分方便的:不用修改内核后每次启动机器,而且可以很好的调试内核。



安装交叉编译器。



这里选择The Embedded Linux Development Kit (ELDK),可以从http://www.denx.de/wiki/DULG/ELDK下载。安装十分简单,注意需要磁盘上有3G空间。


在qemu下实战linux内核


编译内核

qemu支持arm的cpu,我们使用下面的命令可以知道qemu能够模拟的机器。

apple@apple-desktop:~$ qemu-system-arm -M ?

Supported machines are:

syborg     Syborg (Symbian Virtual Platform)

musicpal   Marvell 88w8618 / MusicPal (ARM926EJ-S)

mainstone  Mainstone II (PXA27x)

n800       Nokia N800 tablet aka. RX-34 (OMAP2420)

n810       Nokia N810 tablet aka. RX-44 (OMAP2420)

cheetah    Palm Tungsten|E aka. Cheetah PDA (OMAP310)

sx1        Siemens SX1 (OMAP310) V2

sx1-v1     Siemens SX1 (OMAP310) V1

tosa       Tosa PDA (PXA255)

akita      Akita PDA (PXA270)

spitz      Spitz PDA (PXA270)

borzoi     Borzoi PDA (PXA270)

terrier    Terrier PDA (PXA270)

connex     Gumstix Connex (PXA255)

verdex     Gumstix Verdex (PXA270)

lm3s811evb Stellaris LM3S811EVB

lm3s6965evb Stellaris LM3S6965EVB

realview   ARM RealView Emulation Baseboard (ARM926EJ-S)

versatilepb ARM Versatile/PB (ARM926EJ-S)

versatileab ARM Versatile/AB (ARM926EJ-S)

integratorcp ARM Integrator/CP (ARM926EJ-S) (default)



这里我选择versatilepb这个机器。



make mrproper

移除以前产生的文件



make allnoconfig

用这个命令让内核选项全部是N。这样我们可以制作出一个最精简的内核。



make menuconfig



如下是编译内核的选项。

versatilepb ARM Versatile/PB (ARM926EJ-S)

General setup --->

    * Initial RAM filesystem and RAM disk

System Type --->

    * MMU-based paged Memory Management support

    ARM System type (ARM Ltd. Versatile family)

    Versatile platform type --->

        * Support versatile/PB platform

Kernel Fetures --->

    * use the ARM EABI to compile the kernel

Userspace binary formats --->

    * kernel support for ELE binaries

Device Drivers

    Input device support

        * Key boards

            * AT keyboard

        Hardware I/o ports --->

            * AMBA KMI keyboard controller

    Graphic support

        * support for frame buffer devices->

            *ARM primecell PL110 Support

    Console display driver support 

        * Framebuffer console support

File systems --->

    * second extended fs support



make -j4

在双核cpu上4个进程编译内核。    





下面是启动内核的脚本,如果是ubuntu把这个脚本放到$HOME/bin下是十分方便的。



#!/bin/sh



ARGS="-kernel $HOME/arm-test/myzImage -initrd $HOME/arm-test/myinitrd.img "



echo "Starting QEMU with…"

echo $ARGS

echo "…."

exec qemu-system-arm -M versatilepb $ARGS



提示: $HOME/arm-test/myzImage 是上面编译出的内核 

             $HOME/arm-test/myinitrd.img 是自己制作的initrd.





调试内核

           首先要编译一个带有调式符号信息的内核



          配置内核下面的选项:

             Kernel hacking --->

                  * Kernel debugging

                  * Compile the kernel with debug info



           qemu运行后在qemu窗口里按ctrl+alt+2,输入gdbserver.

           进入内核代码目录,在命令行执行arm-gdb vmlinuz

           然后输入:

                   target remote localhost:1234

                   b 断点

                   c

            这样就可以调试内核了。

转载于:https://www.cnblogs.com/top5/archive/2010/03/11/1683770.html

在qemu下实战linux内核相关推荐

  1. QEMU启动ARM32 Linux内核

    目录 前言 前置知识 ARM Versatile Express开发板简介 ARM处理器家族简介 安装qemu-system-arm 安装交叉编译工具 交叉编译ARM32 Linux内核 交叉编译AR ...

  2. Linux学习记录(二)QEMU安装与Linux内核环境搭建

    Linux学习记录(二) 记录本人学习的过程和遇到的问题 QEMU安装与Linux内核环境搭建 Linux学习记录(二) 一.QEMU安装 1.什么是QEMU 2.QEMU安装 二.Linux内核环境 ...

  3. QEMU启动ARM64 Linux内核

    目录 前言 前置知识 virt开发板 ARM处理器家族简介 安装qemu-system-aarch64 安装交叉编译工具 交叉编译ARM64 Linux内核 交叉编译ARM64 Busybox 使用b ...

  4. elipse调试linux内核,debug eclipse cdt + qemu虚拟机调试linux内核

    debug eclipse cdt + qemu虚拟机调试linux内核 (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 A scr ...

  5. 利用QEMU+GDB搭建Linux内核调试环境

    前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...

  6. qemu+gdb调试linux内核

    文章目录 编译内核 下载qemu 构建initramfs根文件系统 1.编译Busybox 2.生成initrd 3.测试根文件系统 gdb调试内核 参考文献 编译内核 # make menuconf ...

  7. 图解cygwin下进行Linux 内核hack失败记

    据说 Linux内核精髓-精通Linux内核必会的75个绝技  一书中有很多Linux内核绝技:下面尝试一下在cygwin下照着做一些内核hack,看下效果: cygwin Cygwin是一个在win ...

  8. Ubuntu下的Linux内核的编译及安装

    推荐群:C/C++大学技术协会:145655849 Linux中的模块(Modules) Linux的module其实可以看作是内核的插件. 在Linux系统中,可以通过文件 cat /proc/mo ...

  9. Linux 内核实验室 —— 基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境

    介绍: 项目简介 本项目致力于创建一个基于 Docker + QEMU 的 Linux 实验环境,方便大家学习.开发和测试 Linux 内核. Linux Lab 是一个开源软件,不提供任何保证,请自 ...

  10. cygwin 编译linux内核,【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

    [背景] 折腾: 期间,已用make xxxx_defconfig调用默认配置: 此处,接着去: make menuconfig 去确认和修改配置. [折腾过程] 1.去make menuconfig ...

最新文章

  1. usaco Ordered Fractions 顺序的分数(两种解法)
  2. html5移动站点是什么,浅谈移动站点优化之痛-HTML5 什么是html5?
  3. Linux qfile中文文件名,QFile无法打开包含unicode字符的文件名
  4. 基于ESP32的竞赛裁判系统功能调试-与微机通讯
  5. Junit测试中找不到junit.framework.testcase
  6. linux iptables 命令简介
  7. leetcode算法题--下降路径最小和
  8. java 阻塞队列 LinkedBlockingQueue ArrayBlockingQueue 分析
  9. LeetCode5382. HTML 实体解析器
  10. 使用jquery获取radio的值
  11. 《http权威指南》阅读笔记(十)
  12. HDU5126 stars(4维偏序->cdq套cdq+树状数组)
  13. oracle跨越千年处理
  14. 分享几个大数据相关岗位的职责和面试问题
  15. Jumpserver安装和总结
  16. 【历史上的今天】9 月 16 日:乔布斯的归来;苹果崛起;易语言发布
  17. 蓝奏(lanzous)解析工具
  18. 电脑网线主要分类(网络传输介质)
  19. netty权威指南 微云_《Netty权威指南》(二)NIO 入门
  20. IOTOS物联中台从0到1开发Thales800驱动 实例详解

热门文章

  1. uliweb-apps
  2. zepto,kissy前端框架实现跨域
  3. java模拟form表单提交图片文件
  4. 关于“多目的地址的pix防火墙nat”的总结
  5. 微波烹调,营养损失多or少?
  6. 挑战性题目DSCT401:全源最短路径Floyd算法的并行实现
  7. js高级学习笔记(b站尚硅谷)-12-执行上下文
  8. hostname hostnamectl 显示、设置主机名
  9. 127.0.0.1 zxt.php_windows 10 下docker布置nginx+php环境,用宿主WEB目录负载均衡
  10. dhcp 续约review报文_DHCP工作原理( DHCP地址续约和释放)