u-boot 程序执行流程记录(am335x 开发板)
来源:互联网 发布:php企业门户网站模板 编辑:程序博客网 时间:2024/06/05 11:27
Author:DriverMonkey
Mail:boowkorepeng@hotmail.com
QQ:196568501
欢迎交流(承接各类嵌入式外包项目-wince,linux,单片机,上位机开发)
进入u-boot
file: start.s
b reset // 跳转到复位执行函数
...
reset:
//1.set the cpu to SVC32 mode
....
bl cpu_init_crit
.....
cpu_init_crit:
...
bl lowlevel_init @ go setup pll,mux,memory
...
file:lowlevel_init.s
lowlevel_init:
...
bl s_init //从这里调到c语言初始化代码
..
evm.c
void s_init(void)
{
/* Can be removed as A8 comes up with L2 enabled */
l2_cache_enable();
/* WDT1 is already running when the bootloader gets control
* Disable it to avoid "random" resets
*/
__raw_writel(0xAAAA, WDT_WSPR);
while(__raw_readl(WDT_WWPS) != 0x0);
__raw_writel(0x5555, WDT_WSPR);
while(__raw_readl(WDT_WWPS) != 0x0);
#ifdef CONFIG_SPL_BUILD
/* Setup the PLLs and the clocks for the peripherals */
pll_init();
/* Enable RTC32K clock */
//rtc32k_enable(); //masked by DriverMonkey
/* UART softreset */
u32 regVal;
u32 uart_base = DEFAULT_UART_BASE;
enable_uart0_pin_mux();
/* IA Motor Control Board has default console on UART3*/
/* XXX: This is before we've probed / set board_id */
if (board_id == IA_BOARD) {
uart_base = UART3_BASE;
}
regVal = __raw_readl(uart_base + UART_SYSCFG_OFFSET);
regVal |= UART_RESET;
__raw_writel(regVal, (uart_base + UART_SYSCFG_OFFSET) );
while ((__raw_readl(uart_base + UART_SYSSTS_OFFSET) &
UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK);
/* Disable smart idle */
regVal = __raw_readl((uart_base + UART_SYSCFG_OFFSET));
regVal |= UART_SMART_IDLE_EN;
__raw_writel(regVal, (uart_base + UART_SYSCFG_OFFSET));
/* Initialize the Timer */
init_timer();
preloader_console_init();
config_am335x_ddr3();//added by DriverMonkey
//config_am335x_ddr();
#endif
}
Start.s
call_board_init_f:
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
ldr r0,=0x00000000
bl board_init_f
spl.c
void board_init_f(ulong dummy)
{
/*
* We call relocate_code() with relocation target same as the
* CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting
* skipped. Instead, only .bss initialization will happen. That's
* all we need
*/
debug(">>board_init_f()++\n");
printf("board_init_f\n");
relocate_code(CONFIG_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
}
Start.s
relocate_code:
mov r4, r0 /* save addr_sp */
mov r5, r1 /* save addr of gd */
mov r6, r2 /* save addr of destination */
/* Set up the stack
- u-boot 程序执行流程记录(am335x 开发板)
- AM335x u-boot启动流程问题
- AM335X u-boot移植
- TI am335x U-boot
- [UBOOT] AM335x 启动流程(u-boot-2011.09)
- AM335X 开发板安装vsftpd操作流程
- u-boot-->kernel程序流程一览
- 基于FL2440开发板的U-boot移植记录
- AM335x U-Boot User's Guide
- AM335X U-BOOT 里添加开机画面
- Am335x之u-boot LOGO的增加
- AM335x U-Boot User's Guide
- AM335x U-Boot User's Guide
- AM335x u-boot启动添加开机图片
- u-boot 裸机程序至 mini2440 开发板 NAND
- u-boot的执行流程分析start.s
- u-boot启动流程
- u-boot启动流程
- 公有继承 保护继承 私有继承
- 百度地图
- Android五种布局管理器之『AbsoluteLayout』
- 在java种怎样调用oracle存储过程
- Web开发要考虑用户禁用浏览器的JS吗?
- u-boot 程序执行流程记录(am335x 开发板)
- 《MYSQL 5.5从零开始学(配光盘)》
- 进制转换
- jsp验证:只能输入数字
- 常用的UNIX系统调用命令
- java中二进制、八进制、十六进制转换为String
- 靠边伸缩菜单的做法(类似QQ,碰到就会伸出来)
- action返回值及结果类型介绍
- BI学习笔记之三 - 一个典型的BI系统介绍