MACHINE_START宏

转载 2011年01月12日 12:20:00
MACHINE_START宏
 
linux2.6.18内核,在Mach-s3c2410.c文件中,有如下的宏定义:
 

MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch to SMDK2410 */
 /* Maintainer: Jonas Dietsche */
 .phys_io = S3C2410_PA_UART,
 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
 .boot_params = S3C2410_SDRAM_PA + 0x100,
 .map_io = smdk2410_map_io,
 .init_irq = s3c24xx_init_irq,
 .init_machine = smdk_machine_init,
 .timer = &s3c24xx_timer,
MACHINE_END

 
MACHINE_START定义在include/asm-arm/mach/arch.h中

#define MACHINE_START(_type,_name) /
static const struct machine_desc __mach_desc_##_type /
 __attribute_used__ /
 __attribute__((__section__(".arch.info.init"))) = { /
 .nr = MACH_TYPE_##_type, /
 .name = _name,
#define MACHINE_END /
};

 
将前面定义的MACHINE_START展开后得到,

static const struct machine_desc __mach_desc_SMDK2410
 __attribute_used__
 __attribute__((__section__(".arch.info.init"))) = {
 .nr = MACH_TYPE_SMDK2410, /* architecture number */
 .name = "SMDK2410", /* architecture name */
 /* Maintainer: Jonas Dietsche */
 .phys_io = S3C2410_PA_UART, /* start of physical io */
 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
 .boot_params = S3C2410_SDRAM_PA + 0x100, /* tagged list */
 .map_io = smdk2410_map_io, /* IO mapping function */
 .init_irq = s3c24xx_init_irq,
 .init_machine = smdk_machine_init,
 .timer = &s3c24xx_timer,
}

 
MACH_TYPE_SMDK2410定义在arch/include/asm-arm/mach-types.h内,值为193.
/* arch/include/asm-arm/mach-types.h */
#define MACH_TYPE_SMDK2410             193
这个值是机器的类型值,编译时由arch/arm/tool/mach-types里面定义的数据生成的。
/* arch/arm/tool/mach-types */
smdk2410  ARCH_SMDK2410  SMDK2410  193

由上发现,MACHINE_START主要是定义了"struct machine_desc"的类型,放在 section(".arch.info.init"),是初始化数据,Kernel 起来之后将被丢弃。

各个成员函数在不同时期被调用:
1. .init_machine 在 arch/arm/kernel/setup.c 中被 customize_machine 调用,放在 arch_initcall() 段里面,会自动按顺序被调用。
2. init_irq在start_kernel() --> init_IRQ() --> init_arch_irq() 被调用
3. map_io 在 setup_arch() --> paging_init() --> devicemaps_init()被调用
其他主要都在 setup_arch() 中用到。

相关文章推荐

MACHINE_START宏

linux2.6.18内核,在Mach-s3c2410.c文件中,有如下的宏定义: MACHINE_START(SMDK2410,"SMDK2410")/* @TODO: request a new ...

MACHINE_START 宏(转)

linux2.6.18内核,在Mach-s3c2410.c文件中,有如下的宏定义:   MACHINE_START(SMDK2410, "SMDK2410")    ....

MACHINE_START MACHINE_END 宏

一、定义 #define MACHINE_START(_type,_name) \ //板类型,板名字 static const struct machine_desc __mach_desc_...

【转】MACHINE_START分析

本文转自: http://blog.sina.com.cn/s/blog_4ae5be930100nyfl.html 在友善mini2440提供的linux2.6.32.2内核中,有如下定义: MAC...

Linux MACHINE_START

转自:http://blog.chinaunix.net/uid-12617001-id-3767393.html 玩过或者移植过arm-linux的都应该知道在/arch/arm目录下...

MACHINE_START

#define MACHINE_START(_type,_name) \ static const struct machine_desc __mach_desc_##_type \ __use...

MACHINE_START分析

在友善mini2440提供的linux2.6.32.2内核中,有如下定义: MACHINE_START(MINI2440, "FriendlyARM Mini2440 development ...

从MACHINE_START开始

在学习AP20 kernel代码的时候,看到文件kernel/arch/arm/mach-tegra/board-stingray.c 一个重要结构: MACHINE_START(STINGRAY...

深入理解MACHINE_START

注:下面的内容是以linux-2.6.38和mini6410为例进行学习的。         玩过或者移植过arm-linux的都应该知道在/arch/arm目录下有许多与具体处理器相关的目录,当然...

linuxMACHINE_START-MACHINE_END

在友善mini2440提供的linux2.6.32.2内核中,有如下定义: MACHINE_START(MINI2440, "FriendlyARM Mini2440 development b...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)