【NanoPi T2】 2.uboot 离线烧录(S5P4418)


前一阵想在nanopi t2的uboot上添加网卡驱动来加载内核开发驱动,结果无奈编译出来的uboot没办法烧录运行。官方制作SD镜像的工具也是缺胳膊少腿的,并且我也不想玩个uboot做个几G的镜像。官方提供的资料实在太少,对于一个爱折腾的人来说这怎么行呢,于是乎就有了下面这边文章。

通过对nanopi官方提供的uboot2016.1 一阵子的研究终于弄清楚了最新版本uboot的内存分布,实现了编译烧写到SD卡运行。

新版本的uboot跟以前的版本有很大的不同,uboot的内容和内存分布跟之前不一样了,之前的布局:传送门

1.2016版uboot内存布局

现在的内存布局及内容大致猜测如下:

块地址 内容
Block 0 Sd/emmc卡信息
Block1 Nsih.bin
Block2-BlocK3841 2ndboot.bin
Block3842-BlockXX u-boot.bin

以上除了可以确定u-boot的位置无误以外其他的纯属猜测,目前还没心思钻研汇编代码的含义,2nboot部分都是不开源的,现在搞得这么大也不知道在做什么。确定了u-boot.bin的位置之后就可以动手了。

2.离线烧录步骤

1.下载uboot最新源码:
git clone https://github.com/friendlyarm/u-boot.git
git checkout nanopi2-v2016.01

2.编译前的准备:

官方传送门

3.配置uboot

导出默认配置:

make s5p4418_nanopi2_defconfig

添加自定义配置:

make menuconfig

编译:

make -j16 CROSS_COMPILE=arm-linux-

4.烧录镜像

编译会获得u-boot.bin和bootloader.img
编译结果
bootloader.img是写入Nish参数以及签了名的uboot,这个才是可以直接用来烧录的uboot,可以看到最后编译完有句提示:
编译信息
最后一行提示我们bootloader的生成跟tools/nexell/nish/nanopi2.txt有关,nanopi2.txt就是配置了一些启动代码和参数,其中就包括uboot的加载地址加载大小,启动地址等等。
在这里插入图片描述
格式的含义如下:

<值> // <写入镜像的地址> : <注释>

通过查看bootloader.img的二进制发现确实如此
在这里插入图片描述
最后只需要提取官方镜像中的前3841个块接上编译输出的bootloader.img就可以了,刷写脚本代码:

sudo dd if=bootloader.img of=uboot2016.bin bs=512 seek=3841
sudo dd if=uboot2016.bin of=/dev/sdx

整个文件大小4M不到,下面就可以愉快的挂接NFS和网络加载内核了

3.附上资源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章