LINUX实战:u-boot 1.3.4源码分析详细教程
《LINUX实战:u-boot 1.3.4源码分析详细教程》要点: 每款MCU上电之后,并不是立即执行到主程序的,而是最先初始化整个系统资源,俗称“Boot loader”.所以,u-boot是一种普遍用于嵌入式系统中的Boot loader,Boot loader是在操作系统运行之前执行的一小段程序,通过它,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备.Boot loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统.系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处支配的通常就是系统的Boot Loader程序;所以了解了u-boot的启动流程,就可以清楚知道linux启动时打印的信息是什么意思. 那么在介绍u-boot之前,先来认识一款软件Source insight;由于从u-boot官网下载的u-boot1.3.4安装包,它支持各大硬件平台,而且程序数据极多,在学习时,必要挑重点,找出符合字节硬件的程序;所以source insight是一款相当不错的软件,当然像Slick edit也是一款很好的编辑器. 1 . Source Insight 使用 1.1 Source Insight工程创立 新建工程菜单 工程设置界面 工程设置完成 工程文件保留路径设置界面(默认) 源码添加界面 配置为添加子目次文件 添加文件完成界面 封闭源码添加界面 文件同步菜单 同步设置装备摆设 同步进行中 同步完成后界面 1.2常用操作先容: 过滤文件(输入要查看的文件名) 查看目的文件 查看文件中函数,变量,宏界说: 对于整个工程中只一个一份代码的函数或变量或宏,导航窗口会直接列出其界说,如下所示 对于有多个同名目标,则会以列表形式呈现,让用户选择: 搜索功效: 给工程添加非默认类型文件: 删除文件: 反向删除: 同样办法删除CPU目录下无关文件. 2.? u-boot目录布局 board:存放文件夹的是具体开发板相关文件夹,有的目录是公司名,里面存放具体开发板的文件夹.有的直接开发板文件夹.此中存放的是板级相关文件. common:通用文件,存放的是所有CPU共用的文件,大部门是u-boot命令支持文件. 像bootm,go,tftpboot,help 等命令便是在这些文件中实现. CPU:存放芯片构架相关的文件,一个文件夹代表一个类型的CPU核心.此中的文件夹存放整个核心通用的代码文件以及具体的SOC文件夹. Disk? ? ? ? ? ? ? :硬件相关的支持代码.不消修改. Doc? ? ? ? :u-boot的使用说明书.不消修改. Drivers? :u-boot装备驱动代码. Fs? ? ? ? ? :文件系统代码,不消修改. include:u-boot头文件,包括有公用头文件,设备驱动相关头文件,以及分体系构架相关的头文件. 其中有一个文件夹是configs,比拟重要,存放开发板配置头文件,每个开发板对应一个头文件,头文件的名字就是开发板的名字. lib_generic:通用库文件代码,整个u-boot共用文件.不消修改. lib*:? ? 其他以lib开头的是具体体系架构相关的库文件,整个个芯片构架共用的文件.不消修改. nand_spl:nand 驱动. net:网络协议代码,一般不消修改. post:一些开发板上电检测代码,一般不消修改. tool:编译u-boot必要的一些工具代码,不用修改. README:文本文档,u-boot的编译,配置阐明. Makefile: 管理u-boot的Makefile文件—移植u-boot时候要在这个文件 添加一个本身的开发板配置选项. 3. u-boot 的启动进程 3.1? u-boot 启动阶段 ? ? ? 分两部门: 1)汇编部门—启动代码;入口: cpu/构架文件夹/start.S 2) C语言代码部门.u-boot复杂功能都是这个阶段实现. 进口:lib_*/board.c 中void start_armboot (void)函数. 任何一个开发板的u-boot都是从cpu/构架文件夹/start.S 文件开端执行. start.S:启动代码,负责异常向量表界说,初始化CPU时钟,存储器配置,堆栈配置,复制代码到内存中,跳到到C代码阶段. 3.2 start.S阐发 以xyd2440为例子阐发 进口文件:start.S (cpuarm920t)? . 事情内容: 1.? ? ? ? 异常向量表界说 2.? ? ? ? 关看门狗 3.? ? ? ? 关中断 4.? ? ? ? 设置装备摆设时钟 5.? ? ? ? 配置存储器节制器 6.? ? ? ? 设置装备摆设栈 7.? ? ? ? 复制代码到内存 8.? ? ? ? 清BSS段 9.? ? ? ? 跳转到C代码执行. 3.2.1 弥补:GNU 汇编知识 1)可以使用C的办法包含C语言头文件,例如: 2).globl 关键字:声明一个全局的标号,全局标号,其他可见,可以使用这个标记. 4).balignl关键字:在当前位置以指定对齐方式存放数字. #define S_FRAME_SIZE?72 ?add?r5,#S_SP 3.3 阐发 : _undefined_instruction:?.word undefined_instruction 当整个u-boot流程走完之后,就真正进入linux的启动体系了. 所以,如果对u-boot整理流程通过软件来认识一边的话,就完全知道linux在启动时,干了哪些事.就像window启动时,会呈现一些信息,告诉你当前执行到哪里,执行了什么事,一目了然. 本文永远更新链接地址: 《LINUX实战:u-boot 1.3.4源码分析详细教程》是否对您有启发,欢迎查看更多与《LINUX实战:u-boot 1.3.4源码分析详细教程》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |