• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 關(guān)于Linux 內(nèi)核配置系統(tǒng)淺析

    關(guān)于Linux 內(nèi)核配置系統(tǒng)淺析

    作者: 時間:2012-08-29 來源:網(wǎng)絡(luò) 收藏

    8) Source 語句

    source /word/

    /word/ 是文件名,source 的作用是調(diào)入新的文件。

    3.3 缺省

    支持非常多的硬件平臺,對于具體的硬件平臺而言,有些就是必需的,有些就不是必需的。另外,新增加功能的正常運行往往也需要一定的先決條件,針對新功能,必須作相應(yīng)的配置。因此,特定硬件平臺能夠正常運行對應(yīng)著一個最小的基本配置,這就是缺省配置。

    中針對每個 ARCH 都會有一個缺省配置。在向代碼增加了新的功能后,如果新功能對于這個 ARCH 是必需的,就要修改此 ARCH 的缺省配置。修改方法如下(在 內(nèi)核根目錄下):

    備份 .config 文件

    cp arch/arm/deconfig .config

    修改 .config

    cp .config arch/arm/deconfig

    恢復(fù) .config

    如果新增的功能適用于許多的 ARCH,只要針對具體的 ARCH,重復(fù)上面的步驟就可以了。

    3.4 help file

    大家都有這樣的經(jīng)驗,在配置 Linux 內(nèi)核時,遇到不懂含義的配置選項,可以查看它的幫助,從中可得到選擇的建議。下面我們就看看如何給給一個配置選項增加幫助信息。

    所有配置選項的幫助信息都在 document.tion/Configure.help 中,它的格式為:

    給出本配置選項的名稱, 對應(yīng)配置變量, 對應(yīng)配置幫助信息。在幫助信息中,首先簡單描述此功能,其次說明選擇了此功能后會有什么效果,不選擇又有什么效果,最后,不要忘了寫上如果不清楚,選擇 N(或者)Y,給不知所措的用戶以提示。

    4. 實例

    對于一個開發(fā)者來說,將自己開發(fā)的內(nèi)核代碼加入到 Linux 內(nèi)核中,需要有三個步驟。首先確定把自己開發(fā)代碼放入到內(nèi)核的位置;其次,把自己開發(fā)的功能增加到 Linux 內(nèi)核的配置選項中,使用戶能夠選擇此功能;最后,構(gòu)建子目錄 Makefile,根據(jù)用戶的選擇,將相應(yīng)的代碼編譯到最終生成的 Linux 內(nèi)核中去。下面,我們就通過一個簡單的例子--test driver,結(jié)合前面學(xué)到的知識,來說明如何向 Linux 內(nèi)核中增加新的功能。

    4.1 目錄結(jié)構(gòu)

    test driver 放置在 drivers/test/ 目錄下:

    $cd drivers/test

    $tree

    .

    |-- Config.in

    |-- Makefile

    |-- cpu

    | |-- Makefile

    | `-- cpu.c

    |-- test.c

    |-- test_client.c

    |-- test_ioctl.c

    |-- test_proc.c

    |-- test_queue.c

    `-- test

    |-- Makefile

    `-- test.c

    4.2 配置文件

    1) drivers/test/Config.in

    #

    # TEST driver configuration

    #

    mainmenu_option next_comment

    comment 'TEST Driver'

    bool 'TEST support' CONFIG_TEST

    if [ $CONFIG_TEST = y ]; then

    tristate 'TEST uSER-space interface' CONFIG_TEST_USER

    bool 'TEST CPU ' CONFIG_TEST_CPU

    fi

    endmenu

    由于 test driver 對于內(nèi)核來說是新的功能,所以首先創(chuàng)建一個菜單 TEST Driver。然后,顯示 TEST support,等待用戶選擇;接下來判斷用戶是否選擇了 TEST Driver,如果是(CONFIG_TEST=y),則進一步顯示子功能:用戶接口與 CPU 功能支持;由于用戶接口功能可以被編譯成內(nèi)核模塊,所以這里的詢問語句使用了 tristate(因為 tristate 的取值范圍包括 y、n 和 m,m 就是對應(yīng)著模塊)。

    2) arch/arm/config.in

    在文件的最后加入:source drivers/test/Config.in,將 TEST Driver 子功能的配置納入到 Linux 內(nèi)核的配置中。

    4.3 Makefile

    1)drivers/test/Makefile

    # drivers/test/Makefile

    #

    # Makefile for the TEST.

    #

    SUB_DIRS :=

    MOD_SUB_DIRS := $(SUB_DIRS)

    ALL_SUB_DIRS := $(SUB_DIRS) cpu

    L_TARGET := test.a

    export-objs := test.o test_client.o

    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

    subdir-$(CONFIG_TEST_CPU) += cpu

    include $(TOPDIR)/Rules.make

    clean:

    for dir in $(ALL_SUB_DIRS); do make -C $$dir clean; done

    rm -f *.[oa] .*.flags

    drivers/test 目錄下最終生成的目標文件是 test.a。在 test.c 和 test-client.c 中使用了 EXPORT_SYMBOL 輸出符號,所以 test.o 和 test-client.o 位于 export-objs 列表中。然后,根據(jù)用戶的選擇(具體來說,就是配置變量的取值),構(gòu)建各自對應(yīng)的 obj-* 列表。由于 TEST Driver 中包一個子目錄 cpu,當 CONFIG_TEST_CPU=y(即用戶選擇了此功能)時,需要將 cpu 目錄加入到 subdir-y 列表中。

    2)drivers/test/cpu/Makefile

    # drivers/test/test/Makefile

    #

    # Makefile for the TEST CPU

    #

    SUB_DIRS :=

    MOD_SUB_DIRS := $(SUB_DIRS)

    ALL_SUB_DIRS := $(SUB_DIRS)

    L_TARGET := test_cpu.a

    obj-$(CONFIG_test_CPU) += cpu.o

    include $(TOPDIR)/Rules.make

    clean:

    rm -f *.[oa] .*.flags

    3)drivers/Makefile

    ……

    subdir-$(CONFIG_TEST) += test

    ……

    include $(TOPDIR)/Rules.make

    在 drivers/Makefile 中加入 subdir-$(CONFIG_TEST)+= test,使得在用戶選擇 TEST Driver 功能后,內(nèi)核編譯時能夠進入 test 目錄。

    4)Makefile

    ……

    DRIVERS-$(CONFIG_PLD) += drivers/pld/pld.o

    DRIVERS-$(CONFIG_TEST) += drivers/test/test.a

    linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 东宁县| 漠河县| 景德镇市| 茌平县| 馆陶县| 宁海县| 瑞金市| 淄博市| 饶河县| 三台县| 化州市| 莲花县| 来凤县| 长宁区| 临漳县| 孟州市| 平和县| 伊吾县| 镇雄县| 渭南市| 乐业县| 张家川| 中山市| 巩义市| 石楼县| 柳河县| 稷山县| 利津县| 郧西县| 平南县| 乃东县| 长丰县| 隆尧县| 雷州市| 黄骅市| 苍梧县| 高雄县| 杭州市| 南昌市| 大港区| 岑溪市|