国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MACHINE_START宏(內核啟動相關) - 東海的日志 - 網(wǎng)易博客

MACHINE_START宏(內核啟動相關)

linux內核相關 2009-03-05 15:01:12 閱讀102 評論0   字號: 訂閱

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里面定義的數(shù)據(jù)生成的。
/* arch/arm/tool/mach-types */
smdk2410  ARCH_SMDK2410  SMDK2410  193

由上發(fā)現(xiàn),MACHINE_START主要是定義了"struct machine_desc"的類型,放在 section(".arch.info.init"),是初始化數(shù)據(jù),Kernel 起來之后將被丟棄。

各個成員函數(shù)在不同時期被調用:
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() 中用到。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【轉】ARM Linux靜態(tài)映射分析
ARM處理器上的linux內核是怎么啟動的
有關uboot與kernel機器號問題
淺談分析Arm linux 內核移植及系統(tǒng)初始化的過程
uboot-與linux內核機器碼
FS2410開發(fā)板cs8900A的驅動移植linux2.6.35
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服