IoTShare

(三)Nano Pi烧写U-Boot进行裸机编程

本次我们将对Nano Pi Neo烧写U-Boot,从而可以实现从U-Boot中加载liteos,为调试启动鸿蒙系统做准备。
This time we will program U-Boot to Nano Pi Neo, so as to load liteos from U-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。
QQ截图20201206213042.jpg

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的启动打印。
QQ截图20201206213841.jpg

当然,此时除了U-Boot,设备上啥程序也没有,但是为之后启动内核做了环境准备。

本原创文章未经允许不得转载 | 当前页面:IoTShare » (三)Nano Pi烧写U-Boot进行裸机编程

评论