老實說,對於從來沒有用過玩過Linux(甚至沒有基本的Linux管理經驗)的我來說,編譯核心實在是一個比較挑戰的事情。
不過結果還是好的,最終完成了一次完整的編譯,在這裡記錄一下(參考網頁在這裡和這裡)
主要步驟如下
- 虛機:[可選]新建交叉編譯平臺
- 下載:原始碼、編譯器、韌體檔案和一些關聯工具
- 編譯:核心、模組
- 拷貝:將生成的各種檔案替換原樹莓派系統的檔案
- 虛機
樹莓派上編譯核心實在是太慢,所以重灌了一個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 |
- 下載
在虛擬機器中新建目錄後,分別下載韌體,原始碼,編譯器(分別新建指定的資料夾)
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版本的核心
https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz tar zxvf linux-rpi-3.6.y.tar.gz |
對於虛擬機器和樹莓派中的檔案操作,對於我來說,推薦使用Win SCP,點選這裡下載
如果網路環境需要代理,虛擬機器中可以如下設定
sudo nano /etc/apt/apt.conf Acquire::http::Proxy "http://web-proxy.corp.company.com:8080"; |
- 編譯
以下操作都在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 |
- 拷貝
生成核心檔案,並拷貝到樹莓派根目錄的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