老實說,對於從來沒有用過玩過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