原创,转载时请注明,谢谢。邮箱: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搜,就找到了。

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

转载于:https://www.cnblogs.com/embedded-tzp/p/4443611.html

【linux】内核源代码下载与阅读相关推荐

  1. Linux内核源代码下载

    因为从www.kernel.org官网下载内核源代码很慢 从以下网址下载源代码会快很多 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/ke ...

  2. Linux内核入门-如何获取Linux内核源代码、生成配置内核

    如何获取Linux内核源代码 如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包.除 ...

  3. linux重复文件管理,在windows下解压缩Linux内核源代码出现重复文件原因

    在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

  4. linux 内核源代码漫游,Linux内核源代码漫游——

    Linux内核源代码漫游 Alessandro Rubini著, rubini@pop.systemy.it 赵炯 译,gohigh@shtdu.edu.cn 本章试图以顺序的方式来解释Linux源代 ...

  5. Linux内核源代码获取方法

    Linux内核源代码获取方法 什么叫Linux 什么叫Linux内核 Linux内核源代码的获取 什么叫Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UN ...

  6. linux内核源代码分析----内核基础设施之klist

    概述 klist是list的线程安全版本,他提供了整个链表的自旋锁,查找链表节点,对链表节点的插入和删除操作都要获得这个自旋锁.klist的节点数据结构是klist_node,klist_node引入 ...

  7. linux内核源代码_如何从源代码构建和安装最新的Linux内核

    linux内核源代码 by Sreehari 通过Sreehari 如何从源代码构建和安装最新的Linux内核 (How to build and install the latest Linux k ...

  8. 乔纳森离开苹果;李彦宏被泼水;Windows 公开 Linux 内核源代码 | 开发者周刊

    [CSDN编者按]七月的第一周,科技圈就像盛夏的天气一样,冰火两重天.乔纳森离开苹果:李彦宏被泼水:Windows 公开 Linux 内核源代码......最近一周就有哪些开发者新闻呢?就在本期开发者 ...

  9. Linux 内核源代码的结构

    Linux内核源代码位于/usr/src/linux目录下. /include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核. /init 子目录包含了内核的初始化代码, ...

最新文章

  1. emmc boot1 boot2 partition
  2. 云炬随笔20171103
  3. Python类的私有属性、私有方法、类方法
  4. 如何添加评论_如何运用运镜+转场让视频更酷炫
  5. Atitit 指令集(IA及指令集架构 1. 指令集(IA:InstructionSet)是指CPU指令系统所能识别(翻译)执行的全部指令的集合。 1 1.1. (1)运算指令 1 1.2. (2)
  6. NLPIR中文分词器的使用
  7. 读《我没偷懒 - 读写记忆困难儿童案例》
  8. 计算机科学家与科学之路----2000年图灵奖得主美籍华人姚期智院士特邀报告
  9. matlab验证线性卷积与圆周卷积的关系
  10. 怎样把多个TXT文件合成为一个TXT文件
  11. Node.js Buffers缓存对象
  12. Centos7中设置代理的方法
  13. 2019 AMC8中文
  14. hgame week1 2021 pwn
  15. 如何快速了解一个领域/写综述
  16. GibbsCAM2013v10.5
  17. uniapp中image不显示网络图片
  18. nodejs实现小程序微信支付
  19. hihocoder 1479 三等分 树型dp
  20. 手机5g什么时候普及_要到2021年5G手机才会普及?你认可这个说法么? - 区块网...

热门文章

  1. 使用uni-app开发微信小程序之登录模块
  2. python入门之控制结构顺序与选择结构_Python 入门之控制结构 - 顺序与选择结构——第1关:顺序结构...
  3. python知识:*args 和**kwargs
  4. 汇编编程计算机流程图,汇编程序怎么做流程图?
  5. Matlab-使用逻辑值进行索引
  6. vsc系统是什么意思_电脑蓝屏是什么意思?蓝屏就一定要重装系统吗?你可不要弄错了...
  7. 计算机英语复习,计算机英语期末复习
  8. 飞花的糖果_JAVA
  9. 面试题总结15 自己构建一个哈希表
  10. 描述符:property 迭代器