JZ2440移植UBOOT 2012.04.1

本文记录了JZ2440移植UBOOT 2012.04.1的过程,包括分析启动流程、添加2440单板支持、配置NOR/NAND启动、DM9000网卡支持、环境变量设置、YAFFS烧写等。同时对比了与韦东山老师移植的区别,并分享了移植中遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

前言

在前面,了解了Bootloader的作用以及从0写一个Bootloader之后,最近花了差不多一个星期学习韦东山老师的JZ2440移植UBOOT 2012.04.1,看了视频和参考博客园NQian的博客进行学习。我制作的最新补丁:https://github.com/sanjaywu/UBOOT_2012.04.1_JZ2440_patch


一、JZ2440移植UBOOT 2012.04.1笔记

以下笔记全部来自博客园NQian的笔记,讲得非常详细,我也是参照他的博客进行学习的,收益很大,点击跳转可以直接到他的博客看。

1.移植uboot-分析uboot启动流程(详解)
2.移植uboot-添加2440单板,并实现NOR、NAND启动
3.移植uboot-使板卡支持nor、nand
4.移植uboot-使uboot支持DM9000网卡
5.移植uboot-设置默认环境变量,裁剪,并分区
6.移植uboot-支持yaffs烧写,打补丁

二、和韦东山老师移植存在的区别

我是参考博客园NQian的笔记进行学习,里面主要的不同是在调用第2阶段的代码relocate_code的处理上有些不一样以及重新设置栈。

1、韦东山老师的处理方法

(1)、在board.c中修改函数board_init_f,将该函数改为有返回值,修改函数为:unsigned int board_init_f(ulong bootflag),用于返回id(存放 gd_t结构体的首地址)。


(2)、将board_init_f函数后面的relocate_code(addr_sp, id, addr);注释去掉。


(3)、在include\common.h里面把void board_init_f (ulong) __attribute__ ((noreturn));改为unsigned int board_init_f(ulong bootflag)


(4)、根据前面三个步骤,再来调用第二阶段代码board_init_r,代码如下:

/* Set stackpointer in internal RAM to call board_init_f */
call_board_init_f:
	ldr	r0,=0x00000000
	bl	board_init_f

	/* unsigned int的值存在r0里, 正好给board_init_r */
	ldr r1, _TEXT_BASE
	ldr sp, base_sp 			/* 重新设置栈 */

	/* 调用第2阶段的代码 */
	bl board_init_r

(5)、base_sp定义如下:

/* IRQ stack memory (calculated at run-time) + 8 bytes */
.globl IRQ_STACK_START_IN
IRQ_STACK_START_IN:
	.word	0x0badc0de

后面添加:

.globl base_sp
base_sp:
	.long 0

(6)把relocate_code全部去掉:

/*
 * void relocate_code (addr_sp, gd, addr_moni)
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值