老實說,對於歷來沒有用過玩過Linux(甚至沒有基本的Linux管理經驗)的我來講,編譯內核實在是一個比較挑戰的事情。 php
不過結果仍是好的,最終完成了一次完整的編譯,在這裏記錄一下(參考網頁在這裏和這裏) html
主要步驟以下 linux
樹莓派上編譯內核實在是太慢,因此重裝了一個Ubuntu的虛擬機,虛擬機的安裝能夠參考這裏 git
同時爲了後續拷貝文件的方便,須要安裝SSH服務,能夠參考這裏 github
-install ssh services web sudo apt-get install openssh-server openssh-client 網絡 sudo gedit /etc/ssh/sshd_config dom sudo /etc/init.d/ssh stop ssh 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