| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> uboot基础 -> 正文阅读 |
|
[系统运维]uboot基础 |
概念: ????????U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。???????? 选择U-Boot的理由: ① 开放源码; ② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android; ③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS; ④ 较高的可靠性和稳定性; ⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦ 较为丰富的开发调试文档与强大的网络技术支持; 目录结构: * board 目标板相关文件,主要包含SDRAM、FLASH驱动; * common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; * cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件; * driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好) * doc U-Boot的说明文档; * examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c; * include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件; * lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件; * net 与网络功能相关的文件目录,如bootp,nfs,tftp; * post 上电自检文件目录。尚有待于进一步完善; * rtc RTC驱动程序; * tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具; (以上关于目录结构的说明只适应u-boot-2010.06之前版本。u-boot-2010.06之后目录结构改变 1.cpu与lib_arch合二为一,命名arch 2.增加include folder 3.分离出通用库文件夹lib ) U-Boot可支持的主要功能列表: *系统引导支持NFS挂载、从FLASH中引导压缩或非压缩系统内核; * 基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM; * CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好; *设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持; * 上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号检测; * 特殊功能XIP内核引导; 工作模式: ? ? ? ? Uboot的工作模式有启动加载模式和下载模式。启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到DDR中运行,整个过程是自动的。下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。 ????????大多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、 stage1(start.s代码结构) ????????U-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下: (1) 定义入口。由于一个可执行的image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在rom(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 (2)设置异常向量(exception vector)。 (4)初始化内存控制器 。 (5)将rom中的程序复制到ram中。 (6)初始化堆栈?。 (7)转到ram中执行,该工作可使用指令ldrpc来完成。 2、 stage2(C语言代码部分) ????????lib_arm/board.c中的start armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要完成如下操作: (1)调用一系列的初始化函数。 (2)初始化flash设备。 (3)初始化系统内存分配函数。 (4)如果目标系统拥有nand设备,则初始化nand设备。 (5)如果目标系统有显示设备,则初始化该类设备。 (6)初始化相关网络设备,填写ip地址等。 (7)进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。 深入理解uboot 2016 - 基础篇(处理器启动流程分析)_kernel_yx的博客-CSDN博客 深入理解uboot 2016 - 基础篇(处理器启动流程分析)https://blog.csdn.net/chenchengwudi/article/details/80874629 03. Uboot启动流程详解 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:49:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |