4、移植UBOOT之支持nand启动

上一节:3、移植UBOOT之新建单板-时钟-SDRAM-串口

下一节:5、移植UBOOT之支持Nor Flash

0、总体流程

修改UBOOT支持NAND启动,原来的代码在链接时加了"-pie"选项, 使得u-boot.bin里多了"*(.rel*)", "*(.dynsym)",使得程序非常大,不利于从NAND启动(重定位之前的启动代码应该少于4K)

  • 1、去掉 "-pie"选项
    arch/arm/config.mk:75:LDFLAGS_u-boot += -pie 去掉这行
  • 2、参考"毕业班第1课"的start.S, init.c来修改代码
    init.c放入board/samsung/smdk2440目录, 修改Makefile
    修改CONFIG_SYS_TEXT_BASE0x33f80000
    修改start.S
  • 3、修改board_init_f, 把relocate_code去掉
  • 4、修改链接脚本: 把start.S, init.c, lowlevel.S等文件放在最前面

1、去除 -pie 编译选项

使用grep “-pie” * -nR找到:

arch/arm/config.mk:75:LDFLAGS_u-boot += -pie             // LDFLAGS: arm-linux-ld的参数

所以屏蔽arch/arm/config.mk文件的"LDFLAGS_u-boot += -pie"这行即可
在这里插入图片描述

2、修改之前写的 init.c文件

将以前写uboot里的init.c放入board/samsung/smdk2440目录;
并检查是否有同名函数名,若函数只在同文件使用,则添加static.并修改Makefile;
修改vim board/samsung/smdk2440/Makefile添加init.o
在这里插入图片描述
修改include/configs/smdk2440.h文件,将CONFIG_SYS_TEXT_BASE宏改为0x33f80000,也就是uboot重定位后的位置, 这里留了512K空间供给uboot重定位,修改完的代码如下所示。

/* NAND FLASH控制器 */
#define NFCONF (*((volatile unsigned long *)0x4E000000))
#define NFCONT (*((volatile unsigned long *)0x4E000004))
#define NFCMMD (*((volatile unsigned char *)0x4E000008))
#define NFADDR (*((volatile unsigned char *)0x4E00000C))
#define NFDATA (*((volatile unsigned char *)0x4E000010))
#define NFSTAT (*((volatile unsigned char *)0x4E000020))

/* GPIO */
#define GPHCON              (*(volatile unsigned long *)0x56000070)
#define GPHUP               (*(volatile unsigned long *)0x56000078)

/* UART registers*/
#define ULCON0              (*(volatile unsigned long *)0x50000000)
#define UCON0               (*(volatile unsigned long *)0x50000004)
#define UFCON0              (*(volatile unsigned long *)0x50000008)
#define UMCON0              (*(volatile unsigned long *)0x5000000c)
#define UTRSTAT0            (*(volatile unsigned 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值