如何編譯樹莓派內核

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

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

 

主要步驟以下 linux

  1. 虛機:[可選]新建交叉編譯平臺
  2. 下載:源代碼、編譯器、固件文件和一些關聯工具
  3. 編譯:內核、模塊
  4. 拷貝:將生成的各類文件替換原樹莓派系統的文件

 

  1. 虛機

樹莓派上編譯內核實在是太慢,因此重裝了一個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

 

  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

相關文章
相關標籤/搜索