关于uboot 中nand_spl 启动
来源:互联网 发布:ipad 传输软件 编辑:程序博客网 时间:2024/06/16 13:52
最近有碰到uboot 中nand_spl启动,说说我的理解!
写在前面。
1.从名字上来看,他肯定和nand有关系的。spl是什么,我网查了一下,没找到,姑且理解为second process level。
2.u-boot-spl.bin这个文件执行完毕后,就会跳转到u-boot.bin这里。其实,一般情况下,我们的arm板的bootloader只需要一个就可以了,为什么会出现两个bin文件呢?
我是这样理解的。大牛可路过,欢迎批评。u-boot-spl这个文件的主要作用是将nand初始化,然后将u-boot.bin这个文件搬运到sdram里面。u-boot-spl村子的原因可能是
现在得u-boot集成的功能越来越多,俨然就是一个缩小版的linux操作系统。编译后文件远超过4k大小,达到400k左右,一般的soc板级内存只有4k,这就造成u-boot装不下。nand-spl
这个文件很小,他的大小只有不到4k,他可以将u-boot这个文件搬运到sdram里面。然后u-boot再去搬运linux kernel。
上代码:
uboot版本: 2013-04-r2
一个文件是start_nand_spl.S,位于nand_spl/board/$(BOARD)/下面。
这个文件编译后会创建一个链接文件start.S 指向start_nand_spl.S
前面不用看,看关键:
......
进入管理模式
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
/* 设置栈,这个是片内的。方便调到c函数。board_init_f */
call_board_init_f:
#ifdef CONFIG_NAND_SPL /* deprecated, use instead CONFIG_SPL_BUILD */
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
#else
#ifdef CONFIG_SPL_BUILD
ldr sp, =(CONFIG_SPL_STACK)
#else
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
#endif
#endif
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
ldr r0,=0x00000000
bl board_init_f
board_init_f这个是开启串口时钟,这里使用的是外部晶振。初始化串口。然后调到nand_boot();
void board_init_f(unsigned long bootflag)
{
//mem_malloc_init (0xa00000, 0x100000);
writel(readl(REG_PCLKEN0) | 0x10000, REG_PCLKEN0); // UART clk
writel(readl(REG_PCLKEN0) | 0x100, REG_PCLKEN0); // Timer clk
nuc970_serial_initialize();
nuc970_serial_init();
printf("nand_boot\n");
nand_boot();
//relocate_code(CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL,
//CONFIG_SYS_TEXT_BASE);
}
nand_boot主要是nand的初始化,加载u-boot文件,跳转
void nand_boot(void)
{
...
board_nand_init(&nand_chip);
...
nand_load(...
/*
* Jump to U-Boot image
*/
uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START;
(*uboot)();
}
- 关于uboot 中nand_spl 启动
- MPC8309 NAND_SPL uboot初始化流程
- 关于uboot启动中地址的问题
- IMX51 uboot中设置启动图标
- uboot中usb storage启动方法1
- uboot中背光的启动参数传递
- uboot中usb storage启动方法
- GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法
- uboot启动
- uboot启动
- uboot启动
- uboot启动
- uboot启动
- uboot中关于LCD的代码分析
- 关于AM335X uboot启动的时候找不到nand的问题
- 关于Uboot自启动的问题方案解决
- uboot启动后在内存中运行裸机程序hello
- Freescale iMX53平台UBoot中启动参数说明(一)
- 理论: 数论(3):素数基础
- Prototype模式
- c#中的webservice调用delphi写的dll函数的方法
- ul版瀑布流
- ul版瀑布流onscroll
- 关于uboot 中nand_spl 启动
- ubuntu,ros教程问题之[rospack] Error: no such package beginner_tutorials
- Ubuntu使用教程:E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用)
- ul版瀑布流加图片
- data2
- Android关于JNI开发(1)-----eclipse工具开发
- 定位版瀑布流
- 21种设计模式
- mybaties和hibernate有什么区别