• start

    arch/arm/cpu/armv7/start.S
36 .globl _start
37 _start: b reset 136 reset:
137 bl save_boot_params
138 /*
139 * set the cpu to SVC32 mode
140 */
141 mrs r0, cpsr
142 bic r0, r0, #0x1f
143 orr r0, r0, #0xd3
144 msr cpsr,r0 206 call_board_init_f:
207 ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
208 bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
209 ldr r0,=0x00000000
210 bl board_init_f // ----> 前置初始化 SPL 321 #ifndef CONFIG_SYS_ICACHE_OFF
322 mcr p15, 0, r0, c7, c5, 0 @ invalidate icache
323 mcr p15, 0, r0, c7, c10, 4 @ DSB
324 mcr p15, 0, r0, c7, c5, 4 @ ISB
325 #endif
326 ldr r0, _board_init_r_ofs
327 adr r1, _start
328 add lr, r0, r1
329 add lr, lr, r9
330 /* setup parameters for board_init_r */
331 mov r0, r5 /* gd_t */
332 mov r1, r6 /* dest_addr */
333 /* jump to it ... */
334 mov pc, lr
335
336 _board_init_r_ofs:
337 .word board_init_r - _start // 后置初始化, u-boot.img
  • board_init_f

    264 void board_init_f(ulong bootflag)
265 {
// ... ...
281 for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
282 if ((*init_fnc_ptr)() != 0) {
283 hang ();
284 }
285 }
// ... .. 235 init_fnc_t *init_sequence[] = {
236 #if defined(CONFIG_ARCH_CPU_INIT)
237 arch_cpu_init, /* basic arch cpu dependent setup */
238 #endif
239 #if defined(CONFIG_BOARD_EARLY_INIT_F)
240 board_early_init_f,
241 #endif
242 timer_init, /* initialize timer */
243 #ifdef CONFIG_FSL_ESDHC
244 get_clocks,
245 #endif
246 env_init, /* initialize environment */
247 init_baudrate, /* initialze baudrate settings */
248 serial_init, /* serial communications setup */
249 console_init_f, /* stage 1 init of console */
250 display_banner, /* say that we are here */
251 #if defined(CONFIG_DISPLAY_CPUINFO)
252 print_cpuinfo, /* display cpu info (and speed) */
253 #endif
254 #if defined(CONFIG_DISPLAY_BOARDINFO)
255 checkboard, /* display board info */
256 #endif
257 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
258 init_func_i2c,
259 #endif
260 dram_init, /* configure available RAM banks */
261 NULL,
262 }; // board/aplex/ecm_5410.c
98 int dram_init(void)
99 {
100 gd->ram_size = PHYS_DRAM_1_SIZE;
101
102 return 0;
103 }
  • board_init_r

    // arch/arm/lib/board.c
443 void board_init_r(gd_t *id, ulong dest_addr)
444 {
// ... ...
464 board_init(); /* Setup chipselects */ // i2c, pinmux gpmc init
// ... ...
523 #if defined(CONFIG_CMD_NAND)
524 puts("NAND : ");
525 nand_init(); /* go init the NAND */
526 #endif
// ... ... // drivers/mtd/nand/ti81xx_nand.c
864 int board_nand_init(struct nand_chip *nand)
865 {
867 cs = 0;
876 while (cs < GPMC_MAX_CS) {
877 /* Check if NAND type is set */
878 if ((readl(&gpmc_cfg->cs[cs].config1) & 0xC00) == 0x800) {
879 /* Found it!! */
880 #ifdef NAND_DEBUG
881 printf("Searching for NAND device @ GPMC CS:%1d\n", cs);
882 #endif
883 break;
884 }
885 cs++;
886 }
887 if (cs >= GPMC_MAX_CS) {
888 printf("NAND: Unable to find NAND settings in "
889 "GPMC Configuration - quitting\n");
890 return -ENODEV;
891 }
892
893 nand->IO_ADDR_R = (void __iomem *)&gpmc_cfg->cs[cs].nand_dat;
894 nand->IO_ADDR_W = (void __iomem *)&gpmc_cfg->cs[cs].nand_cmd;
895
896 nand->cmd_ctrl = ti81xx_nand_hwcontrol;
897 nand->options = NAND_NO_PADDING | NAND_CACHEPRG | NAND_NO_AUTOINCR;
898 /* If we are 16 bit dev, our gpmc config tells us that */
899 if ((readl(&gpmc_cfg->cs[cs].config1) & 0x3000) == 0x1000) {
900 nand->options |= NAND_BUSWIDTH_16;
901 }
902
903 nand->chip_delay = 100;
904
905 /* required in case of BCH */
906 elm_init();
907
908 /* BCH info that will be correct for SPL or overridden otherwise. */
909 nand->priv = &bch_priv;
910
911 #ifndef CONFIG_SPL_BUILD
912 /* For undocumented reasons we need to currently keep our environment
913 * in 1-bit ECC so we configure ourself thusly. */
914 nand_curr_device = 0;
915 ti81xx_nand_switch_ecc(NAND_ECC_HW, 0);
916 #else
917 /* The NAND chip present requires that we have written data in with
918 * at least 4-bit ECC so we configure outself for that in SPL.
919 */
920 nand->ecc.mode = NAND_ECC_HW_SYNDROME;
921 nand->ecc.layout = &hw_bch8_nand_oob;
922 nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE;
923 nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES;
924 nand->ecc.steps = CONFIG_SYS_NAND_ECCSTEPS;
925 nand->ecc.total = CONFIG_SYS_NAND_ECCTOTAL;
926 nand->ecc.hwctl = ti81xx_enable_ecc_bch;
927 nand->ecc.correct = ti81xx_correct_data_bch;
928 nand->ecc.calculate = ti81xx_calculate_ecc_bch;
929
930 if (nand->options & NAND_BUSWIDTH_16)
931 nand->read_buf = nand_read_buf16;
932 else
933 nand->read_buf = nand_read_buf;
934 nand->dev_ready = ti81xx_spl_dev_ready;
935
936 ti81xx_hwecc_init_bch(nand, NAND_ECC_READ);
937 #endif
938
939 return 0;
940 }

u-boot2011.09 启动流程记录的更多相关文章

  1. 记录Linux启动流程的工具bootchart

    /*********************************************************************  * Author  : Samson  * Date   ...

  2. 【转】linux-系统启动流程详解

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 1. Linux 的启动流程分析 1.1 启动流程一览 1.2 BIOS, boot loader 与 kernel ...

  3. linux启动流程梳理【转】

    接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下 ...

  4. 番外:你真的了解 Oracle 的启动流程吗?

    番外系列说明:该系列所有文章都将作为独立篇章进行知识点讲解,是对其他系列博文进行的补充说明,来自于博客园AskScuti. 主题:关于数据库启动流程的三个阶段 内容预览:本篇涉及数据库启动的三个阶段分 ...

  5. Spring Boot启动流程详解(一)

    环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...

  6. 嵌入式Linux驱动学习之路(五)u-boot启动流程分析

    这里说的u-boot启动流程,值得是从上电开机执行u-boot,到u-boot,到u-boot加载操作系统的过程.这一过程可以分为两个过程,各个阶段的功能如下. 第一阶段的功能: 硬件设备初始化. 加 ...

  7. CentOS6 启动流程图文解剖

    我们在使用Linux操作系统的时候,我们只需按下电源键,等待,然后输入账户和密码就可以使用Linux操作系统了.那么在按下电源到输入账号和密码之前,操作系统都做了些什么?下面就来讲述在这段时间发生的动 ...

  8. centos启动流程[转]

    启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...

  9. linux内核启动流程[转]

    启动流程一览 既然启动是很严肃的一件事,那我们就来了解一下整个启动的过程吧! 好让大家比较容易发现启动过程里面可能会发生问题的地方,以及出现问题后的解决之道! 不过,由於启动的过程中,那个启动管理程序 ...

随机推荐

  1. Python - 列表解析式/生成器表达式

    列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...

  2. 如何在osx的终端下使用字典

    因为各种原因我经常要在osx上查英文单词,在osx系统下,查字典其实是一件非常优雅的事情,三指轻触,简单快速.在terminal中其实也是这样,3指轻触需要查询的单词,释义一触即发,用户体验非常好.不 ...

  3. SIMULINK的模块库介绍

    SIMILINK模块库按功能进行分为以下8类子库:Continuous(连续模块)Discrete(离散模块)Function&Tables(函数和平台模块)Math(数学模块)Nonline ...

  4. Ubuntu 13.04 SSH其他机器连接慢的解决办法

    原来Windows上用Xshell,用这比较爽,命令open http,自动打开自己定义的http服务器SSH 远程连接,点一下文件传输,如果装了xsftp,自动启动xsftp,没有就来个提示,打开一 ...

  5. PHP读取超大日志文件

    打开一个17G的日志文件,都不吃力,除了占cpu之外,内存占用不多,如果直接fopen根本打不开 注:它是逐行读取的 foreach( glob( ngx_log. "/*.log" ...

  6. Spring Security教程(四):自定义登录页

    在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果. ...

  7. Spring Security教程(三):自定义表结构

    在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...

  8. Atitit 大龄软件工程师的出路attilax总结

    Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...

  9. yum 卸载 error: %preun(tengine-2.1.0-1.el6.x86_64) scriptlet failed, exit status 6

    error: %preun(tengine-2.1.0-1.el6.x86_64) scriptlet failed, exit status 6 Error in PREUN scriptlet i ...

  10. LoadingController

    --local MainSceneConfig = require "res.scripts.configs.MainSceneConfig" -- 暂时添加一个临时配置文件 -- ...