X210之uboot的启动第二阶段

本文详细介绍了U-Boot启动的第二阶段,重点关注全局数据结构gd_t的定义和作用。gd_t包含如板子信息、波特率、重定位偏移量等关键数据,并通过DECLARE_GLOBAL_DATA_PTR将其放在寄存器r8中。同时,文章引用了两篇优快云博客作为参考,深入解析了相关代码和概念。

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

uboot的启动第二阶段

代码所在文件名为:board.c

typedef int (init_fnc_t) (void);
/*
这是一个函数类型。
*/
//代码70行
DECLARE_GLOBAL_DATA_PTR	//#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
/*
 *定义了一个全局变量gd(是一个指针类型的,占4个字节)。
 *volatile修饰表示可变。
 *用register修饰表示这个变量尽可能的放在寄存器中。
 *asm("r8")是gcc支持的一种语法,作用是将gd放在寄存器r8中。
 *gd_t是一个结构体,里面的内容是uboot中常用的全局变量(定义在include/asm-arm/global_data.h中)
*/
 
typedef	struct	global_data {
	bd_t		*bd;
	unsigned long	flags;           // struct board_info指针,保存板子信息
	unsigned long	baudrate;		 //串口波特率
	unsigned long	have_console;	/* serial_init() was called */
	unsigned long	reloc_off;	/* Relocation Offset */
	unsigned long	env_addr;	/* Address  of Environment struct */
	unsigned long	env_valid;	/* Checksum of Environment valid? */
	unsigned long	fb_base;	/* base address of frame buffer */
#ifdef CONFIG_VFD
	unsigned char	vfd_type;	/* display type */
#endif
#if 0
	unsigned long	cpu_clk;	/* CPU clock in Hz!		*/
	unsigned long	bus_clk;
	phys_size_t	ram_size;	/* RAM size */
	unsigned long	reset_status;	/* reset status register at boot */
#endif
	void		**jt;		/* jump table */
} gd_t;

参考博文

https://blog.youkuaiyun.com/wendellluntan/article/details/74227799

https://blog.youkuaiyun.com/wowricky/article/details/83281040

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值