如何編譯樹莓派核心

Andy Yang發表於2014-04-18

老實說,對於從來沒有用過玩過Linux(甚至沒有基本的Linux管理經驗)的我來說,編譯核心實在是一個比較挑戰的事情。

不過結果還是好的,最終完成了一次完整的編譯,在這裡記錄一下(參考網頁在這裡這裡

 

主要步驟如下

  1. 虛機:[可選]新建交叉編譯平臺
  2. 下載:原始碼、編譯器、韌體檔案和一些關聯工具
  3. 編譯:核心、模組
  4. 拷貝:將生成的各種檔案替換原樹莓派系統的檔案

 

  1. 虛機

樹莓派上編譯核心實在是太慢,所以重灌了一個Ubuntu的虛擬機器,虛擬機器的安裝可以參考這裡

同時為了後續拷貝檔案的方便,需要安裝SSH服務,可以參考這裡

-install ssh services

sudo apt-get install openssh-server openssh-client

sudo gedit /etc/ssh/sshd_config

sudo /etc/init.d/ssh stop

sudo /etc/init.d/ssh start

sudo /etc/init.d/ssh restart

-examples:

ssh localhost

ssh user@your-server-ip-address

ssh vivek@userver.mydomain.com

 

  1. 下載

在虛擬機器中新建目錄後,分別下載韌體,原始碼,編譯器(分別新建指定的資料夾)

mkdir rasperberrypi

cd raspberrypi

git clone git://github.com/raspberrypi/firmware.git PRiFirmware

git clone git://github.com/raspberrypi/linux.git RpiLinux

git clone git://github.com/raspberrypi/tools.git RpiTools

 

不過,如果在虛擬機器中下載太慢也可以在主機中使用下載工具下載,例如使用以下地址下載3.6版本的核心

 

對於虛擬機器和樹莓派中的檔案操作,對於我來說,推薦使用Win SCP,點選這裡下載

 

如果網路環境需要代理,虛擬機器中可以如下設定

sudo nano /etc/apt/apt.conf

Acquire::http::Proxy "http://web-proxy.corp.company.com:8080";

 

  1. 編譯

以下操作都在root使用者下執行

 

使用Win SCP遞迴的方式將原始碼資料夾的執行屬性新增上

 

清空原先的配置資訊

make mrproper

cd /home/andy/raspberrypi/RpiLinux/

 

新增兩個環境變數

export KERNEL_SRC=/home/andy/raspberrypi/RpiLinux/

export CCPREFIX=/home/andy/raspberrypi/RpiTools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-

 

匯出樹莓派上的配置資訊,並拷貝到核心原始碼的根目錄

zcat /proc/config.gz > .config

 

在此基礎上設定一次樹莓派的配置資訊(如果不明白意義,直接回車保留預設值即可)

apt-get install libncurses5-dev

ARCH=arm CROSS_COMPILE=${CCPREFIX} make oldconfig

 

對配置還可以進行微調

ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig

 

開始編譯核心,如果CPU多核,可以新增-j引數(數字為核心數+1)

ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5

 

如果需要詳細的日誌

ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5 &>log

--undefined reference to 'sin'; add '-lm' to make file command line

 

編譯模組

ARCH=arm CROSS_COMPILE=${CCPREFIX} make modules

 

  1. 拷貝

生成核心檔案,並拷貝到樹莓派根目錄的boot資料夾

cd /home/andy/raspberrypi/RpiTools/mkimage

./imagetool-uncompressed.py /home/andy/raspberrypi/RpiLinux/arch/arm/boot/zImage

copy .img to RPI's boot folder

 

生成模組檔案,並將這些檔案覆蓋掉樹莓派的/boot/lib資料夾下的檔案

export MODULES_TEMP=~/modules

ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} make modules_install

copy and overwrite files from lib to RPI's /root/lib

 

拷貝下載的韌體包firmware/boot中檔案,替換樹莓派中boot資料夾下的檔案

bootcode.bin

fixup.dat

start.elf

copy and overwrite files from firmware/boot to RPI's boot folder

 

拷貝下載的韌體包firmware/hardfp/opt/中VC資料夾,覆蓋樹莓派的boot/opt/VC資料夾

VC

copy and overwirte folder from firmware/hardfp/opt/ to RPI's boot opt folder

 

結束

重啟樹莓派,輸入uname –a命令就可以看到編譯後核心的版本(我的是越變越小,呵呵呵)

原來的版本

現在的版本

 

Andy Yang

2014-4-18

相關文章