1. 程式人生 > >NanoPi M2編譯Debian步驟詳解

NanoPi M2編譯Debian步驟詳解

為Nanopi編譯debian系統的方法在官方的手冊上已經有詳細的介紹,但從linux新手的角度,不僅應該會編譯,還可以嘗試下理解其每一步的含義。

環境與準備:
1、Ubuntu kylin 16.0(64位!!!
2、Git
3、https://github.com/friendlyarm中的各個檔案

零、安裝git
如果小夥伴完全是新手,剛剛安裝好烏班圖,為了日後方便可以先安裝Git。

首先在Ubuntu下開啟終端(ctrl+alt+t),輸入以下程式碼:
sudo apt-get install git-core
然後輸入使用者密碼以及輸入“y”回車後,靜候git安裝完成。sudo:以超級使用者許可權執行

apt-get install:從軟體源安裝

一、安裝交叉編譯鏈
編譯系統實際上是將相關的原始碼(如uboot、linux核心)轉換為可執行的檔案。
交叉編譯:是A機器(我們的電腦)上編譯生成,執行在B機器(Nanopi)上。兩個機子有不同的機器指令。
工具鏈:一般由編譯器、聯結器、直譯器和偵錯程式組成。

首先在Ubuntu(有圖形介面的)下開啟終端(ctrl+alt+t),輸入以下程式碼獲得交叉編譯鏈。不過過程可能比較漫長。如果小夥伴還沒有完全脫離Windows以及圖形介面,可以直接使用瀏覽器前往該頁面使用迅雷等工具下載。
git clone https://github.com/friendlyarm/prebuilts.git
在檔案所在的目錄(使用git方法的繼續在終端輸入命令;使用迅雷等工具的到存放檔案的位置開啟終端並輸入命令):
sudo mkdir -p /opt/FriendlyARM/toolchain
mkdir:建立一個目錄(相當於windows的一個資料夾)

-p:mkdir的引數,意思為建立上層目錄
/opt/FriendlyARM/toolchain:新建立的目錄的路徑
接著輸入(注意這是一行命令而不是兩行
sudo tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/
tar:解壓,因為下載回來的是壓縮包

prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz:被解壓檔案的路徑
-C:引數,意思是改變解壓後的路徑
/opt/FriendlyARM/toolchain/:解壓後的檔案路徑

然後將編譯器的路徑加入到PATH中,方法如下:
使用nano文字編輯器編輯.bashrc
nano ~/.bashrc
PATH:環境變數。linux在執行程式時會在path中尋找需要編譯鏈。
.bashrc:這個檔案主要儲存個人的一些個性化設定,如命令別名、路徑等。
在檔案的末尾(拼命按page down或者下游標)加入以下內容:

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto
export:設定或顯示環境變數。(比如我們要用一個命令,但這個命令的執行檔案不在當前目錄,這樣我們每次用的時候必須指定執行檔案的目錄。若在程式碼中先執行export,則相當於告訴程式,執行某某東西時,需要的檔案或什麼東東在這些目錄裡)
/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH:編譯工具所在的目錄

按組合鍵ctrl+o儲存,按組合鍵ctrl+z退出nano。

執行一下~/.bashrc指令碼讓設定立即在當前shell視窗中生效,注意"."後面有個空格:
. ~/.bashrc
接著檢查是否安裝成功:
arm-linux-gcc -v
若顯示如下則為安裝成功:
Using built-in specs.
COLLECT_GCC=arm-linux-gcc
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/4.9.3/libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper
Target: arm-cortexa9-linux-gnueabihf
Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long
Thread model: posix
gcc version 4.9.3 (ctng-1.21.0-229g-FA)

二、編譯u-boot首先下載u-boot原始碼,兩種方法參考上文,這裡就不重複了。
git clone https://github.com/friendlyarm/uboot_nanopi2.git
然後進入剛剛下載的檔案的目錄:
cd uboot_nanopi2
cd:改變當前目錄uboot_nanopi2:進入的目錄接著切換git的分支(使用迅雷下載的不需要此步)
git checkout nanopi2-lollipop-mr1
git checkout:更改分支。這裡涉及到git的使用方法,簡而言之就是git這個版本控制工具允許使用者“克隆”出許多份相同的程式碼,各自修改各自的程式碼,在需要的時候再把各個分支合併起來。編譯u-boot並靜候其完成:
make s5p4418_nanopi2_config
make CROSS_COMPILE=arm-linux-
makemake 是一個命令工具,它解釋 Makefile 中的指令(應該說是規則)。在 Makefile檔案中描述了整個工程所有檔案的編譯順序、編譯規則。
三:編譯核心
安裝mkimage:
sudo apt-get install u-boot-tools
mkimage:mkimage是一個在u-boot中的工具,可以用來製作各種映像檔案(.img)。
下載核心原始碼,這裡就不贅述了:
git clone https://github.com/friendlyarm/linux-3.4.y.git
cd linux-3.4.y
git checkout nanopi2-lollipop-mr1
開始編譯:
make nanopi2_linux_defconfig

建立檔案:
touch .scmversion
touch:如果fileA存在,使用touch指令可更改這個檔案或目錄的日期時間,包括存取時間和更改時間;
如果fileA不存在,touch指令會在當前目錄下新建一個空白檔案fileA。編譯核心:
make uImage
編譯成功結束後,新生成的核心燒寫檔案為 arch/arm/boot/uImage。

若要更改核心或者編譯其他核心就要各位小夥伴自行探索了。筆者也是新手,望各位大牛提出寶貴建議或意見,O(∩_∩)O謝謝