MACHINE_START MACHINE_END 宏

本文详细介绍了Linux内核中MACHINE_START和MACHINE_END宏的用途和工作原理。这两个宏用于定义和初始化machine_desc结构体,其中包含板级初始化函数和中断处理等功能。在启动流程中,MACHINE_START宏将machine_desc结构体编译到特定段,之后start_kernel函数会调用setup_arch进行板级设置,涉及中断初始化、系统定时器以及板级初始化等关键步骤。
摘要由CSDN通过智能技术生成

一、定义

#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				\
};


MACHINE_START和MACHINE_END框起了一个machine_desc结构体的声明并根据MACHINE_START宏的参数初始化其.nr和.name成员

并将该结构体标记编译到.arch.info.init段

在MACHINE_START和MACHINE_END宏之间可以初始化machine_desc结构体的剩余成员

machine_desc结构体的定义

struct machine_desc {
	unsigned int	nr;		/* architecture number 编号	*/
	const char	*name;		/* architecture name 名字	*/
	unsigned long	boot_params;	/* tagged list		*/
	unsigned int	nr_irqs;		/* number of IRQs 中断数	*/
	unsigned int	video_start;	/* start of video RAM 	*/
	unsigned int	video_end;	/* end of video RAM	*/
	unsigned int	reserve_lp0 :1;	/* never has lp0	*/
	unsigned int	reserve_lp1 :1;	/* never has lp1	*/
	unsigned int	reserve_lp2 :1;	/* never has lp2	*/
	unsigned int	soft_reboot :1;	/* soft reboot		*/
	void	(*fixup)(struct machine_desc *,struct tag *, char **,struct meminfo *);
	void	(*reserve)(void);		/* reserve mem blocks	*/
	void	(*map_io)(void);		/* IO mapping function io映射函数 */
	void	(*init_irq)(void);		/* 中断初始化函数 */
	struct sys_timer	*timer;		/* system tick timer 滴答定时器 */
	void	(*init_machine)(void);	/* 初始化函数 */
};

使用例子:

MACHINE_START(SMDKC110, "SMDKC110")
	/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
	.boot_params	= S5P_PA_SDRAM + 0x100,
	.init_irq	= s5pv210_init_irq,
	.map_io		= smdkc110_map_io,
	.init_machine	= smdkc110_machine_init,
	.timer		= &s3c24xx_timer,
MACHINE_END</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值