概述
手头有一个很老的FriendlyARM Nano2410 板子,本着节约不浪费并学习的目的,尝试移植uboot和linux到此板子上,以此博文记录整个移植过程。
板子照片:
到官网上查过该板子相关资料,貌似已经被清掉,所以只能用一些类似CPU的板子资料和百度上的相关搜索结果来作为参考。
uboot基础代码
通过搜索,选取了GitLab里面的uboot稳定版本u-boot-2016.09.y作为基础代码:
https://gitlab.denx.de/u-boot/u-boot/tree/u-boot-2016.09.y
交叉编译工具链
arm交叉编译工具链:
arm-none-linux-gnueabi-gcc-4.4.3
我的编译环境是:
$ uname -a
Linux dijj-VirtualBox 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
参考smdk2410,进行拷贝修改
- 创建config文件
cp configs/smdk2410_defconfig configs/nano2410_defconfig
修改nano2410_defconfig内容 - \board\samsung\nano2410
- include\configs\nano2410.h
- arch/arm/Kconfig
- arch/arm/include/asm/mach-types.h
具体代码后面上传。
编译
1.编译命令
make nano2410_defconfig*
make
2.issues
(1) u-boot: Not enough room for program headers, try linking with -N
/home/jiujun.di/arm2410/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
/home/jiujun.di/arm2410/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ld.bfd: final link failed: Bad value
Makefile:1198: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1
Solution:
修改顶层Makefie,修改如下:
+785:LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
786:ifneq ($(CONFIG_SYS_TEXT_BASE),)
787:LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
788:endif
添加上785行就可以了
(2)
烧写
烧写S3C2410 NANDFLASH,使用的是并口jtag转接板,如下图:
从下面的网址下载H-JTAG 使用:
http://www.hjtag.com/xz.asp?typeid=21
H-JTAG V3.0.0 正式版 [2014-04-22发布]
烧写过程中遇到很多问题,现记录如下:
(1)打开H-JTAG后无法切换到LPT模式,提示“Unable to load h-jtag LPT driver,only USB mode is support ”
solution: 电脑使用的是WIN7 64位,貌似H-Jtag 对其还不支持,电脑重装了winxp系统后这个问题就没有了。
(2)unable to find target
solution:需要对LPT settings进行配置,具体配置如下:
调试
(1)uboot烧入NAND Flash后无串口打印
Root Cause:
https://www.cnblogs.com/zhyy-mango/p/9451821.html
由于该板子只有NAND flash,没有Nor Flash,而uboot只支持NorFlash启动,所以参照上面的移植过程,加入对nand启动的支持,但是启动后无串口打印。通过加入点亮led方式定位汇编代码,发现NAND flash的读操作代码有问题。
Solution:
上面参考网址里使用的是2440 cpu,在nand控制器这块跟2410有区别,多了一个寄存器,所以按照2410控制器设置下即可解决。
(2)uboot启动到 “WARNING: Caches not enabled” 停止住
Root Cause:
uboot里面有重定位操作,在做NAND启动移植代码时我添加了拷贝nand代码到0x31f00000内存位置,而uboot本身的重定位操作也是选择这个地址附近位置进行拷贝重定位,所以覆盖了一些代码。
Solution:
将TEXT_BASE 起始代码位置改为内存的低地址位置:0x30a00000,然后uboot可以正常启动工作了。
工作打印如下: