本次我们将对
Nano Pi Neo
烧写U-Boot
,从而可以实现从U-Boot
中加载liteos
,为调试启动鸿蒙系统做准备。
This time we will programU-Boot
toNano Pi Neo
, so as to loadliteos
fromU-Boot
to prepare for starting the Harmony-OS.
从友坚科技的wiki上,可以找到给Nano Pi烧写U-Boot的方法,http://wiki.friendlyarm.com/wiki/index.php/Building_U-boot_and_Linux_for_H5/H3/H2%2B。方法比较简单,这里简单说一下。
1. 下载安装工具链
下载地址为http://download.friendlyarm.com/nanopineo,建议有翻墙条件的尽量选择Google Driver,下载速度很快。
$ mkdir -p /opt/FriendlyARM/toolchain
$ tar xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/
将工具链路径加入到PATH
路径中。
$ export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
$ export GCC_COLORS=auto
然后检查工具链有没有生效即可,如下即为生效。
root@64e544eabbc1:~# 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-gnueabi hf --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-ar ch=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_at exit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/bu ild/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-l inux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/bu ildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynam ic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/Friend lyARM/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)
root@64e544eabbc1:~#
2. 下载U-Boot
从github上下载全志公司修改好的U-Boot。如果下载比较慢,可以直接下载分支的压缩包。
git clone https://github.com/friendlyarm/u-boot.git -b sunxi-v2017.x --depth 1
3. 编译U-Boot
$ apt-get install swig python-dev python3-dev
$ make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
$ make ARCH=arm CROSS_COMPILE=arm-linux-
正常编译一般都能编译过,但是我这边编译的时候遇到了点问题,编译错误提示:
LD spl/lib/built-in.o
LD spl/common/spl/built-in.o
LD spl/u-boot-spl
OBJCOPY spl/u-boot-spl-nodtb.bin
COPY spl/u-boot-spl.bin
MKSUNXI spl/sunxi-spl.bin
BINMAN u-boot-sunxi-with-spl.bin
Traceback (most recent call last):
File "./tools/binman/binman", line 31, in <module>
import control
File "/root/u-boot-sunxi-v2017.x/tools/binman/control.py", line 15, in <module>
import fdt
File "/root/u-boot-sunxi-v2017.x/tools/binman/../dtoc/fdt.py", line 13, in <module>
import libfdt
File "scripts/dtc/pylibfdt/libfdt.py", line 15, in <module>
import _libfdt
ImportError: No module named _libfdt
make: *** [Makefile:1150: u-boot-sunxi-with-spl.bin] Error 1
root@64e544eabbc1:~/u-boot-sunxi-v2017.x#
上面这个错误跟环境中的python版本有关,编译U-Boot需要使用python2的版本,但是我的环境里默认用的python3。所以需要使用虚拟环境。执行以下命令切换成python2.7环境,重新编译即可。没有的安装包需要进行安装。
root@64e544eabbc1:~/u-boot-sunxi-v2017.x# virtualenv -p /usr/bin/python2.7 my_uboot
created virtual environment CPython2.7.18.final.0-64 in 2751ms
creator CPython2Posix(dest=/root/u-boot-sunxi-v2017.x/my_uboot, clear=False, global=False)
seeder FromAppData(download=False, pep517=latest, pip=latest, wheel=latest, progress=latest, idna=latest, distlib=latest, html5lib=latest, six=latest, chardet=late st, appdirs=latest, setuptools=latest, lockfile=latest, webencodings=latest, retrying=latest, pyparsing=latest, ipaddr=latest, contextlib2=latest, colorama=latest, m sgpack=latest, packaging=latest, pytoml=latest, requests=latest, distro=latest, certifi=latest, pkg_resources=latest, CacheControl=latest, urllib3=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1.debian)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator
root@64e544eabbc1:~/u-boot-sunxi-v2017.x# source my_uboot/bin/activate
(my_uboot) root@64e544eabbc1:~/u-boot-sunxi-v2017.x#
编译OK的U-Boot如下,名称为u-boot-sunxi-with-spl.bin。
4. 向SD卡烧写U-Boot
这一步也比较简单,需要在Linux环境下进行。比如在我的Linux环境下,插入SD卡后,将在/dev目录下看到SD卡设备为/dev/sdb
,共有3个分区。
root@ubuntu:~/uboot# ls -l /dev/sdb
sdb sdb1 sdb2 sdb3
我们需要执行以下命令将U-Boot烧写至SD卡最开始偏移8K的地方,至于为什么要偏移8K,可以参见http://wiki.friendlyarm.com/wiki/index.php/How_to_make_your_own_SD-bootable_ROM。
$ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
$ sync && eject /dev/sdX
5. 启动U-Boot。
将烧写完u-Boot的SD卡插回Nano Pi,然后连接好串口,打开串口显示软件,最后给设备上电,我们可以看到U-Boot的启动打印。
当然,此时除了U-Boot,设备上啥程序也没有,但是为之后启动内核做了环境准备。