1,$make EmbedSky_config

2,  $make all

下面分析cpu/arm920t/start.S文件,分析之前请先阅读一下/board/EmbedSky/u-boot.lds文件,了解输出文件的格式,代码段,数据段,bss段,u_boot_cmd命令段的地址是怎么划分的,从这里我们看出第一个运行的函数才是cpu/arm920t/start.S

转自:http://hi.baidu.com/speedy%B5%C4%D0%A1%CE%D1/blog/item/060f5c899764dfcffc1f10ea.html

start.S所完成的任务(按顺序写):

初始化中断向量表->初始化一些全局变量->设置cpu进入管理模式,关闭中断,32位arm指令集->关闭看门狗,一防止cpu不断重启->关闭中断和子中断->关闭I/D cache ->关闭MMU->初始化存储控制器,设置存储控制器的13个寄存器地址->初始化栈(在调用c函数之前一定要初始化相应栈)->clock_init(系统时钟初始化)(board/embedsky/boot_init.c下的clock_init函数)设置fclk=400MHZ,FCLK:HCLK:PCLK=1:4:8这样cpu的工作频率就可以达到400Mhz了,每秒4亿条arm指令哟!->重定位uboot到sdram中->初始化bss段->start_armboot;到这里bootloader第一阶段的任务完成,跳到stage2的c语言代码处start_armboot:

start_armboot()函数定义在:lib_arm/board.c文件中,我们根据TQ2440的uboot源码来进行分析:

首先是初始化全局数据区gd,初始化为0,里面的结构体指针内容并没有初始化,然后调用init_sequence[]初始化数组,这个数组可是大有文章,需要仔细看看哟,这也是stage2中主要完成的功能之一,然后就是初始化nor flash,环境变量初始化,网卡初始化,设备的初始化,时能异常,usb初始化,最后跳到main_loop()函数中,

main_loop()函数定义在common/main.c文件中,函数的开始,也是一大堆的初始化,其中重要的是run_command("menu",0)和run_command("boot_zImage",0),这两个函数分别对应,当我们启动时是进入下载模式,还是进入启动模式;

在这里我们看到,uboot对linux kernel的启动也是通过uboot命令来实现的,然后我们查看boot_zImage命令实现什么操作;

我们在lib_arm/boot_zImage.c文件中可以看到boot_zImage命令定义:U_BOOT_CMD(boot_zImage,3,0,do_boot_zImage,"string1","as"),这个命令的执行函数是do_boot_zImage,do_boot_zImage也是在该文件中定义:如果我们的屏不是10寸屏,则执行boot_zImage(0x200000,0x300000),在这个函数里调用call_linux(0,mach_type,to),分别代表r0,r1=机器ID,内核地址;这里,只是正常启动模式时的流程分析,如果进入下载模式,就要分析另一条U_BOOT_CMD命令了;

到此,整个uboot流程分析完毕;

实验心得:如果想学好uboot,最后仔细阅读uboot源码的readme文件和顶层目录下的Makefile文件,然后不懂的地方再google,baidu;

这里有一篇不错的文章:http://wenku.baidu.com/view/1a477e270722192e4536f654.html

天嵌科技TQ2440的uboot启动流程分析学习笔记相关推荐

  1. ARMv8架构u-boot启动流程详细分析(一)

    文章目录 1 概述 2 armv8 u-boot的启动 3 u-boot源码整体结构和一些编译配置方式 3.1 编译配置方式 3.2 u-boot源码结构 4 u-boot armv8链接脚本 4.1 ...

  2. uboot流程——uboot启动流程

    [uboot] (第五章)uboot流程--uboot启动流程 2016年11月07日 20:12:07 阅读数:2230 以下例子都以project X项目tiny210(s5pv210平台,arm ...

  3. U-Boot启动流程详解

    参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...

  4. linux uboot启动流程分析,uboot启动流程分析

    uboot版本为NXP维护的2016.03版本 下载地址为http://git.freescale.com/git/... 分析uboot的启动流程,需要编译一下uboot,然后打开链接脚本 u-bo ...

  5. Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析

    uboot启动流程分析如下: 第一阶段: a -- 设置cpu工作模式为SVC模式 b -- 关闭中断,mmu,cache v -- 关看门狗 d -- 初始化内存,串口 e -- 设置栈 f -- ...

  6. Uboot 启动流程分析

    uboot启动流程 复位CPU 设置异常向量表 设置cpu为SVC模式 但是从U-Boot方面考虑,其要做的事情是初始化系统的相关硬件资源,因此需要获取尽量多的权限,以方便操作硬件,初始化硬件. 关闭 ...

  7. uboot启动流程详细分析(基于i.m6ull)

    uboot介绍 uboot就是一段引导程序,在加载系统内核之前,完成硬件初始化,内存映射,为后续内核的引导提供一个良好的环境.uboot是bootloader的一种,全称为universal boot ...

  8. uboot启动流程详解

    要分析boot启动流程,首先要找到程序入口地址,可以通过编译uboot生成u-boot.lds,通过查看链接脚本u-boot.lds知道入口点是 arch/arm/lib/vectors.S 文件中的 ...

  9. 基于IMX6Q的uboot启动流程分析(3):_main函数之relocate_code与board_init_r

    基于IMX6Q的uboot启动流程分析(1):uboot入口函数 基于IMX6Q的uboot启动流程分析(2):_main函数之board_init_f 基于IMX6Q的uboot启动流程分析(3): ...

最新文章

  1. java IDE的四大金刚
  2. Vue CLI 3开发中屏蔽烦人的EsLint错误
  3. LeetCode 121. Best Time to Buy and Sell Stock
  4. 深入理解java虚拟机JVM(上)
  5. JS 数字,金额用逗号隔开
  6. mysql 注释写法有哪些_mysql的注释有几种写法?
  7. 拓端tecdat|Nelsen-Siegel—Svensson扩展模型简介
  8. Atitit.导出excel功能的设计 与解决方案
  9. 前端根据银行卡号或银行的简码动态显示logo图标
  10. nuc980使用教程--2--spi nor flash(W25Q256)启动
  11. 面向车路协同的路侧感知仿真系统
  12. python换照片底色,20行代码教你用python给证件照换底色的方法示例
  13. LPSTR、LPCSTR、LPTSTR和LPCTSTR,LPVOID的意义及区别
  14. C#从图中截取部分图片 代码实现截图
  15. 在国内外市场均遭遇挫折的OPPO和vivo该反思了
  16. 用zookeeper体验监听服务器是否还活着
  17. Android Gradle Composing builds 管理三方依赖
  18. 如何配置Thymeleaf教程,及Thymeleaf的简单使用教程【一篇足够入门】
  19. 树莓派4 使用 SnowBoy 搭建热词唤醒
  20. php处理大数据量数据的思路

热门文章

  1. Python爬虫 爬取豆瓣电影TOP250
  2. 双方博弈复制动态方程(y-z,z=0.3,z=0.5,z=0.7)与matlab数值仿真——matlab2016a版本
  3. 获取windows硬件、软件信息的方法
  4. iOS Memory 内存详解
  5. --仿蓝色理想网站的导航菜单--
  6. html一个大网页5个小网页,5个范例告诉你:什么是自适应网页设计
  7. PHP 简单日历功能的实现
  8. 不用win10的人,在用win7-usb-creator时出现的一个无提示现像.
  9. 申请美国商务签证(B1/B2) -- 大连
  10. 无盘疑难杂症的处理和网络的设置(转)