從ARM編譯Linux核心

來源:互聯網
上載者:User

核心編譯
這個文章告訴你怎樣給在目標平台上的ARM的機器上面編譯核心.
這裡是一些說明協助你理解本文中的相關的術語和約定:
* "bash$"和"bash#"是shell提示符號,不是鍵入的命令。
* "host"是你編譯ARM核心的機器。
* "target"是使用你編譯的ARM核心的機器。
1.決定在哪裡編譯你的核心
首先,你需要決定你要從那裡編譯你的ARM LINUX
核心。一個比較好的位置就是在你的home目錄,我們在這篇文檔中使用$HOME來表示它。如果你需要使用其他位置,那麼就用相應的位置來替換$HOME變數。
然而,請注意,最好不要在/usr/src/linux中編譯核心。

2.決定核心的版本號碼
   首先,你需要決定你想要編譯哪個版本的linux核心。大多數然想要編譯最新版本的穩定核心。有一套表示版本號碼的機制,可以協助你決定識別一個特定的發行版本。
   對於任何的核心版本x.y.z,
* x -這個是主要版本號
* y -這個是次版本號碼,這裡:
偶數表示“穩定的”核心發行
奇數表示"開發"或者"beta"核心發行版本,相對來說不穩定。
* z -這是這個核心的補丁層級。
這個版本號碼表示了核心版本的主線。
寫這個文檔的時候,最新的穩定的ARM核心版本是2.6.6.

ARM核心樹中,你會發現這樣的核心版本號碼尾碼:-rmkN,或者-vrsN這裡,'N'就是發行的補丁號。例如,2.4.26-vs1。這裡表示應該使
用的主要的ARM核心補丁版本號碼。(注意,比2.6.0-test2晚的核心不需要-rmk或者-vrs補丁,因為這時候已經有了ARM體系的支援)

其他的維護者,例如Nicolas PIT
re,可能會提供額外的補丁,如果這樣那麼會增加額外的尾碼來表示他們的版本號碼。Nicolas Pitre的補丁增加的是-nl尾碼,例如2.4.21-rmk2-np1.

裡代表的意思是,2.4.21-rmk2-np1是基於2.4.21-rmk2的,而2.4.21-rmk2又基於2.4.21核心。因此,為了獲得
2.4.21-rmk2-np1核心的原始碼,你需要2.4.21主線核心的原始碼,2.4.21-rmk2補丁,以及2.4.21-rmk2-np1補
丁。
因此,如果你需要從其他維護者那的額外的補丁,你需要仔細的選擇合適的核心版本號碼。你可以首先定位維護者的補丁,然後根據版本號碼最終獲得主線核心的版本。

3.下載指定維護者的補丁
    在一些環境中,你需要使用指定的維護者的補丁來給核心打補丁。這些補丁增加了和具體機器相關的額外的特性或者裝置
驅動。(然而,一般來說,由於喜歡那些改變,維護者把他們的補丁跟蹤前面的部分到-rmk或者-vrs中???。)
對於額外的補丁資訊,請參考機器列表。

4.下載ARM補丁
(你的核心如果是在2.6.0-test2之前的版本,你才需要執行這一步,在後來的版本中沒有-rmk或者-vrs補丁。)

可能需要給某個特定的核心版本下載一個包含所有指定ARM特性的核心補丁。這些能夠在ftp://ftp.arm.linux.org.uk/pub
/armlinux/source/kernel-patches/中找到。核心的發行版本根據特定的主要版本號和此版本號碼放到特定的目錄中。
個別
的檔案被命名為:patch-x.y.z-rmkN.gz或者patch-x.y.z-vrsN.gz,這裡'x','y','z'和'N'是前面提到的
版本號碼。你應該選擇和下載最新的核心補丁到主目錄下面。這樣會具有更多的特性以及更多的bug被修改。當下載主要的核心原始碼之後,你稍後需要補丁的版
本。
注意:一些檔案被命名為類似pre-patch-x.y.z-rmkN.gz的。這些是alpha或者beta的補丁,他們對於測試一些新的想法和特性是很有用的,這樣的補丁可能是不穩定的,所以除非你確定你要用這些補丁或者你不關心平台的穩定性,否則最好不要使用它們。

意2:有些核心基於Alan
Cox系列的核心。它們的名字類似:patch-x.y.z-acm-rmkN.gz,這裡x.y.z就是Linus的版本號碼,m是Alan的版本號碼。在
這種情況下,你需要獲得Alan
Cox的相應補丁,補丁的位置在kernel.org伺服器的目錄:/pub/linux/kernel/people/alan/linux-2.4
/.

5.下載核心原始碼主線
一個補丁檔案本身並不包含任何可以編譯的代碼。它實際上就是描述了一系列檔案之間的變化(在這裡面指的是核心的原始碼)。你需要獲得主要的核心原始碼樹。
核心原始碼能夠在下面的kernel.org FTP網站找到。有許多的網站分散在世界各地。
          * ftp.uk.kernel.org
          * ftp.us.kernel.org
          * ftp.de.kernel.org
你還可以在主要站台www.kernel.org上面找到這些網站的更多的資訊。
一旦你選擇了一個網站,你需要尋找核心的原始碼。他們被存放在目錄:/pub/linux/kernel.每個核心隨著一些檔案被發行:
          * linux-x.y.z.tar.gz
          * linux-x.y.z.tar.bz2
          * patch-x.y.z.gz
          * patch-x.y.z.bz2

你將要下載linux-x.y.z.tar.gz檔案到你的主目錄。並且,你應該尋找匹配你前面獲得的補丁的版本。這些檔案比較大(14MB或者更多),所以可能會花費一些時間。

6.解壓ARM核心原始碼
使用下面的命令解壓你前面下載的原始碼:
       bash$ cd $HOME
       bash$ tar zxvf linux-x.y.z.tar.gz

這樣將會在你的home目錄下面建立一個叫做linux或者linux-x.y.z的目錄,進入那個建立立的母愛,然後應用補丁,如下:

       bash$ cd linux-2.4.26
       bash$ zcat ../patch-2.4.26-vrs1.gz | patch -p1

這些補丁具階層,所以你需要用正確的次序來應用他們。一般來說具有更多副檔名的補丁依賴於較少副檔名的補丁,例如,應用的時候,-rmk補丁可能會在-rmk-np補丁之前。
然後就可以準備配置核心原始碼樹了。

7.配置核心編譯環境
一般地,核心編譯系統為本地的體繫結構編譯核心。這在交叉編譯的時候卻是不適合的,所以你將需要修改頂級核心Makefile的兩行。檢查頂級Makefile,找到ARCH和CROSS_COMPILE的定義。在2.4.x核心中,它們看起來是這樣的:
      ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)

      [...]

      CROSS_COMPILE   =

      and on 2.6.x kernels:

      ARCH            ?= $(SUBARCH)
      CROSS_COMPILE   ?=

      Edit these two lines to read:

      ARCH  ?= arm
      CROSS_COMPILE ?= /usr/local/bin/arm-linux-

把/usr/local/bin/arm-linux-替換成你的ARM Linux工具鏈的路徑。
這樣就完成了頂級核心makefile的配置。下一步就是配置核心編譯選項,來選擇你的平台需要的驅動。
在進行之前,你可能需要閱讀linux/README和linux/Documentation/arm/README。所有這些檔案提供了更多有用的資訊,這些資訊都是和你的版本號碼的核心相關的。

8.配置核心原始碼
許多的'make'目標,這些目標允許為你編譯原始碼的特定的機器選擇一些預設的選項。在2.6核心的版本中,這個就更簡單了。
2.4核心的配置
  對於2.4核心,使用<機器名>_config格式,例如:
          * a5k_config
          * ebsa110_config
          *.NET
winder_config
          * rpc_config
          * assabet_config

      You should select one of these as the "basic" configuration as follows, and run make oldconfig immediately afterwards:

       bash$ make netwinder_config
       bash$ make oldconfig

      The oldconfig step will prompt you for any new configuration
options which may have been added since the default machine
configuration file was submitted. It is normally safe to say 'N' to
these new options.

      Note: If you want to change the configuration via make
xxx_config, please remove the file linux/.config immediately prior to
executing this command.

2.6核心的配置
對於2.6的核心,過程很簡單。使用<machinename>_defconfig來選擇機器,例如:
       bash$ make netwinder_defconfig
在這種情況下,不需要指定獨立的oldconfig步驟。

9.編譯核心原始碼:
如果你僅僅為了其他的一些程式安裝核心原始碼,那麼你已經完成了。如果你想要編譯一個新的核心,那麼鍵入如下命令:
       bash$ make clean
       bash$ make dep
       bash$ make zImage
       bash$ make modules
最後兩步命令將要實際編譯核心以及核心的模組。
注意:對於2.6核心來說,make dep的步驟實際是不需要的。

10.安裝核心
當核心被成功的編譯完了之後,你應該得到核心的鏡像了:arch/arm/boot/zImage.你下一步要做什麼,依賴於你是否進行交叉編譯。
如果你進行交叉編譯,那麼進入到"安裝交叉編譯核心"這一節。
如果你編譯是本地的編譯(例如在target上面為了target進行),那麼繼續。

11.安裝本地核心
既然你打算更新系統檔案了,那麼你需要成為root使用者,如下:
       bash$ su
       Password:
       bash#
強烈建議為你當前的核心和模組儲存一個備份。你需要做得是和機器獨立的。注意,儲存一個較好的先前的版本是很重要的,你可能需要回到原來的版本下工作。
下面是一個例子(對於2.4.3-rmk1核心):

       bash# cd /lib/modules
       bash# mv 2.4.3-rmk1 2.4.3-rmk1.old
       bash# cd /boot
       bash# mv vmlinuz vmlinuz.bak
       bash# mv System.map System.map.bak
       bash#
現在,安裝新的核心:
       bash# cd $HOME/linux
       bash# make modules_install
       bash#
這樣將會拷貝模組到/lib/modules/x.y.z目錄。下一步,安裝核心鏡像(一般是在/boot中):

       bash# cd /boot
       bash# cat $HOME/linux/arch/arm/boot/zImage >vmlinuz
       bash# cp $HOME/linux/System.map .
       bash#
注意,這裡拷貝新核心鏡像的命令是cat而不是cp.Unix
一般不會給包含0資料的檔案扇區分配檔案系統的空間,而是在檔案中建立"holes".有一些核心loader不知道檔案有holes在其中,所以使用cat保證了這不會發生。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.