u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)

新版本下载:

下面的链接提供了较新版本的源码

ver3.1源码下载: u-boot for tiny210 ver3.1

ver3.0源码下载:u-boot for tiny 210 ver3.0

ver2.2源码下载:  u-boot for tiny210 ver2.2

ver2.1源码下载:u-boot for tiny210 ver2.2

ver2.1源码下载:u-boot for tiny210 ver2.1

ver2.0源码下载:u-boot for tiny210 ver2.0

各版本修改分析链接: ver2.0    ver2.1   ver2.2  ver2.2.1  ver2.2.2  ver 3.0  ver3.1
 
tiny210的uboot是基于   linaro-2011.10 for mini210 修改实现的,在此感谢Alex Ling。
 
 linaro-2011.10 for mini210 源码地址 uboot for mini210 
按下面的说明修改,即可在tiny210上启动。 
 
 
源码下载: uboot for tiny210   version1.0 (版本 u-boot 2011.06)
目前功能还是比较少的,后面我还会继续添加。
基本功能:
1. SD boot,基于linaro u-boot的SPL功能实现
2. 从SD卡的FAT分区上加载文件到SDRAM
3. 将环境变量保存至SD卡(有Writing to MMC(0)... mmc_send_cmd: error during transfer: 0x00208001 mmc write failed), 但数据保存是成功的,后续会修改。


但是linaro-2011.10 for mini210是无法直接在tiny210上启动的,终端仅打印OK。而主要问题存在于内存的初始化,板子上电后RAM没有实现正确初始化,而到uboot的lowlevel阶段,无法实现代码的搬运。

进行内存初始化的核心部分位于 /board/samsug/mini210/memsteup.S。这段代码的操作是没错误的,那问题可能出在memorycontrol的配置上,对210 的内存配置在/include/configs/mini210.h 中实现。
tiny210的DDR2 仅挂载在DRAM0区域,而mini210.h 给出的信息显示mini210SDram是在DRAM0和DRAM1分别挂载256M,故作以下修改:
行:
142:  #define CONFIG_SYS_LOAD_ADDR  ( PHYS_SDRAM_1 + 0x1000000)
 162:       #define CONFIG_NR_DRAM_BANKS     1// 2
#define  SDRAM_BANK_SIZE(512UL << 20UL)//0x10000000 /* 256256 MB */
#define PHYS_SDRAM_1  MEMORY_BASE_ADDRESS
#define PHYS_SDRAM_1_SIZE SDRAM_BANK_SIZE
+ #if 0
#define PHYS_SDRAM_2(MEMORY_BASE_ADDRESS + 0x20000000) /* SDRAM Bank #2 */
#define PHYS_SDRAM_2_SIZESDRAM_BANK_SIZE
+ #endif
tiny210的ram是挂在DRAM0区域的,如下图:

从核心板原理图看出四片128MDDR2作为 1 chip故有如下配置(配置均在mini210.h中):
315 :#define DMC0_MEMCONTROL0x00202400//MemControl BL=4, 1Chip, DDR2 Type, dynamic self refresh, force precharge, dynamic power down off

DRAM0区域起始地址0x20000000,offset 0x1fffffff(512M),根据这个思路参考手册配置MEMCONFIG0 ( chip_base = 0x20  chip_mask = 0xE0 ), 这样我们就可以操作0x20000000 ~0x3fffffff(512M的内存空间)



tiny210的ram地址线14根(故chip_row 0x2 = 14 bit),见下图
 
 
 
故有如下配置

316 :#define DMC0_MEMCONFIG_0  0x20E00323// MemConfig0 512MB config, 8banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed
317 :#define DMC0_MEMCONFIG_1  0x00E00323// MemConfig1

另外启动在初始化RAM时会读取ram的大小,函数在/board/samsug/mini210/mini210.c 实现,需要作如下修改:
+187 :#if defined(PHYS_SDRAM_2)
188 :gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
189 : gd->bd->bi_dram[1].size = get_ram_size((long *)PHYS_SDRAM_2, \
190:                                                      PHYS_SDRAM_2_SIZE);
+191 :#endif
 
 
 
PS:
添加tiny210目标板:
1、修改uboot源码根目录 boards.cfg 文件,183行添加:
 tiny210                      arm         armv7       tiny210             samsung        s5pc1xx
2、cp board/samsung/mini210 board/samsung/tiny210
3、将board/samsung/tiny210 下的mini210替换为 tiny210,并将此目录下的Makefile的29行修改为
COBJS   :=  tiny210.o ;  再将此目录下 lowlevel_init.S 第35行修改为 #include "tiny210_val.h"。
4、cp include/configs/mini210  include/configs/tiny210.h
5、vim  include/configs/tiny210.h
修改:
#define CONFIG_MINI210   ----> #define CONFIG_TINY210
#define MACH_TYPE_ MINI210  ----->#define MACH_TYPE_TINY210
#define CONFIG_MACH_TYPE                MACH_TYPE_MINI210  ---->#define CONFIG_MACH_TYPE                MACH_TYPE_TINY210
 

 

编译u-boot
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl
由于我的系统下装有两套交叉工具链,所以没有把  /opt/FriendlyARM/toolschain/4.5.1/bin/ 添加到环境变量,在使用工具链时要指明路径。

将u-boot镜像写入SD卡
将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.

执行下面的命令
$sudo dd iflag=dsync oflag=dsync if=spl/tiny210-spl.bin of=/dev/sdb seek=1
$sudo dd iflag=dsync oflag=dsync if=u-boot.bin of=/dev/sdb  seek=49


附:
烧写完成将卡插入开发板,启动:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值