解剖linux内核之工具

来源:互联网 发布:网络小手分享论坛社区 编辑:程序博客网 时间:2024/06/05 08:03

 要能够深入到linux内核,需要必备的三个工具:一是编译内核;二是使用qemu+gdb调试内核;三是使用syetmtap探测内核。

一、编译linux内核:

Linux开源的一个重要体现就是用户可以根据自己的实际需要配置自己的Linux系统,一般的Linux发行版本为了能够保证在大多数机器上运行,因此会编译进许多对最终用户没有用的代码或模块。作为一名即将进入linux源代码世界的人,怎能容许有这样的“累赘”呢?因此,我们要根据自己“躯体”来定制自己的“灵魂”。后面你会逐步发现,编译内核是学习linux内核源代码的基础。

现将Linux的编译调节过程简述为(默认主机的环境是32bit ubuntu):

1.下载自己要编译的Linux内核的源代码,这个可以从Linux内核的官方网站上得到:www.kerenl.org。

2.编译内核最主要的便是配置文件.config,为了能够准确的得到结果(第一次不要求编译时间),将本机的config文件直接拷贝到解压后的源代码中,然后重命名为.config。

3.然后进行make操作(可以采用make –j 4来加快编译),这样一般不会出问题,但时间较慢,大约编译一次需要40分钟;更加详细的参考步骤请参加《How tocompile linux kernel 2.6》:http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html。

4.为了降低编译时间,就需要对配置文件进行裁剪,在配置文件中有好多是本机不需要的,尤其是device driver,它占据了编译内核的大部分时间,这就要根据自己的机器配置,将用不到的模块删掉。参考:http://lamp.linux.gov.cn/Linux/kernel_options.html。

5.剪裁的时候采用“逐步瘦身”法,先剪裁掉某个或某几个模块,然后在进行编译,若没错,在进行模块裁剪,这样可以最大程度上保证内核配置的正确性,而且由于进行的是增量编译,所以编译时间会比较快。


二、  使用Gdb+qemu调试内核

你想一步一步的跟踪Linux的启动过程吗?你想像dgb调试程序一样来调试Linux内核吗?如果你有这样的想法,恭喜你,你已经会提问题啦!(有问题总是好的,可怕的便是没有问题)。(以下默认的主机环境是ubuntu 32bit的,在64bit的机子上会有很多问题,若要注意解决发现得不偿失,先调通32bit的再说吧)

1.安装qemu

ubuntu下使用sudoapt-get install 安装的qemu可能会存在bug,使得无法在断点处停下;因此需要在qemu官方网站http://wiki.qemu.org/Download上下载最新的版本的源代码包自己进行编译安装:

l  sudo apt-get install zlib1g-dev libsdl-dev

l  解压源代码后,进入源代码所在目录执行 ./confingure

l  执行make

l  执行sudo makeinstall

2.创建QEMU格式的硬盘

qemu-img create –f  qcow2name.img size

例如:qemu-imgcreate –f qcow2 ubuntu10.04.img 4GB

3. 在创建的硬盘上安装操作系统

qemu  –hda  name.img –cdrom  ~/Download/ubuntu10.04.iso –boot d

说明:使用hda指定硬盘镜像,使用CDROM选定光驱。-boot d指从cdrom启动,-boot a是软盘 ,-boot c 是硬盘;有时安装系统会很慢,这是可以考虑使用kvm来代替。

例如:kvm –hda  ubuntu10.04.img –cdrom./ubuntu-10.04.iso  -boot d

4. 从已经装好操作系统的硬盘启动

qemu –hda ubuntu10.04.img

5.  编译内核,参见一。

6. 使用qemu+gdb调试自己编译的Linux内核

a) 在运行make命令的目录下执行命令或写成shell脚本的形式,

qemu –s –S –hda  ./ubuntu10.04.img –kernel./arch/x86/boot/bzImage –append root=/dev/sda

l  -s表示运行虚拟机时将1234端口开启成调试端口;

l  -S表示“冷冻”虚拟机,等待调试器发出继续运行命令;

l  -kernel表示要调试的内核镜像;

l  -append root=/dev/sda 表示传递给内核的参数。

b)   在另一个终端上运行gdb命令

l  gdb vmlinux

l  target remote localhost:1234

若到此没什么问题,你就可以发挥自己的聪明才智使用gdb的命令进行内核源代码的调试了。Gdb的命令参考:http://www.yolinux.com/TUTORIALS/GDB-Commands.html.


三、  使用systemtap调试内核

systemtap是内核的调试工具,它是在krobe、jprobe、kretprobe的基础上发展来的,使用systemtap就不用写内核模块,可以高效(快速、准确)的获取我们想知道的内核信息。有关systemtap的详细资料参加官方网站:http://sourceware.org/systemtap/

1.安装systemtap

我的主机系统ubuntu,systemtap的官网上提供了systemtap在ubuntu上的安装方法,在这不再详述。

2.systemtap入门

在systemtap的官网上提供了systemtap的参考文档以及比较多的参考例子,文档看一遍,例子运行一遍,便可以达到入门级。

3.sytemtap提高

systemtap最强大的部分便是可以使用embeddedc的形式,你用kprobe、jprobe、

kretprobe做的任何事情均可以转化成systemtap embedded c的形式,这里可以参见《systemtap使用日记》。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 郑州居住证凭条怎么办 宿舍虫子咬人怎么办 is语音注册频繁怎么办 苹果id注销了怎么办 网站突然打不开了怎么办 谷歌邮箱打不开怎么办 360借款无力承担怎么办 公司被收购期权怎么办 创业板连续亏损怎么办 国企合并后员工怎么办 资金密码忘记了怎么办? 大华电子秤称重不准怎么办 股票暂停上市散户怎么办 入股公司赔钱了怎么办 家里被虚报脱贫怎么办 技术入股想退股怎么办 想开店没有资金怎么办 想开店资金不够怎么办 要开店没资金怎么办 想开店缺少资金怎么办 刚刚开店没有资金怎么办 有专利没钱投资怎么办 肉牛养殖没资金怎么办 入股分红想撤资怎么办 入股后想退股怎么办 土地使用权到期后怎么办 员工辞职扣工资怎么办 公司老板要跑路不发工资怎么办 撤销撤多了怎么办 中葡股份跌停怎么办 厕所里有蟑螂怎么办 机票生日写错怎么办 户口出生地错了怎么办 护照号填写错误怎么办 鱼缸潜水泵声音大怎么办 股票跌到没钱了怎么办 新浪股票直播室打不开怎么办 st天业股份怎么办 日月股份破发怎么办 凌晨到达泰国机场怎么办 中介收钱不退钱怎么办