uboot源码分析

本文介绍了u-boot源码的主要文件结构和启动阶段。config.mk用于Makefile调用,主Makefile负责整个编译过程。在硬件层面,涉及arch目录的处理器相关代码,cmd目录包含命令文件,common目录包含通用代码。启动阶段,lowlevel_init关闭缓存并初始化,board_init_f进行硬件初始化,board_init_r调用一系列初始化函数,最后run_main_loop执行命令行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

u-boot 源码版本:u-boot-2017.05-rc2

u-boot文件介绍

u-boot源码中文件内容如下:

f0e2b19fd733d7c01b7eeb7a0218a937.png

针对有代表性的文件,我们简单介绍其功能

  1. config.mk文件
    是一个Makefile文件,在某个Makefile中会去调用它

  2. Makefile文件
    这个是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的。

  3. api文件夹
    硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。

  4. arch
    与处理器相关的文件。

  5. cmd
    u-boot命令文件,uboot中的命令都在该部分中。

  6. common
    这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。

  7. configs
    configs文件夹:存放uboot配置文件,一般半导体或开发板厂商会制作好一个配置文件,供用户在此基础上进行修改,配置文件统一命名为“xxx_defconfig”,xxx表示开发板名字。
    使用"make xxx_defconfig"命令,即可配置uboot。

  8. fs
    文件系统:FAT、JFFS2、EXT2等

  9. net
    网络协议:NFS、TFTP、RARP、DHCP等等

  10. tools
    编译S-Record或U-Boot映像等相关工具,制作bootm引导的内核映像文件工具mkimage源码就在此

  11. disk
    磁盘驱动的分区处理代码

  12. drivers
    包含几乎所有外围芯片的驱动,网卡、USB、串口、LCD、Nand Flash等等

  13. include
    头文件,包括各CPU的寄存器定义,文件系统、网络等等

  14. lib
    公用库函数

  15. u-boot
    初步链接后得到的uboot文件

  16. u-boot-nodtb.bin
    在u-boot的基础上,经过objcopy去除符号表信息之后的可执行程序

  17. u-boot.bin
    在需要dtb的情况下,直接由u-boot-dtb.bin复制而来,也就是编译u-boot的最终目标

  18. u-boot.lds
    uboot的连接脚本

  19. System.map
    连接之后的符号表文件

  20. u-boot.cfg
    由uboot配置生成的文件

uboot第一启动阶段
/*
	 * set the cpu to SVC32 mode
	 */
    //设置cpu进入管理员模式,并且关闭FIQ和IRQ
	mrs	r0, cpsr
	bic	r0, r0, #0x1f
	orr	r0, r0, #0xd3
	msr	cpsr, r0
#ifdef CONFIG_S3C24X0
	/* turn off the watchdog */
    //关闭看门狗

# if defined(CONFIG_S3C2400)
#  define pWTCON	0x15300000
#  define INTMSK	0x14400008	/* Interrupt-Controller base addresses */
#  define CLKDIVN	0x14800014	/* clock divisor register */
#else
#  define pWTCON	0x53000000
#  define INTMSK	0x4A000008	/* Interrupt-Controller base addresses */
#  define INTSUBMSK	0x4A00001C
#  define CLKDIVN	0x4C000014	/* clock divisor register */
# endif

	ldr	r0, =pWTCON
	mov	r1, #0x0
	str	r1, [r0]
/*
	 * mask all IRQs by setting all bits in the INTMR - default
	 */
   //设置所有中断配置为默认配置
	mov	r1, #0xffffffff
	ldr	r0, =INTMSK
	str	r1, [r0]
# if defined(CONFIG_S3C2410)
	ldr	r1, =0x3ff
	ldr	r0, =INTSUBMSK
	str	r1, [r0]
# endif
//跳转到CPU初始化处进行,在其中主要是执行 caches 的关闭 和 MMU的关闭,之后跳转到 
//lowlevel_init 中执行,进行系统总线的初始化。

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
	bl	cpu_init_crit
#endif
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
cpu_init_crit:
	/*
	 * flush v4 I/D caches
	 */
	mov	r0, #0
	mcr	p15, 0, r0, c7, c7, 0	/* flush v3/v4 cache */
	mcr	p15, 0, r0, c8, c7, 0	/* flush v4 TLB */

	/*
	 * disable MMU stuff and caches
	 */
	mrc	p15, 0, r0, c1, c0, 0
	bic	r0, r0, #0x00002300	@ clear bits 13, 9:8 (--V- --RS)
	bic	r0, r0, #0x00000087	@ clear bits 7, 2:0 (B--- -CAM)
	orr	r0, r0, #0x00000002	@ set bit 1 (A) Align
	orr	r0, r0, #0x00001000	@ set bit 12 (I) I-Cache
	mcr	p15, 0, r0, c1, c0, 0

#ifndef CONFIG_SKIP_LOWLEVEL_INIT_ONLY
	/*
	 * before relocating, we have to setup RAM timing
	 * because memory timing is board-dependend, you will
	 * find a lowlevel_init.
所有资料来源网上,与朋友分享 u-boot-1.1.6之cpu/arm920t/start.s分析 2 u-boot中.lds连接脚本文件的分析 12 分享一篇我总结的uboot学习笔记(转) 15 U-BOOT内存布局及启动过程浅析 22 u-boot中的命令实现 25 U-BOOT环境变量实现 28 1.相关文件 28 2.数据结构 28 3.ENV 的初始化 30 3.1env_init 30 3.2 env_relocate 30 3.3*env_relocate_spec 31 4. ENV 的保存 31 U-Boot环境变量 32 u-boot代码链接的问题 35 ldr和adr在使用标号表达式作为操作数的区别 40 start_armboot浅析 42 1.全局数据结构的初始化 42 2.调用通用初始化函数 43 3.初始化具体设备 44 4.初始化环境变量 44 5.进入主循环 44 u-boot编译过程 44 mkconfig文件的分析 47 从NAND闪存中启动U-BOOT的设计 50 引言 50 NAND闪存工作原理 51 从NAND闪存启动U-BOOT的设计思路 51 具体设计 51 支持NAND闪存的启动程序设计 51 支持U-BOOT命令设计 52 结语 53 参考文献 53 U-boot给kernel传参数和kernel读取参数—struct tag (以及补充) 53 1 、u-boot 给kernel 传RAM 参数 54 2 、Kernel 读取U-boot 传递的相关参数 56 3 、关于U-boot 中的bd 和gd 59 U-BOOT源码分析及移植 60 一、u-boot工程的总体结构: 61 1、源代码组织 61 2.makefile简要分析 61 3、u-boot的通用目录是怎么做到与平台无关的? 63 4、smkd2410其余重要的文件 : 63 二、u-boot的流程、主要的数据结构、内存分配 64 1、u-boot的启动流程: 64 2、u-boot主要的数据结构 66 3、u-boot重定位后的内存分布: 68 三、u-boot的重要细节 。 68 关于U-boot中命令相关的编程 : 73 四、U-boot在ST2410的移植,基于NOR FLASH和NAND FLASH启动。 76 1、从smdk2410到ST2410: 76 2、移植过程: 76 3、移植要考虑的问题: 77 4、SST39VF1601: 77 5、我实现的flash.c主要部分: 78 6、增加从Nand 启动的代码 : 82 7、添加网络命令。 87
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值