首先引用wiki上的简介:
u-boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。
u-boot最先是由德国DENX软件中心团队开发,后续众多有志于开放源码bootloader移植工作的嵌入式开发人员将各个不同系列嵌入式处理器的移植工作不断展开和深入,
以支持了更多的嵌入式操作系统的装载与引导。
选择u-boot的理由:
• 开放源码;
• 支持多种嵌入式操作系统内核的引导,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
• 较高的可靠性和稳定性;高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
• 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
• 较为丰富的开发调试文档与强大的网络技术支持;
• 基于以上理由本篇文章对现在主流的armv8架构的u-boot启动流程进行详细分析,以便所有人快速学习和理解u-boot的工作流程。
u-boot源码结构
这里只对一些常用的目录进行说明:
• arch:各种架构的启动初始化流程代码,链接脚本等均在此目录对应的架构中存放;
• board:包含了大部分厂商的board初始化代码,基本平台化相关的代码都在对应的board目录中,早期的一些board代码在arch/xxx/xxx-+ mach中,现在基本不会放在arch目录下面了;
• cmd:包含了大量实用的u-boot命令的实现,比如md,cp,cmp,tftp,fastboot,ext4load等命令的实现,我们也可以在此处添加自己实现的命令;
• common:包含了u-boot的核心初始化代码,包括board_f,board_r,spl等一系列代码;
• configs:包含了所有board的配置文件,可直接使用;
• drivers:大量驱动代码的存放处;
• dts:编译生成dtb,内嵌dtb到u-boot的编译规则定义目录;
• env:环境变量功能实现代码;
• fs:文件系统读写功能的实现,里面包含了各类文件系统的实现;
• include:所有公用头文件的存放路径;
• lib:大量通用功能实现,提供给各个模块使用;
• net:网络相关功能的实现;
• scripts:编译,配置文件的脚本文件存放处;
• tools:测试和实用工具的实现,比如mkimage的实现代码在此处;
全部0条评论
快来发表一下你的评论吧 !