【linux】内核源代码下载与阅读
原创,转载时请注明,谢谢。邮箱:tangzhongp@163.com
博客园地址:http://www.cnblogs.com/embedded-tzp
Csdn博客地址:http://blog.csdn.net/xiayulewa
"生于忧患,死于安乐"。
说说linux如何阅读内核源代码,几年里我所有的笔记和资料都用word写的,看着它们静静的躺在硬盘里,就感觉有些浪费,希望能分享出来,因为包括ucos,u-boot,linux kernel的移植,我都喜欢下载官网比较新的版本,然后自己阅读源代码移植。因为要学的详细点,而我word做的笔记太简略了点,文章大部分还得重新整理。
源代码下载
去http://www.kernel.org/中选择某个适合自己的版本,我下载的是linux.3.10.53. 然后解压,因为windows不支持符号链接,所以解压还得去linux下,然后删除arch下除所需体系结构外的所有目录,如我的体系结构是arm,我就把除arm外的所有目录都删了,再去arm目录下,将其它cpu的文件夹全部删了,比如我的soc是s3c2440, 则mach-*类似的文件夹我只保留了mach-s3c24xx,而plat-*, 只保留plat-samsung,继续目录循环操作,最后只保留特定芯片相关的文件。 这里说说为什么要删除,因为删了看源代码方便点,不然很多重名函数。
阅读环境配置
使用source insight,阅读代码很方便。
略。
生成Map文件
看看map文件内容:
.text 0xc0008c40 0x4f34 arch/arm/kernel/built-in.o
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搜,就找到了。
之前调试时遇到过必须要对上述资源汇总的文件均进行查询才查找到问题的案例,没有做笔记,现在忘记了,一时没有想到比较好的用例,有机会补上来。
【linux】内核源代码下载与阅读的更多相关文章
- Linux内核源代码获取教程
Linux内核源代码获取方法 什么叫Linux 什么叫Linux内核 Linux内核源代码的获取 什么叫Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UN ...
- Linux内核源代码情景分析系列
http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统 5.1 概述 构成一个操作系统最重要的就 ...
- Ubuntu:编译Linux内核源代码和内核模块
1. 目的 内核模块需要运行在Linux 3.8.13内核中,因此需要为此内核重新编译内核模块源代码. 2. 步骤 1.在Ubuntu 14.04 64位(内核3.13.0-24-generic)上, ...
- Linux内核源代码分析方法
Linux内核源代码分析方法 一.内核源代码之我见 Linux内核代码的庞大令不少人"望而生畏",也正由于如此,使得人们对Linux的了解仅处于泛泛的层次.假设想透析Linux ...
- linux内核源代码、配置与编译
内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...
- 在windows下解压缩Linux内核源代码出现重复文件原因
在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂 原因一.因为在Lin ...
- Linux内核源代码
说明:只供学习交流 一,目录结构 Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具有可读性. 二,目录结构 arch目录 arch是archite ...
- Linux内核源代码目录树结构
Linux内核源代码目录树结构. arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录.和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分).mm(内 ...
- 《深入分析Linux内核源代码》读书、私藏笔记大放送
秉承着"不懂操作系统原理的程序员不是合格的程序员"的至理名言,鄙人又是买陈莉君老师的“Linux教学视频”,又是研读其力作<深入分析Linux内核源代码>,先将总结笔记 ...
随机推荐
- Eclipse中设置tomcat的启动内存
现象:眼下每次使用Eclipse启动Tomcat 的时候常常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread ...
- 横瓜先生如何用MDB和XLS等低性能数据库来处理千亿级数据量。
横瓜先生如何用MDB和XLS等低性能数据库来处理千亿级数据量. 横瓜先生曾经用ACCESS做数据库,开发出高性能CMS来处理过TB级的文本数据量,任何请求都可以在10MS内完成,基本就是硬盘延迟的时间 ...
- Ext JS学习第四天 我们所熟悉的javascript(三)
此文用来记录学习笔记: •javascript之函数 •this关键字的使用 –this关键字总是指向调用者,谁调用函数,this就指向谁 •call.apply的使用 –call和apply主要应用 ...
- ThinkPHP - 查询语句
public function index(){ // + ----------------------- // | 查询语句 // + ----------------------- // 实例化模 ...
- c++特殊函数
C++中NULL不能写作小写,NULL的值为零,也可以写作0 在自己写的复制构造函数中不改变原对象,所以传进来的参数可以设为const类型的,这样可以保证传进来的对象不被改变 比如A(const A ...
- word排版的一些小技巧积累
先准备好样式 编辑前,可以先根据要求,设置好样式,可以免去编辑好后,再修改格式(这样要改好多文本的格式) docx doc的样式不能通用. .docx转.doc 从word2013自带的编辑公式,编辑 ...
- c语言 ,回调函数[个人理解]
回调函数:把需要调用的方法的指针pCallBackFuncX作为参数传递给一个函数UsrFunction,以便该UsrFunction函数在处理相似事件的时候可以灵活的使用不同的方法. 以在fla ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- vsftpd安装
原文连接:史上最详细的vsftpd配置文件讲解: http://www.9170.org/post-322.html 参考博文:centos启用ftp功能:http://os.51cto.com/ar ...
- 浏览器hack总结 详细的浏览器兼容性解决方法
由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...