在内核kbuild中加入arch平台配置项

原创 2016年06月01日 17:21:01

Kbuild编译内核,需要两中类型文件的支持Makefile和Kconfig。Makefile只是在编译的时候使用,但是内核还需要支持配置功能,所以还需要一个Kconfig用来在make menuconfig的时候进行显示。
不管是新写的驱动代码,还是新添加的平台代码,都需要编写相应的Kconfig和Makefile文件来加入的kbuild中进行编译。

要想知道怎么为新的版型添加Kconfig和Makefile,我们首先需要知道kbuild的编译流程是怎样的。从命令行说起,我们编译一个针对某个版型的内核,会使用如下的命令来进行:
1.配置内核
比如编译arm平台上的内核
make ARCH=arm menuconfig
这一步只是为了编译内核,设置内核特性和驱动模块。它会首先进入到arch/arm/目录中,然后读取该目录下的Kconfig。这个就是内核配置文件的主入口,可以看到它是根据不同的ARCH来区分的。我们打开相应的文件,可以看到其中调用了很到其他目录下的Kconfig文件,由此我们才可以在界面上看到配置选项。
新增一个版型我们需要在System Type特性下面来进行配置,如下所示:


menu "System Type"

config MMU
    bool "MMU-based Paged Memory Management Support"
    default y
    help
      Select if you want MMU-based virtualised addressing space
      support by paged memory management. If unsure, say 'Y'.

#
# The "ARM system type" choice list is ordered alphabetically by option
# text.  Please add new entries in the option alphabetic order.
#
choice
    prompt "ARM system type"
    default ARCH_VERSATILE if !MMU
        default ARCH_MULTIPLATFORM if MMU

#新添加平台
config ARCH_XXX
    bool "NEW Platform"
    select CPU_V8
    select GENERIC_CLOCKEVENTS
    select ARCH_REQUIRE_GPIOLIB
    select COMMON_CLK
    select CLKDEV_LOOKUP
    select ARM_GIC
    select HAVE_SMP
    select ARM_HAS_SG_CHAIN
    select ARCH_HAS_OPP
    select ARCH_HAS_CPUFREQ
    select MIGHT_HAVE_CACHE_L2X0
    select USB_GADGET_DUALSPEED
    select PM_OPP if PM 
    help
      Support for Actions OWL Platform

endchoice
source "arch/arm/mach-xxx/Kconfig"

我们需要在ARM system type 的choice中加入新的选项,比如上面的ARCH_XXX平台,以便我们能把自己的版型配置上。然后调用mach-XXX下面的Kconfig,我们把跟平台相关的配置型放置在mach-XXX目录下的Kconfig里面去。这样经过层层调用,这些平台相关的内核配置项就会在menuconfig的时候显示出来了,并且我们可以针对需要的特性进行配置了。

2.编译内核
经过上面的menuconfig,会在内核目录下生成.config文件,里面包括了我们配置的项目,然后在这一步我们会进行编译。
make uImage
这一步在编译的时候会首先读取.config里面的配置内容,更具相应的内容来编译不同的模块,Makefile中的CONFIG_XXX总是对应于Kconfig里面的XXX,比如CONFIG_ SMP就对应于Kconfig里面的config SMP选项。举个例子
smp-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
这个编译项目就是对应于我们配置的config SMP选项,在menuconfig配置的时候可以配置为*/M/空。所以CONFIG_SMP也对应三种结果,一个是y,一个是m,要么就为空。因此这条语句就可以变为:

(a)smp-y += omap-smp.o omap-headsmp.o
它的含义就是把后面的objs编译到内核中,也就是vmlinux中。
(b)smp-m += omap-smp.o omap-headsmp.o
它的含义是把后面的objs编译成一个module,命名为smp.ko,注意要想生成module,还需要执行一个make modules来进行编译才行。
(c)如果不配置,那么后面的objs就不会进行编译了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux-3.2.36内核启动1-启动参数(arm平台 启动参数的获取和处理,分析setup_arch)

最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动。 看的过程中总结了一点东西,希望可以帮助大家调试内核。 当我开始看的时候,第一件事是从网上搜集资料,不看不知道,一看吓一跳!牛人...

linux-3.2.36内核启动4-setup_arch中的内存初始化3(arm平台 bootmem_init源码分析)

void__init bootmem_init(void) {         unsigned long min, max_low, max_high;       &#...

linux-3.2.36内核启动3-setup_arch中的内存初始化2(arm平台 分析建立页表)

再介绍pageing_init之前,我们了解几个定义 pte_t 页表项 pmd_t 页中间目录项 pud_t 页上级目录 pgd_t 页全局目录项 我的arm平台 #define PMD_SHIFT...

linux内核学习(7)粗略走走kbuild Makefile编译流程

今天看Makefile文件,我头大了,此Makefile非彼Makefile,里面多了很多内置命令,比如origin、patsubst等等啦,这 些都没听说过,更可恶的是,连网上都没有,可见,这是一...

使用kbuild构建bzImage内核映像

这里通过以下三个最经典的步骤来分析下,一个bzImage内核映像是如何配置编译,并最终安装使用的。当然在整个内核构建过程中,还支持许多的特性,相信这个经典过程明确之后,分析其他的情况就不会太难了,这里...

Linux-3.2.0内核—kbuild.txt翻译

2.2 kbuild.txt 文件内容 2.2.1 输出文件 (1)Modules.order 这个文件记录了模块在 Makefiles 中的顺序。工具 modprobe 使用这些顺序来解决匹配...

linux内核启动第二阶段之setup_arch()函数分析-2.6.36

执行setup_arch()函数 回到start_kernel当中,569行,调用setup_arch函数,传给他的参数是那个未被初始化的内部变量command_line。这个setup_arch(...

内核arch/arm/boot/Makefile阅读

内核arch/arm/boot/Makefile阅读

用Arch Link(Mbed平台)制作的物联网展示

今天,我要用Arch Link为大家做一个物联网的展示,我们可以实现上传数据到dweet.io病能实时查看信息。Arch Link是一个mbed是能的开发板,基于 Nordic nRF51822及WI...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)