2012.03.19

网上时间过早的讲编译内核的文章完全不用看,比如什么讲kgdb的,现在这个东西早就被集成到内核里了。还有调试内核的一些允许kernel

debugging的选项,在新版本中也早已是默认选中了。

简单地说,qemu相当于一个虚拟化的工具。

编译过linux内核有两个部分,第一个是vmlinux文件,100多MB的样子,包含源代码的符号映射表;还有一个是bzImage,是压缩过的内核,只有几MB。

qemu上运行的内容为:内核bzImage +

磁盘镜像xxx.img。磁盘镜像可以用busybox制作,但是也可以从qemu官网下载已经制作好的(左边一栏选testing

qemu,有个文件叫linux-0.2.img),大约8MB。

qemu加这两个东西,就变成了一个完整的Linux系统

切记用chmod命令修改内核和磁盘镜像文件的权限,否则可能导致qemu不能正常读取。为了简单我直接chmod 777

xxx了(所有用户所有权限)。

#qemu-system-i386 -S -kernel bzImage -hda linux-0.2.img -append

root=/dev/sda

这就把磁盘镜像和内核挂载到qemu上了。此时qemu出现黑屏,按ctrl+alt+2进入命令行终端模式。

在qemu命令行中输入gdbserver,发现开始监听tcp:1234端口。(1234是qemu默认设置)

新开一个终端,输入 #gdb vmlinux,开始读取大内核及符号映射。设置断点 #br start_kernel

接着开始远程传输指令 #target remote localhost:1234

输入#c (continue),开始继续执行,此时内核会自动执行到start_kernel()函数并暂停。

高版本的C函数库编译的程序放在linux-0.2.img中可能会报错,是由于该文件系统中的C库过老导致的。编译时采用静态编译即可解决这一问题

qemu debug linux内核,qemu调试linux内核相关推荐

  1. linux问号符号,调试linux内核时gdb中的问号符号4.10

    我想从linux内核中的函数start_kernel()调试linux内核.调试linux内核时gdb中的问号符号4.10 这基本上就是我已经做了 从kernel.org 下载4.10内核源提取源后: ...

  2. qemu debug linux内核,在QEMU环境中使用GDB调试Linux内核

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

  3. linux内核单步调试,Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)

    如何单步调试Linux内核一直困扰着linux驱动开发人员,内核有其代码量大.逻辑复杂.与硬件交互的特性.因此,有着不同于应用程序的调试方法,据统计Linux内核开 Linux内核驱动开发之KGDB原 ...

  4. linux内核单步调试,linux内核调试之KDB(1)

    说到linux调试人们第一想到的就是GDB,GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,想必大家都比较熟悉,但是在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括 ...

  5. Linux内核驱动调试,Linux内核设备驱动之内核的调试技术笔记整理

    /****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中 ...

  6. linux内核串口调试,linux 串口调试方法

    linux 串口调试方法 作者:syhdjf 发布于:2015-4-8 16:41 最近项目上用到linux下的串口,与下级模块的通信出了些问题,所以写了个小程序想要测试下串口,物理连接是PC端串口调 ...

  7. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...

    驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...

  8. linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)

    当我们开发嵌入式系统下的Qt应用程序时,有时候不能在虚拟机上进行调试,这时候我们需要通过远程调试的方式在PC上调试嵌入式系统下的Qt应用程序.这样就产生了交叉调试. 本文环境介绍: 虚拟机:vmwar ...

  9. linux pcm接口调试,Linux的alsa接口播放pcm音频数据

    ALSA框架,是Linux的音频接口,包括alsa驱动程序和用户API(asound库). alsa驱动程序,是Linux内核给声卡驱动程序提供的标准. 用户API,是Linux给需要声音的播放和采集 ...

  10. Linux内存不够调试,Linux系统内存错误调试方法

    而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由g ...

最新文章

  1. Tensorflow tf.layers
  2. STC89C52单片机 定时器
  3. centos7开放端口
  4. 网络边缘(接入网和物理介质)
  5. SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
  6. 从IT的角度思考BIM(二):模式与框架
  7. android 字符串转字节数组,java – 在Android中将字节数组转换为Charsequence
  8. linux domino启动和停止命令,在unix平台中通过脚本来启动和停止domino和domino控制器所用的参数_lotus notes...
  9. hbase集群 数据写入_HBase架构与原理详解
  10. 如何学习UG编程?零基础入门学UG难吗
  11. 读后感系列2:《看见》柴静(一)
  12. HTML ASP VBSCRIPT JAVASCRIPT SKILLS 常见问题
  13. UltraVNC(TightVNC、WinVNC)源码分析文档
  14. 三菱Q系列PLC项目资料 本系统采用三菱Q系列PLC,本系统中用到16个伺服电机,采用16轴控制器通过光纤驱动16个伺服
  15. 安卓证书库文件BKS制作
  16. win7计算机变成英文,我的win7开机选项变成了英文怎么处理
  17. gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
  18. php 文字 url编码,如何实现php中文转url编码
  19. centos7升级内核重启问题:you need to load the kernel first
  20. 磁共振线圈分类_核磁线圈的基本架构及各部分主要功能

热门文章

  1. 怎样知道邮箱的端口_AllenNLP源码拓展——训练结束向邮箱发邮件
  2. BUUCTF(misc) 假如给我三天光明 (盲文+摩斯密码)
  3. Pwntools---fmtstr_payload()介绍
  4. 使用Python 转化成 PB 格式数据的方法
  5. Python6种创建字典的方式
  6. php设置404返回302,java - 服务器访问应用返回302或者404状态码
  7. 哈尔滨工业大学计算机学院官网,哈尔滨工业大学计算机学院 唐好选 tanghx@hope.hit...
  8. html for 循环模板
  9. CSDN博客导出备份工具
  10. 初学__Python——Python代码的组织形式