【linux】内核源代码下载与阅读

 

原创,转载时请注明,谢谢。邮箱:tangzhongp@163.comhtml

博客园地址:http://www.cnblogs.com/embedded-tzplinux

Csdn博客地址:http://blog.csdn.net/xiayulewawindows

 

"生于忧患,死于安乐"。 函数

说说linux如何阅读内核源代码,几年里我全部的笔记和资料都用word写的,看着它们静静的躺在硬盘里,就感受有些浪费,但愿能分享出来,由于包括ucos,u-boot,linux kernel的移植,我都喜欢下载官网比较新的版本,而后本身阅读源代码移植。由于要学的详细点,而我word作的笔记太简略了点,文章大部分还得从新整理。ui

源代码下载

http://www.kernel.org/中选择某个适合本身的版本,我下载的是linux.3.10.53. 而后解压,由于windows不支持符号连接,因此解压还得去linux下,而后删除arch下除所需体系结构外的全部目录,如个人体系结构是arm,我就把除arm外的全部目录都删了,再去arm目录下,将其它cpu的文件夹所有删了,好比个人soc是s3c2440, 则mach-*相似的文件夹我只保留了mach-s3c24xx,而plat-*, 只保留plat-samsung,继续目录循环操做,最后只保留特定芯片相关的文件。 这里说说为何要删除,由于删了看源代码方便点,否则不少重名函数。spa

阅读环境配置

    使用source insight,阅读代码很方便。.net

    略。调试

生成Map文件

 

    看看map文件内容:htm

.text 0xc0008c40 0x4f34 arch/arm/kernel/built-in.oblog

0xc0008c40 elf_check_arch

0xc0008ccc arm_elf_read_implies_exec

0xc0008cf0 elf_set_personality

0xc00090d4 no_fp

0xc0009134 ret_from_exception

0xc0009144 __switch_to

0xc0009210 ret_to_user

 

Map文件包含了函数,函数地址,函数所在的文件夹,如ret_to_user函数(标号?)的地址为0xc0009210,其函数所属文件在文件夹arch/arm/kernel/下。

    Map文件存在的意义,linux跨平台,有时同一个函数名可能在不一样的文件出现,用source insight搜索获得不少结果,此时根据map文件就能够定位linux编译采用的是哪个函数,在内核调试时就很是方便。

    Map文件添加方法:

在src/Makefile中export LDFLAGS_vmlinux以前添加

LDFLAGS_vmlinux += -Map vmlinux.map

 

而后编译make menuconfig, make。最后会在.config文件相同的目录下生成该文件。

Make时也能够make -V > make.log,将make输出信息打印到文件。

 

生成反汇编文件vmlinux.dis

    推荐文章的方法:http://www.cnblogs.com/sdphome/archive/2012/03/05/2380703.html

    简便一点能够直接使用arm-linux-gcc -S vmlinux > vmlinux.dis

   

 

资源汇总

    内核阅读与调试 主要涉及到的文件:

    最重要的linux内核源代码,vmlinux.dis, make.log, vmlinux.map, vmlinux.lds, Makefile。

vmlinux.lds在linux内核src\arch\arm\kernel目录下。

 

实例

    cdev_init, 直接在source insight搜,就找到了。

    以前调试时遇到过必需要对上述资源汇总的文件均进行查询才查找到问题的案例,没有作笔记,如今忘记了,一时没有想到比较好的用例,有机会补上来。

相关文章
相关标签/搜索