SD卡启动uboot分析和移植(s3cd 6410)
来源:互联网 发布:软件学报 电子版 编辑:程序博客网 时间:2024/04/29 14:28
分析:
s3c6410 可以从 NANDFLASH中启动,可以从SD卡中启动
拨码开关IO:
OM[4:0] 4 3 2 1 0
IROM启动 1 1 1 1
GPN[15:13] IROM启动时的外部存储设备 SD、OneNAND NAND(数据大小不同的页)
s3c6410 出厂时会在0x80000000 的IROM 中固化BL0代码 大小为32KB 然后PC指向0X80000000开始执行,因此由IROM中启动
BL0代码中功能有:关闭看门狗,TCM,系统时钟......
外部存储设备的初始化
BL1:(自己编写的代码)重新初始化系统、开辟更广阔的内存空间,同时将BL2拷贝到SDRAM
BL2:(自己移植的代码)拷贝内核、文件系统,从而从SDRAM中启动系统
ok6410 拨码开关
1 2 3 4 5 6 7 8
GPN[15:13] OM[4:1]
000 1111 1 sd卡中启动uboot
移植:
BL1:把uboot.bin 前8k取出
BL2:剩下的uboot.bin
cd arch/arm/cpu/arm1176/s3c64xx/ vim s3c6410_sdboot.c 中写SD卡启动代码
/* * OK6410 SD Boot * zhaoyuting */#include <common.h>#include <asm/io.h>#ifdef CONFIG_MMC_CHANNEL#define MMC_CHANNEL CONFIG_MMC_CHANNEL#endif#define globalBlockSizeHide *((volatile unsigned int *)(0x0c004000 - 0x04))#define globalSDHCInfo *((volatile unsigned int *)(0x0c004000 - 0x08))#define LAST_BLKPOS (globalBlockSizeHide - 2)#define BLK_SIZE 512#define BL1_SIZE (1024*8)#define BL2_SIZE (1024*300)#if 0#define ENV_SIZE CONFIG_ENV_SIZE#else#define ENV_SIZE (1024*16)#endif#define BL1_BLKCNT (BL1_SIZE / BLK_SIZE)#define BL2_BLKCNT (BL2_SIZE / BLK_SIZE)#define ENV_BLKCNT (ENV_SIZE / BLK_SIZE)#define STARTBLKADDR (LAST_BLKPOS - BL1_BLKCNT - BL2_BLKCNT - ENV_BLKCNT)#define DESTADDR (CONFIG_SYS_PHY_UBOOT_BASE)#define CopyMMCtoMem(a,b,c,d,e) (((int(*)(int,uint,ushort,uint *,int))(*((uint *)(0x0c004000 + 0x08))))(a,b,c,d,e))int BootCopyMMCtoMem(){ writel(readl(HM_CONTROL4) | (0x3 << 16), HM_CONTROL4); return CopyMMCtoMem(0,STARTBLKADDR,BL2_BLKCNT,(uint *)DESTADDR,0);}
修改配置:
cd include/configs vim smdk6410.h 267行添加
/* SD BOOT */
#define CONFIG_BOOT_SD
cd arch/arm/cpu/arm1176/s3c64xx/ vim Makefile 36行添加
COBJS-$(CONFIG_BOOT_SD) += s3c6410_sdboot.o
cd arch/arm/cpu/arm1176/ vim start.S 225行bl lowlevel_init后添加
#if defined (CONFIG_BOOT_SD) && !defined(CONFIG_NAND_SPL) ldr sp, =CONFIG_SYS_INIT_SP_ADDR bl BootCopyMMCtoMem cmp r0, #0copyerror: beq copyerror ldr pc, =_main#else bl _main#endif
修改脚本(为了确保实现的代码是在BL1,也就是uboot的前8K中)
cd board/samsung/smdk6410/ vim u-boot-nand.lds
arch/arm/cpu/arm1176/start.o (.text)后面添加一句
board/samsung/smdk6410/libsmdk6410.o(.text)
然后make distclean
make smdk6410_config
make all
- SD卡启动uboot分析和移植(s3cd 6410)
- uboot启动流程分析和uboot移植(粗略分析)
- S3C6410 SD卡启动uboot分析(详细)
- S3C6410 SD卡启动uboot分析(详细)
- S3C6410 SD卡启动uboot分析
- Linux内核移植 part1:Exynos4412 sd卡启动uboot
- UBOOT-2012-10在OK6410平台的移植(十一)从SD卡启动
- OK6410 uboot移植之sd启动
- 6410从SD卡启动uboot
- S3c6410 linux内核移植(11)---用SD卡下载uboot、linux内核和文件系统
- tiny210 uboot sd卡启动
- UBOOT-2012-10在OK6410平台的移植从SD卡启动
- 移植7- uboot之sd卡做文文件系统启动linux
- Cubietruck制作可启动SD卡(只测试uboot)
- Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析
- Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析
- Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析
- 嵌入式linux开发uboot移植(三)——uboot启动过程源码分析
- Spring Data JPA 快速入门
- 一步步带你,如何网站架构
- Redis-3.2.1集群内网部署
- Python学习-方法解析顺序(MRO)
- Android总结篇系列:Android广播机制
- SD卡启动uboot分析和移植(s3cd 6410)
- Android 微信支付步骤
- 两个数据库比较 对比视图存储过程及表结构差异
- 未来演进的方向--基于Docker部署微服务
- Qt之pro配置详解
- Makefile中预定义变量
- HTML5 placeholder美化input背景提示文字
- 控制反转IOC与依赖注入DI
- jquery学习基础使用