转自:提取已有的内核配置文件

由于有时候所做的内核配置文件需要移植到其他的内核源码中,此时又忘了保存,这时以下方法就可以满足你了。

1.首先这两个配置的位于(init/Kconfig):

2. 如果要内核保存内核的配置,必须先选择 <*> Kernel .config support,这个选项作用是让内核在编译的时候将.config文件做gz压缩后将其转换为一个放置于只读数据段的大字符数组“static const char kernel_config_data”中最后通过config.o连接进内核。

    如果在这个基础上选择了“[*] Enable access to .config through /proc/config.gz”就在保持内核配置到数组的基础上,提供一个用户空间读取这个数组的procfs文件接口。实现这个功能的是由内核的kernel/Makefile和kernel/configs.c共同完成的。下面详细解析一下
(1)如果配置了CONFIG_IKCONFIG就要生产 configs.o 文件
 
(2) configs.o 文件依赖 $(obj)/config_data.h文件,隐含的生成条件是通过configs.c文件编译生成。而在configs.c文件中包含了$(obj)/config_data.h文件。
 
(3) $(obj)/config_data.h文件的生成依赖$(obj)/config_data.gz,并强制每次编译都重新生成$(obj)/config_data.h文件(FORCE)。这个文件的生成规则是(5)
 
(4)$(obj)/config_data.gz文件的生成依赖$(KCONFIG_CONFIG)(也就是内核配置文件.config),并强制每次编译都重新生成$(obj)/config_data.gz(FORCE)。这个文件的生成是通过将.config执行gzip压缩生成的。
 
(5)这里其实就是执行一个shell指令,将$(obj)/config_data.gz文件中的数据通过内核工具程序scripts/bin2c放入一个名为“kernel_config_data”的字符数组中,并以MAGIC_START(宏:"IKCFG_ST")开头,MAGIC_END(宏: "IKCFG_ED")结尾。
 
    最后这个configs.o文件会被连接进内核,如果你的内核中配置了CONFIG_KALLSYMS,那么你就可以在/proc/kallsyms中看到“kernel_config_data”这个符号。
 
    如果你配置了CONFIG_IKCONFIG_PROC,那么configs.c中的procfs文件系统接口模块就会被编译进去,其实就是实现了对这个字符数组的读取和定位的功能。
 
上面的生产过程介绍完了,现在用一个图来总结一下过程 :
上面介绍了内核映像中内核配合信息的生成,接下来就看要如何获取了。从上面的介绍中其实不能看出获取的方法有两种:

1、在运行时通过/proc/config.gz获取:
     在控制台输入命令:cat /proc/config.gz | gzip -d > (你要保存配置的文件名) 或  zgrep CONFIG_PPPOE /proc/config.gz
     这个方法简单,但是也有他的局限性,首先必须配置CONFIG_IKCONFIG_PROC,其次必须在系统运行时进行获取。
 
2、可以直接通过编译好的内核映像:vmlinux、zImage、uImage等直接获取
     这个方法其实也非常简单,内核黑客们已经帮我们做好了提取工具了:scripts/extract-ikconfig。使用起来超简单:
     (如果是交叉编译,那就在宿主机)输入如下命令:(内核源码路径)scripts/extract-ikconfig (内核映像路径) > (你要保存配置的文件名)
     这个工具对于gz压缩方式是支持一贯不错,从2.6.37开始支持bzip2、 lzma 和 lzo压缩方式,从2.6.39开始支持 xz压缩方式。这些从内核的git log中可以看出。         
 
3、从内核逻辑地址空间提取:
     从上面的的生成介绍中我们可以知道,配置文件的压缩文件其实就在内核映像的只读数据段中。如果内核在运行的时候,其实数据在内核逻辑地址空间中可以找到。方法概况如下:
     (1)通过/proc/kallsyms找到“kernel_config_data”这个符号对应的内核逻辑地址
     (2)通过/dev/kmem和上面得到的逻辑地址获取数据。压缩文件数据就在:"IKCFG_ST"与"IKCFG_ED"之间。
      这个步骤需要自己写一小段的C代码,可以参考devkmem的代码(《对于驱动调试有用的两个小工具(devmem2、devkmem)》

获取linux内核的配置项(包含模块module)_转的更多相关文章

  1. 解析Linux内核的基本的模块管理与时间管理操作---超时处理【转】

    转自:http://www.jb51.net/article/79960.htm 这篇文章主要介绍了Linux内核的基本的模块管理与时间管理操作,包括模块加载卸载函数的使用和定时器的用法等知识,需要的 ...

  2. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核

    HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各 ...

  3. Linux内核监控模块-1-驱动模块(LKM)开发(以一个简单的hello world程序为例)

    在上面一篇中介绍到,监控模块要做成一个驱动模块(或者说是可加载模块,LKM),动态的加载到Linux内核中.那么这篇就简单的介绍一下怎样做一个这样的驱动模块.   以简单的hello world程序为 ...

  4. Linux内核入门到放弃-模块-《深入Linux内核架构》笔记

    使用模块 依赖关系 modutils标准工具集中的depmod工具可用于计算系统的各个模块之间的依赖关系.每次系统启动时或新模块安装后,通常都会运行该程序.找到的依赖关系保存在一个列表中.默认情况下, ...

  5. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

  6. 获取Linux内核未导出符号的几种方式

    从Linux内核的2.6某个版本开始,内核引入了导出符号的机制.只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用.然而,内核并没有导出所 ...

  7. Linux内核启动流程与模块机制

    本文旨在简单的介绍一下Linux的启动流程与模块机制: Linux启动的C入口位于/Linux.2.6.22.6/init/main.c::start_kernel() 下图简要的描述了一下内核初始化 ...

  8. Linux内核调用SPI平台级驱动_实现OLED的显示功能

    Linux内核调用SPI驱动_实现OLED显示功能 0. 导语 进入Linux的世界,发现真的是无比的有趣,也发现搞Linux驱动从底层嵌入式搞起真的是很有益处.我们在单片机.DSP这些无操作系统的裸 ...

  9. 如何获取linux内核的某个子系统的维护者邮箱?

    答: 如获取pwm子系统的维护者邮箱: ./scripts/get_maintainer.pl drivers/pwm

随机推荐

  1. SharePoint中在线编辑文档

    我一直以为只有在Document Library里面的File才会支持在线编辑.直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器. 目前正 ...

  2. asp.net url址址中中文汉字参数传递乱码解决方法

    中文乱码是网站开发中会常碰到的问题,今天我们来讲一下关于url址址中中文汉字参数传递乱码解决方法,有需要的朋友可以参考下.在cs文件里传参的时候用UrlEncode: Response.Redirec ...

  3. Redis复制与可扩展集群搭建【转】

    本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题. Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是 ...

  4. DCOS中监控和弹性伸缩方案经验

    监控的选型 我们的DCOS 主要是面向2种业务形态:互联网应用,NFV组件和相关的数据库.2种不同的业务虽然说都是跑在容器内部,但是其实需要监控的信息和指标都是各不相同.因此在选择监控方案的时候我们更 ...

  5. SQL SERVER 的排序规则

    有时候查询数据库的时候会发现(比如做重名检查的时候):数据库的查询时对大小写不敏感的,也就是 A 和 a 是一样的. 也就是说 select * from tabletest where name = ...

  6. 【小超_Android】2015最流行的android组件、工具、框架大全(兴许)

    2015.07.07 FlyRefresh 创意Replace的Android实现,非常cool. fab-toolbar Material Design风格的FAB工具栏效果 MaterialVie ...

  7. [LeetCode] Meeting Rooms I & II

    Meeting Rooms Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s ...

  8. mac安装GnuGP

    1.首先查看gnugp最新的稳定版: localhost:~ jack$ brew search gnupg ==> Formulae gnupg gnupg-pkcs11-scd gnupg@ ...

  9. Atitit 大龄软件工程师的出路attilax总结

    Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...

  10. xcode代码没颜色的解决方案

    转自:http://blog.csdn.net/jiarusun000/article/details/7527631 今天代码使用了svn后发现项目中的所有原文件都没颜色了... 查找半天后发现是因 ...