本文介绍在archlinux环境下,如何进行内核使用gdb配合qemu进行调试。
 
1. 安装qemu
 
2. 编译linux kernel
选择最新的内核版本,规避gcc编译出错的问题具体步骤如下
   2.1 make mrproper
   2.2 make ARCH=i386 menuconfig
         选中kernel hacking->compile the kernel with debug info
  2.3 make
 
3.编译简单的init程序
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv) {
while ( ) {
prinf("hello,world\n");
sleep();
}
return ;
}
 
编译生成init
#gcc -static -o init hello.c
 
4. 创建根文件系统

  dd if=/dev/zero of=myinitrd4M.img bs= count=
mke2fs -t ext3 myinitrd4M.img
mkdir -p rootfs/dev
mount -o loop myinitrd4M.img rootfs
mknod rootfs/dev/console c
mknod rootfs/dev/ram b
cp init rootfs
umount rootfs
 
创建必要的目录
  1. 裝置檔

    為了使用 command line 以及開機,我們需要新增三項裝置 console 、 null 以及 ttyAMA0 ,在 _install/dev 下鍵入

    sudo mknod console c 5 1
    sudo mknod null c 1 3
    sudo mknod ttyAMA0 c 204 64
 
5. 运行内核
在一个终端运行
qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd myinitrd4M.img -append  "root=/dev/ram init=/bin/ash" -s -S
 
在另一个终端运行如下命令启动gdb并调试
#gdb vmlinux
gdb)target remote:1234
gdb)break start_kernel
gdb)c
 
开始内核调试之旅吧

每天学点GDB 12的更多相关文章

  1. 小白学 Python(12):基础数据结构(字典)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  2. 尚学linux课程---12、vim操作命令2

    尚学linux课程---12.vim操作命令2 一.总结 一句话总结: 要看不同的视频,每个视频的关键点都不一样,不如之间的的视频就没讲到vim中set nu是什么意思 学了的内容一定要练,不然真的是 ...

  3. 尚学python课程---12、python语言介绍

    尚学python课程---12.python语言介绍 一.总结 一句话总结: 1.操作简单:简便计算:允许通过单个“import”语句后跟一个函数调用来完成复杂的计算.虽慢 2.库丰富:比如人工智能和 ...

  4. 每天学点GDB 15

    本节重点描述两个gdb集成测试环境 有没有办法在一边调试的时候,一边显示对应的源码呢?有没有一种工具能够将gdb集成到ide中呢,本文就试图回答这些问题. emacs gdb 在linux的世界里,e ...

  5. 每天学点GDB 13

    ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...

  6. 每天学点GDB 11

    为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可 ...

  7. 【快学springboot】12.实现拦截器

    前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...

  8. 【用AI开挂的人生】5岁学编程,12岁进IBM

    " 跟普通孩子比起来,14岁少年Tanmay Bakshi身上有无数光环: 5岁开始对计算机感兴趣 9岁发布了第1个iOSAPP 12岁成为IBM沃森最年轻的程序员 现任IBM Watson ...

  9. 【循序渐进学Python】12.Python 正则表达式简介

    正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...

随机推荐

  1. Android之解析GML并显示

    本例主要实现在APP中解析GML数据并显示 GML,地理标记语言(外语全称:Geography MarkupLanguage.外语缩写:GML),它由开放式地理信息系统协会(外语缩写:OGC)于199 ...

  2. Ubuntu下自动挂载分区

    参考文章:http://feierky.iteye.com/blog/1998602 1.查看分区的UUID sudo blkid /dev/sda1: UUID="3526b254-390 ...

  3. Java Hour 59 JVM Heap

    程序没有方法区释放一段Heap 上的内存,只有JVM 本身可以去回收内存,这个工作单位就是GC. Garbage Collection GC 用来清理对象,同时也用来移动对象减少内存碎片. JVM 指 ...

  4. 免费电子书:使用VS Online敏捷管理开源项目

    今天推荐的是一本由微软出版社发布的免费电子书,涉及的话题是如何在Visual Studio Online中基于敏捷的思想来管理开源项目. 本书的几位作者(自称ALM领域的游侠),给大家分享了在一个敏捷 ...

  5. Z-XML团队 软件工程课之我感我思我收获

    <软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末. 走的远了,也该回头看看.全员7人回顾 ...

  6. 【bzoj1066】[SCOI2007]蜥蜴 网络最大流

    [bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...

  7. Oracle创建表空间和表

    创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

  8. 食物链 poj 1182

    C - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  9. Servlet常见错误及解决方法

    常见错误及解决方法 1. 404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示: 输入的地址有误(应用名大小写不正确,名称拼写不正确) 在web.xml文 ...

  10. js:数据结构笔记7--哈希表

    哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...