zoukankan      html  css  js  c++  java
  • Kconfig和Makefile的修改

    Kconfig文件的作用

    内核源码树的目录下都有两个文件Kconfig(2.4版本是Config.in)和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文件中。在内核编译时,主Makefile调用这个.config,就知道了用户的选择。

    *上面的内容说明了,Kconfig就是对应着内核的配置菜单。如果要想添加新的驱动到内核的源码中,可以修改Kconfig,这样就可以选择这个驱动,如果想使这个驱动被编译,要修改Makefile

    so添加新的驱动时需要修改的文件有两种(注意不只是两个)

    *Kconfig

    *Makefile

    要想知道怎么修改这两种文件,就要知道两种文件的语法结构

    Kconfig

    每个菜单都有一个关键字标识,最常见的就是config

    语法:

    config <symbol>

    <config options>

    symbol是一个新的标记的菜单项,options是在这个新的菜单项下的属性和选项

    其中options部分有:

    1、类型定义:

    每个config菜单项都要有类型定义,bool布尔类型、 tristate三态:内建、模块、移除 string字符串、 hex十六进制、 integer整型

    例如config HELLO_MODULE

    bool "hello test module"

    bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,如果选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,如果选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.

    2、依赖型定义depends on或requires

    指此菜单的出现与否依赖于另一个定义

    config HELLO_MODULE

    bool "hello test module"

    depends on ARCH_PXA

    这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效。

    3、帮助性定义

    只是增加帮助用关键字help或者---help---

    内核的Makefile

    在linux2.6.x/Documentation/kbuild目录下有详细的介绍有关kernel makefile的知识。

    内核的Makefile分为5个组成部分:

    Makefile 最顶层的Makefile
    .config 内核的当前配置文件,编译时成为定层Makefile的一部分
    arch/$(ARCH)/Makefile 与体系结构相关的Makefile
    s/ Makefile.* 一些Makefile的通用规则
    kbuild Makefile 各级目录下的大概约500个文件,编译时根据上层Makefile传下来的宏定义和其他编译规则,将源代码编译成模块或者编入内核

    顶层的Makefile文件读取 .config文件的内容,并总体上负责build内核和模块。Arch Makefile则提供补充体系结构相关的信息。 s目录下的Makefile文件包含了所有用来根据kbuild Makefile 构建内核所需的定义和规则。

    (其中.config的内容是在make menuconfig的时候,通过Kconfig文件配置的结果。

    举个例子:

    假设想把自己写的一个flash的驱动程序加载到工程中,而且能够通过menuconfig配置内核时选择该驱动该怎么办呢?可以分三步:

    第一:将你写的flashtest.c 文件添加到/driver/mtd/maps/ 目录下。

    第二:修改/driver/mtd/maps目录下的kconfig文件:

    config MTD_flashtest

    tristate “ap71 flash"

    这样当make menuconfig时 ,将会出现 ap71 flash选项。

    第三:修改该目录下makefile文件。

    ü 添加如下内容:obj-$(CONFIG_MTD_flashtest) += flashtest.o

    这样,当你运行make menuconfig时,你将发现ap71 flash选项,如果你选择了此项。该选择就会保存在.config文件中。当你编译内核时,将会读取.config文件,当发现ap71 flash 选项为yes 时,系统在调用/driver/mtd/maps/下的makefile时,将会把 flashtest.o 加入到内核中。即可达到你的目的

     原文地址:http://blog.csdn.net/luobin1984/article/details/7990798

  • 相关阅读:
    DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis
    WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
    Penetration Testing、Security Testing、Automation Testing
    Tomcat Server Configuration Automation Reinforcement
    Xcon2014 && Geekpwn2014
    phpMyadmin /scripts/setup.php Remote Code Injection && Execution CVE-2009-1151
    Linux System Log Collection、Log Integration、Log Analysis System Building Learning
    The Linux Process Principle,NameSpace, PID、TID、PGID、PPID、SID、TID、TTY
    Windows Management Instrumentation WMI Security Technology Learning
    IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)
  • 原文地址:https://www.cnblogs.com/albert1017/p/3225410.html
Copyright © 2011-2022 走看看