如果能给linux kernel打log,如果能单步运行,如果能像普通应用程序那样,step by step的查看程序跑哪里了.. 该多好?这是一个梦想,但从未实现过:因为那是kernel,不是应用程序。kernel一闪而过,我有什么能力让它驻足停留,为自己看个够?虽然,也知道kernel是人写的(废话),但那是全世界顶尖级黑客的产物---他们怎么把kernel写出来,然后怎么debug,无从知道...

  曾经有这样的猜想:这些人可能都是有两台机器在开发,一台机器编码,然后把新的kernel拿到另外一台上去运行,运行的过程产生log,最后cp出来,研究。这样想来,不经对他们更加敬佩..大神啊!终究就是大神!(真这样,这不但费时间,还费耐心-------岂是寻常人能干的?)

  由于自己是某小板子的关注者,也可以说是学习者。最近自己想玩玩此小板子,但是没有入手。思来想去,记得在开始查看该小板子资料的时候,这个小板子的官方debian系统是可以跑在一个叫qemu的虚拟机上的。又突然模糊记得,该资料对qemu的简介中,有一句“可以对kernel打断点”的言语。呀!若能够对kernel打断点,那岂不是可以利用它来debug kernel了吗?!

  于是网络千百度,一切就呈现在自己的面前: qemu + gdb + gdbserver 可以单步kernel ! 不但可以单步,而且寄存器什么的用命令完全可以查看!-----针对于kernel:运行到了哪里,都可以清清楚楚,明明白白!

  又是千百度!终于在自己的ubuntu-14.04上弄好了qemu,弄好了kernel,然后启动起来,看着那信息从qemu屏幕上闪过,心里高兴!

然后使用gdb去调试,又遇到小问题---也不算小:准备放弃了!歇息了几个小时,中间看了某宝的一部电影,某人因武而痴,于是寻找天下高手,“一决高下,也决生死”。我若此,岂不是会放弃自己的生命?!不就是一个kernel调试方法吗?继续搞。

  当然,这个问题不是我第一个遇到,所以,别人已经解决,并把解决的方法发在网上了---只是麻烦了些许。

  最终完美收局:在gdb里面单步单步的运行kernel程序,然后看看代码走向如何,以及跑到了什么地方~  体现了一把,千言万语一句话:不错!很高兴!

  当然,此处由于心情高兴,就胡言乱语一篇,为自己的心情留个log 。而真正的方法,将在明天重新整理成一篇博客,共享到网络,以回报网络分享。

  

ps:  

  最近有两件事让我这个山里娃高兴:其一,公司某白妞,cannot speak Chinese, only speaking english。某日某人,壮着胆子,Chat to her in English in a few minuters, so surprise in my mind !  其二:今日,kernel从此不再一飘而过,也可以为我稍作停留!也许,我可以试着关注下kernel maillist 上面的一些little bug : Yes, my email is to show on the kernel mailList ! happy ! happy ! happy !(^_^).

单步运行linux kernel ?的更多相关文章

  1. ubuntu: qemu+gdb 调试linux kernel 学习笔记

    声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...

  2. Linux Kernel 2.6.28 以上有BUG,系统运行第208.5天down机

    简介: 业务服务器有一台服务器出现意外down机,服务器ping 不通.无法登陆,本想通过公司KVM系统登陆系统重启解决,登陆KVM后发现系统屏幕打印大量的内核错误,KVM无法使用.无法发送重启服务器 ...

  3. Linux Kernel - Debug Guide (Linux内核调试指南 )

    http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...

  4. Linux kernel make 常用选项介绍

    Linux kernel 编译方法大全记录 一.这是一个我自己写的自动make脚本: #!/bin/sh export ARCH=arm export CROSS_COMPILE=arm-linux- ...

  5. Linux Kernel 代码艺术——编译时断言

    本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel” 系列文章中),一来通过内核 ...

  6. Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State

    目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...

  7. arm linux kernel 从入口到start_kernel 的代码分析

    参考资料: <ARM体系结构与编程> <嵌入式Linux应用开发完全手册> Linux_Memory_Address_Mapping http://www.chinaunix. ...

  8. Linux Kernel Schduler History And Centos7.2's Kernel Resource Analysis

    本文分为概述.历史.el7.2代码架构图解三部分. 解决的问题: a.Kernel调度发展过程: b.以架构图的方式,详解el7.2具体调度实现.内核线程模型.调度时间片计算,以及探究整个Kernel ...

  9. arm linux kernel启动之start_kernel

    了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了.start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...

随机推荐

  1. Python定时调度--多任务同一时间开始跑 scheduler.enterabs

    Event Priorities If more than one event is scheduled for the same time their priority values are use ...

  2. PHP截取中文字符串

    这里的输出的长度是6,那么一个汉字的字符长度就是3咯,可是老师演示的一个字符的长度却是2,百思不得其解. 查了一下资料发现,这个问题的答案与系统所采用的字符编码方式有关: 1. utf-8 如果系统采 ...

  3. Android 校验apk文件渠道号、包名、版本号

    功能:可查看单个或目录下所有apk文件的渠道号.包名.版本号 下载地址:http://download.csdn.net/detail/zgz345/9248487使用:以查看包名.版本号为例 1.c ...

  4. 【LR】OSGI性能测试实例

    其实我们就两点Ø  确定测试登录最大并发用户数:Ø  事务平均响应时间 (两个查询) 得到这个任务 如何展开测试工作呢? 一.WindowsResources 设置(其实不监控 设不设都行 我感觉)  ...

  5. switch……case不能匹配字符串的方法 .xml

    pre{ line-height:1; color:#d1653c; background-color:#000000; font-size:16px;}.sysFunc{color:#566d68; ...

  6. js 判断字符是否以汉字开头

    javascript代码如下: var re = new RegExp("^[\u4e00-\u9fa5]"); if (re.test("aaa好")) { ...

  7. lua Date和Time

    time和date两个函数在Lua中实现所有的时钟查询功能.函数time在没有参数时返回当前时钟的数值.(在许多系统中该数值是当前距离某个特定时间的秒数.)当为函数调用附加一个特殊的时间表时,该函数就 ...

  8. ansible官方文档翻译之变量

    Ansible变量 在使用ansible变量的时候,主要是因为各个系统的不同,从而需要使用不同的变量来进行设置,例如在设置一些配置文件的时候,有大部分内容是相同的,但是一部分内容是和主机的ip地址或者 ...

  9. jquery选择器的使用

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  10. c# 运行时替换某文件源代码(将XML 转换成 某个枚举并写入源文件)

    var sr = new StreamReader(Server.MapPath("~/WEB-INF/rule.config")); XmlDocument doc = new ...