国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩


Linux內(nèi)核配置與編譯

分享到:
           

    1.內(nèi)核配置

    編譯內(nèi)核之前要先配置。為了正確、合理地設(shè)置內(nèi)核編譯配置選項(xiàng),從而只編譯系統(tǒng)需要的功能的代碼,主要有以下4個(gè)方面需要考慮。

    ● 尺寸小。自己定制內(nèi)核可以使代碼尺寸減小,運(yùn)行將會(huì)更快。
    ● 節(jié)省內(nèi)存。由于內(nèi)核部分代碼永遠(yuǎn)占用物理內(nèi)存,定制內(nèi)核可以使系統(tǒng)擁有更多的可用物理內(nèi)存。
    ● 減少漏洞。不需要的功能編譯進(jìn)入內(nèi)核可能會(huì)增加被系統(tǒng)攻擊者利用的機(jī)會(huì)。
    ● 動(dòng)態(tài)加載模塊。根據(jù)需要?jiǎng)討B(tài)地加載模塊或者卸載模塊,可以節(jié)省系統(tǒng)內(nèi)存。但是,將某種功能編譯為模塊方式會(huì)比編譯到
       內(nèi)核內(nèi)的方式速度要慢一些。

    Linux內(nèi)核源代碼支持20多種體系結(jié)構(gòu)的處理器,還有各種各樣的驅(qū)動(dòng)程序。因此,在編譯前必須根據(jù)特定平臺(tái)配置內(nèi)核源代碼。Linux內(nèi)核有上千個(gè)配置選項(xiàng),配置相當(dāng)復(fù)雜。所以,Linux內(nèi)核源代碼組織了一個(gè)配置系統(tǒng)。

    Linux內(nèi)核配置系統(tǒng)可以生成內(nèi)核配置菜單,方便內(nèi)核配置。配置系統(tǒng)主要包含Makefile、Kconfig和配置工具,可以生成配置接口。配置接口是通過(guò)工具來(lái)生成的,工具通過(guò)Makefile編譯執(zhí)行,選項(xiàng)則是通過(guò)各級(jí)目錄的Kconfig文件定義的。

    Linux內(nèi)核配置命令有make config、make menuconfig和make xconfig,它們分別是字符接口、ncurses光標(biāo)菜單和X-window圖形窗口的配置接口。字符接口配置方式需要回答每一個(gè)選項(xiàng)提示,逐個(gè)回答內(nèi)核上千個(gè)選項(xiàng)幾乎是行不通的;圖形窗口的配置接口很好,光標(biāo)菜單也方便實(shí)用。例如,執(zhí)行make xconfig,主菜單接口如圖1.5所示。


圖1.5 配置內(nèi)核

    2.內(nèi)核編譯

    (1)下載內(nèi)核源碼。

    從//www.kernel.org/pub/Linux/kernel/v2.6/Linux-2.6.14.tar.bz2下載Linux-2.6.14內(nèi)核(或者更高的版本)至/source/kernel目錄。解開(kāi)壓縮包,并進(jìn)入內(nèi)核源碼目錄,具體過(guò)程如下:

    $ tar jxvf Linux-2.6.14.tar.bz2
    $ cd Linux-2.6.14

    (2)修改內(nèi)核目錄樹(shù)根下的Makefile,指明交叉編譯器:

    $ vim Makefile

    找到ARCH和CROSS_COMPILE,修改:

    ARCH = arm
    CROSS_COMPILE = arm-linux-gcc

    (3)設(shè)置環(huán)境變量:

    $ export PATH=$PATH:/usr/local/arm/3.3.2/bin

    (4)配置內(nèi)核產(chǎn)生.config文件:

    $ cp arch/arm/configs/smdk2410_defconfig .config

    (5)輸入內(nèi)核配置命令,進(jìn)行內(nèi)核選項(xiàng)的選擇,命令如下:

    $ make menuconfig

    命令執(zhí)行成功以后,會(huì)看到如圖1.6所示的界面。其實(shí)我們?cè)趫D1.5中看到過(guò)同樣功能的界面,那個(gè)圖也是內(nèi)核選項(xiàng)配置界面,只不過(guò)那個(gè)界面在X-window下才能執(zhí)行。


圖1.6 內(nèi)核選項(xiàng)配置界面

    在各級(jí)子菜單項(xiàng)中,選擇相應(yīng)的配置時(shí),有3種選擇,它們代表的含義分別如下。

    ● Y:將該功能編譯進(jìn)內(nèi)核。
    ● N:不將該功能編譯進(jìn)內(nèi)核。
    ● M:將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊。

    如果使用的是make xconfig,使用鼠標(biāo)就可以選擇對(duì)應(yīng)的選項(xiàng)。如果使用的是make menuconfig,則需要使用回車鍵進(jìn)行選取。

    在每一個(gè)選項(xiàng)前都有個(gè)括號(hào),有的是中括號(hào),有的是尖括號(hào),還有的是圓括號(hào)。用空格鍵選擇時(shí)可以發(fā)現(xiàn),中括號(hào)中要么是空,要么是“*”;而尖括號(hào)中可以是空、“*”和“M”。這表示前者對(duì)應(yīng)的項(xiàng)要么不要,要么編譯到內(nèi)核中;后者則多一樣選擇,可以編譯成模塊。而圓括號(hào)的內(nèi)容是要你在所提供的幾個(gè)選項(xiàng)中選擇一項(xiàng)。

    在編譯內(nèi)核的過(guò)程中,麻煩的事情就是配置這步工作了。初次接觸Linux內(nèi)核的開(kāi)發(fā)者往往弄不清楚該如何選取這些選項(xiàng)。實(shí)際上,在配置時(shí),大部分選項(xiàng)可以使用其默認(rèn)值,只有小部分需要根據(jù)用戶不同的需要選擇。選擇的原則是將與內(nèi)核其他部分關(guān)系較遠(yuǎn)且不經(jīng)常使用的部分功能代碼編譯成為可加載模塊,這有利于減小內(nèi)核的長(zhǎng)度,減少內(nèi)核消耗的內(nèi)存,簡(jiǎn)化該功能相應(yīng)的環(huán)境改變時(shí)對(duì)內(nèi)核的影響;不需要的功能就不要選;與內(nèi)核關(guān)系緊密而且經(jīng)常使用的部分功能代碼直接編譯到內(nèi)核中。

    (6)執(zhí)行下面的命令開(kāi)始編譯:

    $ make zImage

    在編譯過(guò)程中會(huì)出現(xiàn)一些錯(cuò)誤,可以看到錯(cuò)誤發(fā)生在/drivers/video/console中。有時(shí)是因?yàn)槲覀冞x擇了“VGA text console”選項(xiàng),去掉這個(gè)選項(xiàng)即可。這個(gè)選項(xiàng)在“Device Driver”→“Graphics Support”→“console display driver support”下。

    總之,這類錯(cuò)誤是由于內(nèi)核配置不當(dāng)引起的,不需要修改內(nèi)核源碼。

    如果按照默認(rèn)的配置,沒(méi)有改動(dòng)的話,編譯后系統(tǒng)會(huì)在arch/arm/boot目錄下生成一個(gè)zImage文件,這個(gè)文件就是剛剛生成的內(nèi)核文件。我們需要把它加載到開(kāi)發(fā)板中運(yùn)行,加以驗(yàn)證。

    (7)下載Linux內(nèi)核。加載到開(kāi)發(fā)板的方式是通過(guò)U-Boot提供的網(wǎng)絡(luò)功能,直接下載到開(kāi)發(fā)板的內(nèi)存中。首先把內(nèi)核復(fù)制到tftp服務(wù)器的根目錄下(見(jiàn)tftp配置文件說(shuō)明)。在我們的實(shí)驗(yàn)中,這個(gè)目錄在/tftpboot下,所以我們?cè)趦?nèi)核源碼目錄中直接執(zhí)行下面命令:

    $ cp arch/arm/boot/zImage /tftpboot

    啟動(dòng)開(kāi)發(fā)板,在U-Boot界面下輸入下面一組命令:

    FS2410# printenv (查看當(dāng)前開(kāi)發(fā)板的環(huán)境變量)
    FS2410# setenv ipaddr 192.168.1.134 (設(shè)置開(kāi)發(fā)板的IP地址為192.168.1.134)
    FS2410# setenv serverip 192.168.1.23 (設(shè)置開(kāi)發(fā)主機(jī)的IP地址為192.168.1.23)
    FS2410# setenv bootargs console=ttySAC0,115200 (設(shè)置終端為串口1,波特率115200)
    FS2410# saveenv (保存環(huán)境變量)
    FS2410# ping 192.168.1.23 (測(cè)試網(wǎng)絡(luò)是否暢通)

    如果網(wǎng)絡(luò)暢通,執(zhí)行下面的命令下載內(nèi)核:

    FS2410#tftp 30008000 zImage (把Linux內(nèi)核下載到開(kāi)發(fā)板內(nèi)存的30008000地址處)
    FS2410#go 30008000 (啟動(dòng)內(nèi)核)

    此時(shí)可以在超級(jí)終端中觀察到內(nèi)核的啟動(dòng)現(xiàn)象,不過(guò)內(nèi)核在此時(shí)還不會(huì)成功啟動(dòng),因?yàn)檫需要做一些其他的移植工作。

    本文選自華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)教材《從實(shí)踐中學(xué)嵌入式Linux應(yīng)用程序開(kāi)發(fā)》

   熱點(diǎn)鏈接:

   1、Linux內(nèi)核結(jié)構(gòu)介紹
   2、Linux內(nèi)核主要功能介紹
   3、Linux內(nèi)核模塊程序結(jié)構(gòu)
   4、如何分析Linux內(nèi)核源碼
   5、嵌入式linux內(nèi)核的五個(gè)子系統(tǒng)

更多新聞>>