Raspberry 編譯環境設置

Raspberry 2買回來吃了半年灰,慚愧,記錄一下最初的經歷。

首先從github上clone源碼和工具,過程省略,速度比較慢,大概一晚上。

簡單介紹一下git的常用操作:
使用git clone從遠程服務器下載代碼;
查看所有分支 $git branch -a 包括本地的和遠程服務器的;
刪除分支 $git branch –d/-D branch-name
例如刪除名爲”-r”的分支:git branch -D '-r'

獲取遠程分支的操作:
首先查看所有分支 $ git branch –a
查看本地分支 $ git branch
最後獲取遠程分支 $ git checkout -b new_branch remote_branch ,其中new_branch是本地分支名稱,remote_branch是將要獲取的遠程分支名稱,例如: $ git checkout –b rpi-3.18.y origin/rpi-3.18.y

切換分支使用:git checkout <branch_name>

$ git checkout rpi-3.18.y
Switched to branch 'rpi-3.18.y'

使用 $git fetch git://github.com/raspberrypi/linux.git 更新代碼,需要在本地倉庫的目錄下執行,如果在其它目錄下會出現以下錯誤提示:

fatal: Not a git repository (or any parent up to mount parent )
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

設置raspberry使用的交叉編譯工具

官方提供的編譯工具中包含三套工具鏈

arm-bcm2708hardfp-linux-gnueabi
arm-bcm2708-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian

這裏使用第一種交叉編譯工具

首先打開~/.bashrc文件(~符號表示HOME路徑,.bashrc爲隱藏文件)

zfchen@zfchen-E440:~$ sudo gedit ~/.bashrc

然後在文件的最後面添加交叉編譯工具的路徑,如下:

export PATH=$PATH:/home/zfchen/my_repository/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin

保存並退出文件,接下來需要更新當前控制檯所包含的環境變量(使上面添加的path生效),有兩種方法:

  1. 執行以下命令 source .bashrc
  2. 重新登錄系統(不必重啓機器, “開始->logout” 即可),使以上設置生效。(登陸linux,啓動bash時,首先會去讀取~/.bash_profile文件,這樣~/.bashrc也就得到執行了,你的個性化設置也就生效了。)

然後使用 arm-bcm2708hardfp-linux-gnueabi-cc -v 命令來測試交叉編譯工具的路徑是否設置成功。

zfchen@zfchen-E440:/$ arm-bcm2708hardfp-linux-gnueabi-cc -v
Using built-in specs.
COLLECT_GCC=arm-bcm2708hardfp-linux-gnueabi-cc
COLLECT_LTO_WRAPPER=/home/zfchen/my_repository/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/...
Target: arm-bcm2708hardfp-linux-gnueabi
Configured with: /home/extra/crosstool/staginghf/.build/src/gcc-linaro-4.7-2012.04/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-bcm2708hardfp-linux-gnueabi --prefix=/home/dc4/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi --with-sysroot=/home/dc4/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot --enable-languages=c,c++ --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-float=hard --with-pkgversion='crosstool-NG 1.15.2' --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-mpfr=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-mpc=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-ppl=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-cloog=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-libelf=/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm -L/home/extra/crosstool/staginghf/.build/arm-bcm2708hardfp-linux-gnueabi/buildtools/lib -lpwl' --enable-threads=posix --enable-target-optspace --disable-nls --disable-multilib --with-local-prefix=/home/dc4/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot --enable-c99 --enable-long-long --with-float=hard
Thread model: posix
gcc version 4.7.1 20120402 (prerelease) (crosstool-NG 1.15.2) 

PS:在用戶模式下設置的.bashrc環境變量只對當前用戶有效(如果root直接運行arm-bcm2708hardfp-linux-gnueabi-cc -v,則會提示“命令未找到”)。

編譯內核

(1)首先生成配置文件

$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- menuconfig

我嘗試過的不同分支如下:
// rpi-3.18.y分支的內核版本爲Linux/arm 3.18.16 Kernel
// rpi-3.18.y-rebase分支的內核版本爲Linux/arm 3.18.9 Kernel Configuration

(2)編譯內核

$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

編譯結果如下,說明成功

... ...
  AS      arch/arm/boot/compressed/ashldi3.o
  SHIPPED arch/arm/boot/compressed/bswapsdi2.S
  AS      arch/arm/boot/compressed/bswapsdi2.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

第一次make menuconfig時出錯:

zfchen@zfchen-E440:~/my_repository/linux$ make menuconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/mconf.o
In file included from scripts/kconfig/mconf.c:23:0:
scripts/kconfig/lxdialog/dialog.h:38:20: 致命錯誤:curses.h:沒有那個文件或目錄編譯中斷。

原因:宿主機ubuntu系統中缺少一個套件 ncurses devel
解決方法,安裝ncurses

$ sudo apt-get install libncurses5-dev

(注意:內核配置不對也會導致編譯過程出錯,例如“提示缺少XX文件”)

對於raspberry 2B,執行如下操作:

$ cp arch/arm/boot/zImage /boot/kernel7.img

(raspberry pi A/B/B+ 需要用imagetool-uncompressed.py工具生成*.img文件)

(3)提取modules

$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- modules_install INSTALL_MOD_PATH=../modules
發佈了37 篇原創文章 · 獲贊 22 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章