u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)
这次更新,实现了自动识别Nand或MMC/SD启动(环境变量统一存放于Nandflash中),统一SD及Nand启动模式的nandflash驱动均为8bit HW ECC校验,并调整部分源码文件的结构。 您可以从下面的链接获得源码,也可以下载历史版本,并参考后面的步骤修改获得ver3.1。本次修改的原理简单不做太详细的分析。
最新源码下载:
ver4.0源码下载:u-boot for tiny210 ver4.0
ver3.1下载:
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
ver3.1的基本功能:
1. SD boot,基于linaro u-boot的SPL功能实现
2. 从SD卡的FAT分区上加载文件到SDRAM
3. 将环境变量保存至SD卡
4. 添加DM9000网卡驱动,开启网络功能(例如:tftp,nfs等)
5. 添加TAB键命令自动补全功能
6.修复bug:
修复bug 1:SD卡保存环境变量出现Writing to MMC(0)... mmc_send_cmd: error during transfer: 0x00208001 mmc write failed。
修复bug 2:每次启动只能保存一次环境变量。
7.添加NandFlash驱动,开启所有Nand cmd。
8.添加Yaffs文件系统烧写支持。
9.修改在SD卡启动及nand启动时对nandflash的烧写为8bit 硬件ECC校验。
10.添加Nandflash启动。
#include <asm-offsets.h>
#include <config.h>
#include <version.h>
-
+#include <common.h>
+#include <configs/tiny210.h>
+#include <s5pc110.h>
.globl _start
_start: b reset
ldr pc, _undefined_instruction
@@ -176,8 +178,61 @@ call_board_init_f:
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
ldr r0,=0x00000000
+#if defined(CONFIG_TINY210) || defined(CONFIG_MINI210)
+ adr r4, _start
+ ldr r5,_TEXT_BASE
+ cmp r5,r4
+ beq board_init_in_ram
+
+ ldr r0, =PRO_ID_BASE
+ ldr r1, [r0,#OMR_OFFSET]
+ bic r2, r1, #0xffffffc1
+
+ /* NAND BOOT */
+ cmp r2, #0x0 @ 512B 4-cycle
+ moveq r3, #BOOT_NAND
+
+ cmp r2, #0x2 @ 2KB 5-cycle
+ moveq r3, #BOOT_NAND
+
+ cmp r2, #0x4 @ 4KB 5-cycle 8-bit ECC
+ moveq r3, #BOOT_NAND
+
+ cmp r2, #0x6 @ 4KB 5-cycle 16-bit ECC
+ moveq r3, #BOOT_NAND
+
+ cmp r2, #0x8 @ OneNAND Mux
+ moveq r3, #BOOT_ONENAND
+
+ /* SD/MMC BOOT */
+ cmp r2, #0xc
+ moveq r3, #BOOT_MMCSD
+
+ /* NOR BOOT */
+ cmp r2, #0x14
+ moveq r3, #BOOT_NOR
+
+ /* Uart BOOTONG failed */
+ cmp r2, #(0x1<<4)
+ moveq r3, #BOOT_SEC_DEV
+
+ ldr r0, =INF_REG_BASE
+ str r3, [r0, #INF_REG3_OFFSET]
+
+ ldr r1, [r0, #INF_REG3_OFFSET]
+ cmp r1, #BOOT_NAND /* 0x0 => boot device is nand */
+ beq nand_boot_210
+ cmp r1, #BOOT_MMCSD
+ beq mmcsd_boot_210
+
+nand_boot_210:
+ bl board_init_f_nand
+
+mmcsd_boot_210:
+ bl board_init_f
+board_init_in_ram:
+#endif
bl board_init_f
-
蓝色代码实现的功能:将 PRO_ID_BASE + OMR_OFFSET (这是一个启动方式寄存器,从中可以得到上电时的启动状态)地址处的读取启动信息,值0x0~0x6分别对应几种不同的nandflash启动,0xc对应MMC/SD启动。当确定是某一种启动方式后,将其对应的十六进制存放于INFORM3寄存器中。
SOBJS += reset.o
COBJS += clock.o
+ifdef CONFIG_SPL_BUILD
+COBJS += mmc_boot.o
+COBJS += nand_cp.o
+endif
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
修改board/samsung/tiny210/Makefile删除下面红色代码:
-COBJS += mmc_boot.o
-COBJS += nand_cp.o
-endif
134 void board_init_f_nand(unsigned long bootflag)
135 {
136 __attribute__((noreturn)) void (*uboot)(void);
137 copy_uboot_to_ram_nand();
244 void board_init_f (ulong) __attribute__ ((noreturn));
245 #if defined(CONFIG_TINY210) || defined(CONFIG_MINI210)
246 void board_init_f_nand (ulong) __attribute__ ((noreturn));
247 #endif
248 void board_init_r (gd_t *, ulong) __attribute__ ((noreturn));
249 int checkboard (void);
262 {
263 while(1);
264 }
265
266 void board_init_f(ulong bootflag)
267 {
268 bd_t *bd;
269 init_fnc_t **init_fnc_ptr;
270 gd_t *id;
105 $(obj)u-boot-spl.bin $(obj)$(BOARD)-spl.bin
+106 cat $(obj)$(BOARD)-spl.bin $(TOPDIR)/u-boot.bin > $(TOPDIR)/$(BOARD)-uboot.bin
429 #define CONFIG_SYS_NO_FLASH 1
430 #undef CONFIG_CMD_IMLS
431 #define CONFIG_IDENT_STRING " for FriendlyLEG-TINY210"
432 #define CONFIG_DOS_PARTITION 1
433
434 /*NAND_BOOT & MMCSD_BOOT by lk */
435 #define CONFIG_S5PC11X
436 #define CONFIG_ENV_IS_IN_NAND 1
437 #define CONFIG_ENV_SIZE 0x4000 /* 16KB */
438 #define RESERVE_BLOCK_SIZE (2048)
439 #define BL1_SIZE (8 << 10) /*8 K reserved for BL1*/
440 #define CONFIG_ENV_OFFSET 0x40000
441 #define CFG_NAND_HWECC
442 #define CONFIG_NAND_BL1_8BIT_ECC
443 #define CONFIG_8BIT_HW_ECC_SLC 1
$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
1.sd启动
将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.
执行下面的命令
$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1
u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)相关推荐
- S5PV210之UBOOT-2011.06启动过程解析-基于u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)
//主题:S5PV210之UBOOT-2011.06启动过程解析 //作者:kevinjz2010@gmail.com //版权:kevinjz原创 //平台:S5PV210 ARMV7 TINY21 ...
- u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)
新版本下载: 下面的链接提供了较新版本的源码 ver4.0源码下载:u-boot for tiny210 ver4.0 ver3.1源码下载: u-boot for tiny210 ver3.1 ve ...
- u-boot for tiny210 ver2.2.1(by liukun321咕唧咕唧)
这次更新没有增加具体功能,只修复了小bug.另外用一定篇幅说明如何解决u-boot for tiny210 在启动友善提供的mini210 linux内核/android出现卡死在Uncompress ...
- u-boot for tiny210 ver2.2(by liukun321咕唧咕唧)
前三个版本都不支持nandflash的读写,这次更新(ver2.2)添加了nandflash驱动及yaffs文件系统的烧写功能.在kasim的建议下我从ver2.2开始用git源代码仓库管理我的源码. ...
- u-boot for tiny210 version2.0(by liukun321咕唧咕唧)
version2.0是根据我上一个版本的uboot修改而来的,可以下载源码u-boot for tiny210 version1 后参照下面的内容进行修改 . 也可以参照 version1 从头构建t ...
- FT5X06 如何应用在10寸电容屏(linux-3.5电容屏驱动简析移植10寸电容屏驱动到Android4.2) (by liukun321咕唧咕唧)
这是几个月以前的东西了,在彻底遗忘之前拿出来好好写写.做个笔记,也算是造福后来人了.在做这个项目之前,没有做过电容屏的驱动,印象中的电容触摸屏是不需要校正的.IC支持多大的屏就要配多大的屏.但是拿到需 ...
- 教你如何用路由器连接网页登陆式校园网(by liukun321 咕唧咕唧)
在百度搜了相关内容不少,方法也五花八门,就是没找到能用的.还是自己来比较靠谱. 我用的是水星路由器,哪个牌子的路由器并不重要,反正配置界面大都类似.下面我就简单说一下配置步骤: 1.找到你路由其背面的 ...
- 解决无线网卡工作一段时间USB就自动断开连接(by liukun321咕唧咕唧)
我用的TP-LINK TL-WN721N无线网卡 ,开发板和主机能互相ping通 但是有偶尔会有丢包. 无线网卡工作时会不定时的断开USB连接,然后立马有自己连上了, 信息如下: [root@Frie ...
- 移植TP-LINK TL-WN721N 驱动到micro2440(by liukun321咕唧咕唧)
内核版本:linux-3.1.4 我先把 无线网卡(TP-LINK TL-WN721N)插到了我的PC上 用 lsusb 命令打印无线网卡ID :Bus 001 Device 003: ID 148 ...
最新文章
- makefile学习(转载)
- SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
- linux wps 中文输入法_linux_从windows到ubuntu再到manjaro
- sorry for yesterday
- css3动画应用-音乐唱片旋转播放特效
- python json转换字典_Python json转字典字符方法实例解析
- Spring框架功能整体介绍
- php算法台阶,php如何解决青蛙跳台阶的问题(代码)
- 【学习笔记】第二章——处理机调度的概念、层次、时机、切换过程 调度方式、调度算法的指标
- Linux比较大文件内容,Linux系统最大文件打开数优化,解决Too many open files报错
- 热敏打印机原理java_java - 使用TSC TTP-342E Pro热敏打印机Java打印 - 堆栈内存溢出...
- mysql的socket文件下载,mysql下的socket文件作用
- vue 父循环怎么拿子循环中的值_Vue 父组件循环使用refs调用子组件方法出现undefined的问题...
- 详解:Spark程序的开始 SparkContext 源码走一走
- [置顶] 话说你最拼命的时候怎样拼命的?
- Python编写:好友管理系统
- 3-20模拟赛【果冻之王】题解
- 【细胞分割】基于形态学算法实现红细胞计数matlab源码含 GUI
- JAVA计算机毕业设计疫情防控管理系统Mybatis+系统+数据库+调试部署
- python 请假审批系统_菜鸟也要懂点设计模式|用Python设计一个请假模式