MACHINE_START-内核板级初始化实现机制(linux3.1.0)

本文详细介绍了Linux内核针对TI AM335x系列开发板的初始化过程,主要关注board-am335xevm.c文件中的初始化函数,包括map_io、init_early、init_irq和time_init等步骤。文章通过分析start_kernel和setup_arch函数调用来梳理整个初始化流程,并解释了如何根据uboot传递的参数找到对应的machine_desc。
摘要由CSDN通过智能技术生成

在驱动开发时,我们都是以一块开发板为基础移植驱动程序。每一块开发板对应一个板级文件,如开发

TI AM335x系列,则对应board-am335xevm.c,这个文件完成芯片和板级的初始化工作。对于驱动开发,还有

一个很重要的文件devices.c,这个文件主要是设备接口相关资源。

今天就来说说board-am335xevm.c文件,如何全面的了解这个文件呢?先找到这个文件的入口,在文件的

最后几行:

MACHINE_START(AM335XEVM, "am335xevm")
	/* Maintainer: Texas Instruments */
	.atag_offset	= 0x100,
	.map_io		= am335x_evm_map_io,
	.init_irq	= ti816x_init_irq,
	.init_early	= am335x_init_early,
	.timer		= &omap3_am33xx_timer,
	.init_machine	= am335x_evm_init,
MACHINE_END

看以看出,am335x_evm_map_io,i816x_init_irq,am335x_init_early,am335x_evm_init就是各个初始化函数

的总入口函数。

下面来分析一下这几个函数是如何被调用,何时被调用的?
#define MACHINE_START(_type,_name)			\
static const struct machine_desc __mach_desc_##_type	\
 __used							\
 __attribute__((__section__(".arch.info.init"))) = {	\
	.nr		= MACH_TYPE_##_type,		\
	.name		= _name,
#define MACHINE_END				\
};

宏展开之后得到:

static const struct machine_desc __mach_desc_AM335XEVM	\
 __attribute__((__used__))				\
 __attribute__((__section__(".arch.info.init"))) = {	\
	.nr		= MACH_TYPE_AM335XEVM,		\
	.name		= _name,
	.atag_offset	= 0x100,
	.map_io		= am335x_evm_map_io,
	.init_irq	= ti816x_init_irq,
	.init_early	=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值