1、前言
NanoPi NEO Plus2是友善電子推出的一款非常小巧精致的開源硬件,該開源硬件的CPU是基於Allwinner公司的64位四核ARM Cortex-A53處理器H5,並且內置了六核Mail450 GPU,該開源硬件集成了1GB DDR3內存,標配8GB eMMC高速閃存,板載了WiFi藍牙模塊和以太網接口等,支持從Mico SD卡啟動運行系統。
對於該開源硬件的更多詳細信息可參考下面鏈接:
http://www.arm9.net/nanopi-neo-plus2.asp
接下來欣賞一下板子的布局圖和接口示意圖:
接下來是引腳接口圖:
更多關於NanoPi NEO Plus2開源硬件的資料,可去官方Wiki頁面查看。
2、Linux系統燒寫
先准備好一張高速的TF卡以及一個讀卡器,還有給開發板供電的電源適配器,電源需要5V/2A輸出,接下來介紹如何將官方提供的固件燒寫到TF卡里面,有兩種方法如下:
(1)Windows下使用燒寫工具
在Windows下可以使用燒寫工具Win32 Disk Imager軟件進行燒寫,先准備好友善官方提供好的固件,對其解壓,例如固件:
nanopi-neo-plus2_sd_friendlycore-xenial_4.14_arm64_20190918.img.zip
上面給出的文件是基於Ubuntu Core構建的系統固件,固件是基於Linux-4.14內核,對其固件解壓后,打開軟件進行燒寫:
在軟件上面選擇好TF卡的盤符,然后選擇要燒寫的固件,點擊Write按鈕進行燒寫:
燒寫成功后如下所示:
(2)Linux系統下使用dd命令
首先在Linux終端下解壓鏡像:
$ unzip nanopi-neo-plus2_sd_friendlycore-xenial_4.14_arm64_20190918.img.zip
將TF卡插入到Linux系統上,使用df命令查看哪些設備已經掛載:
$ df -h
由此可見插入的TF卡設備名稱為/dev/sdc1,只有一個分區,為了防止在寫入鏡像時,有其它讀取或寫入,需要將掛載的設備進行卸載:
$ umount /dev/sdc1
然后使用dd命令將鏡像進行寫入:
$ sudo dd bs=4M if=nanopi-neo-plus2_sd_friendlycore-xenial_4.14_arm64_20190918.img \
of=/dev/sdc
在上面的命令中bs代表一次寫入多大的塊,bs是blocksize的縮寫,if參數后面是鏡像的路徑,of參數后面為寫入的設備。
燒寫完成后,將產生boot分區和根文件系統分區,分區內容如下:
最后,將TF卡插入到NanoPi NEO Plus2的Mico SD卡接口,使用USB轉串口工具將開發板的Debug串口和PC的USB接口進行連接,打開串口終端軟件,將開發板進行上電登入到系統。
登入界面如下所示:
成功登入系統后,便可以進行這個小玩具的開發了。
3、開發環境搭建
(1)安裝交叉編譯工具鏈
先在官方提供的地址內下載交叉編譯工具鏈,然后解壓編譯器:
$ mkdir ~/FriendlyARM/toolchain -p $ mv gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz ~/FriendlyARM/toolchain/ $ cd ~/FriendlyARM/toolchain $ tar -xf gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz
將交叉編譯工具鏈的路徑添加到用戶的環境變量中:
$ vim ~/.bashrc
在文件最后添加如下:
使用下面的命令讓其環境變量馬上生效:
$ source ~/.bashrc
最后,查看交叉編譯工具鏈版本,檢查是否安裝成功:
$ aarch64-linux-gnu-gcc -v
輸出結果如下,說明安裝成功:
(2)編譯u-boot
在上面中,已經安裝好了交叉編譯工具鏈,接下來簡單介紹如何進行u-boot編譯:
先安裝一些軟件依賴:
$ sudo apt-get install swig python-dev python3-dev device-tree-compiler
使用git對u-boot源碼下載,並切換到對應的分支:
$ git clone git@github.com:Cqlismy/u-boot.git -b sunxi-v2017.x --depth 1
開始編譯u-boot源碼:
$ cd u-boot/ $ make nanopi_h5_defconfig CROSS_COMPILE=aarch64-linux-gnu- $ make CROSS_COMPILE=aarch64-linux-gnu-
編譯完成后輸出結果如下:
在u-boot源碼的spl目錄將生成需要的文件sunxi-spl.bin,在源碼根目錄生成u-boot.itb文件,使用dd命令可更新TF卡上的u-boot,如下:
將TF卡插入到Linux系統后,執行下面命令:
$ cd u-boot $ dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8 $ dd if=u-boot.itb of=/dev/sdX bs=1024 seek=40
對於/dev/sdX為TF卡上的啟動分區。
(3)編譯kernel:
首先下載Linux內核源碼,並切換到對應的分支:
$ git clone git@github.com:Cqlismy/linux.git -b sunxi-4.14.y --depth 1
接下來開始編譯內核源碼:
$ cd linux/ $ touch .scmversion $ make sunxi_arm64_defconfig ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
編譯成功后如下所示:
將會在源碼的arch/arm64/boot目錄下生成需要的Image鏡像文件,在arch/arm64/boot/dts/allwinner目錄下生成dtb文件。
假設TF卡的boot分區掛載在/media/SD/boot,可以使用下面命令更新鏡像文件和設備樹:
$ cd linux $ cp arch/arm64/boot/Image /media/SD/boot $ cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb /media/SD/boot
另外,假設NanoPi NEO Plus2已經通過WiFi或者以太網接口接入網絡,可以在Linux宿主機中通過scp命令進行設備樹二進制文件和內核鏡像更新:
$ cd linux $ scp arch/arm64/boot/Image root@192.168.137.162:/boot $ scp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb root@192.168.137.162:/boot
需要注意的是,在使用scp命令進行文件傳輸時,將會提示要求輸入NanoPi開發板root用戶的密碼,輸入fa,然后回車即可。
如果想編譯和更新驅動模塊的話,可以使用下面命令:
$ cd linux $ make modules ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
當TF卡的rootfs分區掛載在/media/SD/rootfs時,使用下面命令更新rootfs的驅動模塊:
$ make modules_install INSTALL_MOD_PATH=/media/SD/rootfs ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu-
4、小節
本文主要簡單地介紹了NanoPi NEO Plus2這款開源硬件,以及簡單介紹了開發這個小玩具之前所要搭建的一些開發環境。