文档章节

友善之臂最新版mini2440学习笔记——u-boot 1.1.6移植(一)

zhaowei09
 zhaowei09
发布于 2016/05/30 21:37
字数 1079
阅读 11
收藏 0
点赞 0
评论 0

从本文开始,将记录博主在进行u-boot 1.1.6移植过程中遇到的问题。本文将涉及两个问题:

1. u-boot中添加开发板

2. u-boot第一阶段启动代码

1. u-boot中添加开发板

1.1. Makefile更改

1.1.1. 增加反汇编文件输出

Makefile文件中239行,源文件为:

ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)

更改为:

ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(obj)u-boot.dis $(U_BOOT_NAND)

1.1.2. 添加开发板

Makefile文件1879行,按照smdk2410的形式,添加mini2440开发板配置如下:

mini2440_config	:	unconfig
	@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

1.1.3. 自动清理时删除反汇编文件

Makefile文件2293行,源文件为:

rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)

修改为:

rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(obj)u-boot.dis $(ALL)

1.2. 添加头文件

在include/configs/目录下添加mini2440.h文件。可以直接拷贝一份smdk2410.h文件。

1.3. 添加核心版文件

在board/目录下添加mini2440目录。可直接拷贝smdk2410文件夹即可。

1.4. 小结

自此,mini2440开发板已经添加到u-boot 1.1.6中。可直接执行如下命令生成u-boot.bin文件

make mini2440_config

make

但这个u-boot.bin文件并无法启动,需要修改相关代码进行移植。


2. U-boot第一阶段启动代码移植

mini2440的SOC为S3C2440,它的CPU为一个ARM920t的核,因此u-boot第一阶段启动代码就是cpu/arm920t/start.S文件。

2.1. 关闭看门狗和中断服务

S3C2440的看门狗和S3C2410一样,因此在start.S文件进行如下修改:

124行源代码:

#elif defined(CONFIG_S3C2410)
# define pWTCON		0x53000000
# define INTMSK		0x4A000008	/* Interupt-Controller base addresses */
# define INTSUBMSK	0x4A00001C
# define CLKDIVN        0x4C000014    /* clock divisor register */

更改为:

#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
# define pWTCON		0x53000000	/* watchdog register address */
# define INTMSK		0x4A000008	/* interrupt mask register address */
# define INTSUBMSK	0x4A00001C	/* interrupt sub-mask register address */
# define CLKDIVN	0x4C000014	/* clock divisor register */

131行源代码:

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
	ldr     r0, =pWTCON
	mov     r1, #0x0
	str     r1, [r0]

更改为:

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
    ldr     r0, =pWTCON
    mov     r1, #0x0
    str     r1, [r0]

142行源代码:

# if defined(CONFIG_S3C2410)
	ldr	r1, =0x3ff
	ldr	r0, =INTSUBMSK
	str	r1, [r0]

之后添加部分代码,变为:

# if defined(CONFIG_S3C2410)
	ldr	r1, =0x3ff
	ldr	r0, =INTSUBMSK
	str	r1, [r0]
#elif defined(CONFIG_S3C2440)
	ldr	r1, =0x7FFF
	ldr	r0, =INTSUBMSK
	str	r1, [r0]

2.2. 设置MPLL和UPLL

源代码中,找到:

/* FCLK:HCLK:PCLK = 1:2:4 */
	/* default FCLK is 120 MHz ! */
	ldr	r0, =CLKDIVN
	mov	r1, #3
	str	r1, [r0]

更改为:

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
	/* FCLK:HCLK:PCLK = 1:2:4 */
	/* default FCLK is 120 MHz ! */
	ldr	r0, =CLKDIVN
	mov	r1, #3
	str	r1, [r0]
#elif defined(CONFIG_S3C2440)
# define MPLLCON	0x4C000004
# define UPLLCON	0x4C000008
	ldr	r0, =CLKDIVN
	ldr	r1, =0x5		/* FCLK:HCLK:PCLK = 1:4:8 */
	str	r1, [r0]
	ldr	r0, =MPLLCON
	ldr	r1, =0x5C011		/* MPLL=400MHz */
	str	r1, [r0]
	ldr	r0, =UPLLCON
	ldr	r1, =0x38022		/* UPLL=48MHz */
	str	r1, [r0]
	/* configure S3C2440 to asynchronous bus mode */
	mrc	p15, 0, r1, c1, c0, 0
	orr	r1, r1, #0xc0000000
	mcr	p15, 0, r1, c1, c0, 0
#endif

2.3. 添加NAND启动代码

u-boot的smdk2410代码中默认为NOR启动,这里需要自行添加NAND启动代码。

找到源文件中NOR启动部分代码:

#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate:				/* relocate U-Boot to RAM	    */
	adr	r0, _start		/* r0 <- current position of code   */
	ldr	r1, _TEXT_BASE		/* test if we run from flash or RAM */
	cmp     r0, r1                  /* don't reloc during debug         */
	beq     stack_setup

	ldr	r2, _armboot_start
	ldr	r3, _bss_start
	sub	r2, r3, r2		/* r2 <- size of armboot            */
	add	r2, r0, r2		/* r2 <- source end address         */

copy_loop:
	ldmia	r0!, {r3-r10}		/* copy from source address [r0]    */
	stmia	r1!, {r3-r10}		/* copy to   target address [r1]    */
	cmp	r0, r2			/* until source end addreee [r2]    */
	ble	copy_loop
#endif	/* CONFIG_SKIP_RELOCATE_UBOOT */

更改为:

#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate:				/* relocate U-Boot to RAM	    */
	adr	r0, _start		/* r0 <- current position of code   */
	ldr	r1, _TEXT_BASE		/* test if we run from flash or RAM */
	cmp     r0, r1                  /* don't reloc during debug         */
	beq     stack_setup
#if defined(CONFIG_NOR_BOOT)
	ldr	r2, _armboot_start
	ldr	r3, _bss_start
	sub	r2, r3, r2		/* r2 <- size of armboot            */
	add	r2, r0, r2		/* r2 <- source end address         */
copy_loop:
	ldmia	r0!, {r3-r10}		/* copy from source address [r0]    */
	stmia	r1!, {r3-r10}		/* copy to target address [r1]      */
	cmp	r0, r2			/* until source end addreee [r2]    */
	ble	copy_loop
#elif defined(CONFIG_NAND_BOOT)
	ldr	sp, =0x1000		/* setup stack to 4k temporarily to call the c function nand_read_ll*/
	bl	nand_init_ll		/* initialize nand flash */
	ldr	r0, _TEXT_BASE		/* destination for u-boot relocation */
	ldr	r1, =0x0		/* source address in NAND */
	ldr	r2, =0x40000		/* length to read from NAND to SDRAM, 256K */
	bl	nand_read_ll		/* call nand_read_ll to relocate u-boot */
#endif
#endif	/* CONFIG_SKIP_RELOCATE_UBOOT */

2.4. 小结

到此为止,start.S的所有代码均已修改完毕。

3. 说明

最后一部分涉及到nand_init_ll和nand_read_ll两个函数,网上关于NAND启动中使用的这两个C代码有很多,但博主下载之后均报错。最后横下一条心,根据韦东山大神的NAND裸机程序修改了一版,效果不错。

下一篇博文将对这两个函数及相关设置进行充分说明。



© 著作权归作者所有

共有 人打赏支持
zhaowei09
粉丝 0
博文 7
码字总数 45754
作品 0
长沙
程序员
Mini2440上的第一个程序——点亮Led

手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习。 我使用的是友善之臂的Mini2440开发板、韦东山的《嵌入式Linux应用开发完成手册》及其视频教程。所以,本篇...

icuic
07/15
0
0
自己编译的QT4.6.3可以用,为什么QT4.7.1会出现段错误?

我使用的是友善之臂mini2440的开发板,移植qte时自己编译的QT4.6.3移植到开发板可以运行(友善之臂给的文件系统里就是QT4.6.3),但是又自己编译了QT4.7.1,移植到开发板上时却出现segmentatio...

tom_riddle
2014/02/16
231
0
mini2440基于uboot的TFTP下载教程

由于mini2440在WIN7上下载,USB驱动无法兼容,总是出现蓝屏重启的现象,导致不得不想其他方式来下载,首先就考虑了使用U-Boot来下载,因为它支持多种下载方式: 1. 使用串口下载,它支持ker...

FGQ
2013/01/12
0
0
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http:...

nothingfinal
2012/06/19
0
0
对mini2440LED灯驱动开发

一直在学习友善之臂的MINI2440开发板,今天完成了,led的实验在此总结一下 1.编写驱动程序(led1.c) #include include include include include include include include...

长平狐
2012/08/28
363
0
mini210s上uboot的移植

mini210s是友善之臂公司推出的基于三星s5pv210的cortex a8 平台的开发板,其实很感谢他们对此作出的努力,才使得向我这样的穷孩子能够早些接触a8(当时买的时候不到600)。但是便宜归便宜,有...

博远
2013/05/06
0
0
pcDuino的linux的移植一

最近pcDuino官方公布了kernel源码,很是兴奋,决定开始在pcDuino上移植linux系统,有兴趣的一起讨论哈 目标: 1,移植的u-boot 2012.10 2,移植的linux内核 3,移植最小文件系统 开发环境: ...

pc朵拉
2013/07/02
0
0
U-boot在S3C2440上的移植详解(二) --- NOR FLASH 启动u-boot

4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。 通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认...

宁宁爸
2015/11/24
99
2
关于uboot在jz2440上的移植问题

由于书上的介绍与板子上不大一样,遇到很多问题,将查找到的资料综合一下,以便使用! 1)开发环境 1.开发板:勤研2440, nor flash:没移植改变nor flash前,显示Amd29LV400BB 512K,但实际...

文剑Boy
2015/03/05
0
0
用自己的Qt4程序成功取代友善自带的程序(取代的程序是start Qt4.7.0)

操作系统:fedora 17 (Linux kernel 3.3.4基于GNOME 3.4桌面环境) 开发板:友善之臂Tiny6410 V1.2 or Tiny6410SDK QTE-arm:4.7.0 Write By Kinglate 20130419 这里还是写好两个6410板子的教程...

jliangli
2013/05/15
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
2分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
2分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
2分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
8分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
8分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
24分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
32分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
52分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
137
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部