解剖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使用日记》。- 解剖linux内核之工具
- 解剖linux内核之工具
- 解剖linux内核之进程
- 解剖linux内核之文件系统
- 解剖linux内核之内存
- 十天学Linux内核之第一天---内核探索工具类
- Cgroup maintainer李泽帆:解剖Linux内核容器技术
- Valgrind--Linux下的内存调试和代码解剖工具
- Valgrind--Linux下的内存调试和代码解剖工具
- Valgrind--Linux下的内存调试和代码解剖工具
- Valgrind--Linux下的内存调试和代码解剖工具
- linux内核阅读工具
- Linux内核调试工具
- Linux信号深度解剖
- Linux信号深度解剖
- Linux内核之内核资源
- Linux内核之内核锁
- Linux内核源代码分析工具
- Linux 虚拟内存和物理内存的理解
- 转发和重定向的本质区别
- 卸载oracle PSU方法(手动及自动)
- SQL SERVER 2008 存储过程 --跨表查询(例)
- Android开发相关资源下载
- 解剖linux内核之工具
- sql server2008安装时提示重启计算机失败怎么办
- 发一个创业公司的面经吧-- 豌豆荚
- 交作业 php100 第七讲 遍历目录下所有文件、文件夹
- GNS3 配置ASA模拟器
- [Android] APK反编译详解
- Android 自定义progressDialog实现
- HTML普及贴
- android获取手机通讯录联系人