`
yuanjinxiu
  • 浏览: 657952 次
文章分类
社区版块
存档分类
最新评论

那年,我学习《Linux内核修炼之道》——Kernel地图:Kconfig与Makefile

 
阅读更多



这些文章是阅读《linux内核修炼之道》的笔记和一些自己补充的知识和感悟,写的不清楚的地方请查看《linux内核修炼之道》等资料。同时文章若有不妥的地方请大家指出,谢谢。

转载请注明出处:http://blog.csdn.net/muge0913/article/details/7250425


Makefile不是Make Love


Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。 对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都不过分。


Kconfig和Makefile就是Linux Kernel迷宫里的地图。地图引导我们去认识一个城市,而Kconfig和Makefile则可以让我们了解一个Kernel目录下面的结构。我们每次浏览kernel寻找属于自己的那一段代码时,都应该首先看看目录下的这两个文件。



利用Kconfig和Makefile寻找目标代码

就像利用地图寻找目的地一样,我们需要利用Kconfig和Makefile来寻找所要研究的目标代码。

比如我们打算研究U盘驱动的实现,因为U盘是一种storage设备,所以我们应该先进入到drivers/usb/storage/目录。但是该目录下的文件很多,那么究竟哪些文件才是我们需要关注的?这时就有必要先去阅读Kconfig和Makefile文件。

对于Kconfig文件,我们可以看到下面的选项。






显然,这个选项和我们的目的没有关系。首先它专门针对Datafab公司的产品,其次虽然CompactFlash reader是一种flash设备,但显然不是U盘。因为drivers/usb/storage目录下的代码是针对usb mass storage这一类设备,而不是针对某一种特定的设备。U盘只是usb mass storage设备中的一种。再比如:



很显然这个选项是有关SanDisk产品的,并且针对的是SM卡,同样不是U盘,所以我们也不需要去关注。

事实上,很容易确定,只有选项CONFIG_USB_STORAGE才是我们真正需要关注的。



接下来阅读Makefile文件。



前面通过Kconfig文件的分析,我们确定了只需要去关注CONFIG_USB_STORAGE选项。在Makefile文件里查找CONFIG_USB_STORAGE,从第9行得知,该选项对应的模块为usb-storage。

因为Kconfig文件里的其他选项我们都不需要关注,所以Makefile的11~22行可以忽略。第24行意味着我们只需要关注scsiglue.c、protocol.c、transport.c、usb.c、initializers.c以及它们同名的.h头文件。

Kconfig和Makefile很好的帮助我们定位到了所要关注的目标,就像我们到一个陌生的地方要随身携带地图,当我们学习Linux内核时,也要谨记寻求Kconfig和Makefile的帮助。








这些文章是阅读《linux内核修炼之道》的笔记和一些自己补充的知识和感悟,写的不清楚的地方请查看《linux内核修炼之道》等资料。同时文章若有不妥的地方请大家指出,谢谢。

转载请注明出处:http://blog.csdn.net/muge0913/article/details/7250425







  


  
分享到:
评论

相关推荐

    Linux内核修炼之道

    很好Linux内核休息书籍 第一层次修炼的内容包括了前三章, ...代码的工具,最后,突出强调了内核源码分析过程中极为重要的两个角色——Kconfig 和 Makefile,并以 USB 子系统为例,演示了如何利用这两个角色进行代码分析。

    Linux内核修炼之道-pdf版

    KERNEL地图:KCONFIG与MAKEFILE...............................................................................................31 2 Makefile不是MakeLove ...................................................

    龙芯内核开发

    根据龙芯平台 Linux 内核实际情况,将内核的源码文件分为三部分: 驱动部分、体系架构相关部分 以及公共部分。 a) 驱动部分: 包含内核 driver 目录下所有的...Kconfig 与 Makefile 等文件都是源码文件对应的配置文件

    内核配置_yaffs2补丁

    将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie; 将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下; 将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.

    Linux那些事儿之我是Block层

    从2.6.15的内核开始,顶层目录下面有了一个叫做block的目录,内核目录结构变成了现在这个样子: localhost-1:/usr/src/linux-2.6.22.1 # ls COPYING Documentation MAINTAINERS README arch crypto fs init kernel mm...

    Android系统添加Linux驱动

    Linux内核是可配置,进入到linux目录,输入make menuconfig 将会有模块选择界面,前两句是 scripts/kconfig/mconf Kconfig .config - Linux/x86 3.10.65 Kernel Configuration Kconfig是默认选项,.config是当前...

    lichee_20170502_1607_全志R16的linux系统编译需要改动的文件_使用parrotv1.1的内核_没有外层目录.7z

    KCONFIG_AUTOCONFIG=/home/wwt/linux_r16/lichee/out/sun8iw5p1/linux/common/buildroot/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/wwt/linux_r16/lichee/out/sun8iw5p1/linux/common/buildroot/...

    yaffs2压缩包

    将yaffs2源码目录下的Makefile.kernel复制为内核fs/yaffs2/Makefile文件 将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2/目录下 将yaffs2源码目录下的*.c,*.h文件(不包括子目录下的文件)复制到内核fs/yaffs2/...

    把鸿蒙Liteos-a移植到STM32MP157.zip

    1. 准备工作与说明 1.1 准备工作 1.2 说明 2. Makefile编译系统分析 2.1 从最终的链接命令看Liteos-a的组成 2.2 Makfile中常用变量 2.3 包含的文件 2.4 把Makefile全部展开 2.5 分析在kernel/liteos_a下执行make的...

    SLFS:适用于Linux的简单日志结构文件系统-开源

    #vi KERNEL_SRC / fs / Makefile(添加以下行)obj-$(CONFIG_SLFS_FS)+ = slfs /#vi KERNEL_SRC / fs / Kconfig(找到“ MISC_FILESYSTEMS”部分并添加以下行)源“ fs / slfs / Kconfig” 2。编译Linux内核#...

    r58_evb_sc5806v4加载TP成功修改config 20160815 2026.7z

    eurasiacon/build/linux2/modules.mk:47: *** In makefile services4/srvkm/env/linux/Linux.mk: Duplicate module srvkm (first seen in eurasiacon/binary2_sunxi_android_release/target/kbuild/services4/srvkm/...

    Buildroot开发使用

    Buildroot是Linux平台上一...你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

    rpusbdisp:RoboPeak Mini USB Display项目的驱动程序和工具

    示范影片对于国际用户: 国内用户(中国用户):如何将驱动程序集成到内核构建操作中 1) Copy the content of linux-driver folder in your kernel source (ideally in a new folder called robopeak inside the ...

    buildroot-2020.02.3.tar.gz

    Buildroot是Linux平台上一...你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

Global site tag (gtag.js) - Google Analytics