1. 程式人生 > >KConfig、Makefile詳解以及ARM平臺Linux核心的編譯

KConfig、Makefile詳解以及ARM平臺Linux核心的編譯

下面講解一個綜合例項,假設我們要在核心原始碼drivers目錄下為ARM體系結
構新增如下用於test driver 的樹型目錄:
|--test
|-- cpu
| -- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
|-- test_queue.c
在核心中增加目錄和子目錄,我們需為相應的新增目錄建立Kconfig 和Makefile
檔案,而新增目錄的父目錄中的Kconfig 和Makefile 檔案也需要修改,以便新增的
Kconfig和Makefile檔案能被引用。
在新增的test目錄下,應該包含如下Kconfig檔案:
#
# TEST driver configuration
#
menu "TEST Driver "
comment " TEST Driver"
config CONFIG_TEST
bool "TEST support "
config CONFIG_TEST_USER
tristate "TEST user-space interface"
depends on CONFIG_TEST
endmenu
由於TEST driver 對於核心來說是新的功能,所以首先需要建立一個選單TEST
Driver;然後顯示“TEST support”,等待使用者選擇;接下來判斷使用者是否選擇了TEST
Driver,如果是(CONFIG_TEST=y),則進一步顯示子功能:使用者介面與CPU功能支
持;由於使用者介面功能可以被編譯成核心模組,所以這裡的詢問語句使用了tristate。
為了使這個Kconfig檔案能起作用,需要修改arch/arm/Kconfig檔案,增加以下內
容:
source "drivers/test/Kconfig"
指令碼中的source意味著引用新的Kconfig檔案。
在新增的test目錄下,應該包含如下Makefile檔案:
# drivers/test/Makefile
#
# Makefile for the TEST.
#
obj-$(CONFIG_TEST) += test.o test_queue.o test_client.o
obj-$(CONFIG_TEST_USER) += test_ioctl.o
obj-$(CONFIG_PROC_FS) += test_proc.o
obj-$(CONFIG_TEST_CPU) += cpu/
該指令碼根據配置變數的取值構建obj-*列表。由於test目錄中包含一個子目錄cpu,
當CONFIG_ TEST_CPU=y時,需要將cpu目錄加入列表。
test目錄中的cpu子目錄也需包含如下的Makefile檔案:
# drivers/test/test/Makefile
#
# Makefile for the TEST CPU
#
obj-$(CONFIG_TEST_CPU) += cpu.o
為了使得整個test 目錄能夠被編譯命令作用到,test 目錄父目錄中的Makefile 文
件也需新增如下指令碼:
obj-$(CONFIG_TEST) += test/
在drivers/Makefile中加入obj-$(CONFIG_TEST) += test/,使得使用者在進行核心編
譯時能夠進入test目錄。
增加了Kconfig和Makefile檔案之後的新的test樹型目錄如下所示:
|--test
|-- cpu
| -- cpu.c
| -- Makefile
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
|-- test_queue.c
|-- Makefile
|-- Kconfig