zoukankan      html  css  js  c++  java
  • MACHINE_START宏

    http://www.cublog.cn/u2/60011/showart_1010489.html

    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() 中用到。

  • 相关阅读:
    C# 创建Excel并写入内容
    c#中使用excel
    C#中EXCEL表格的内容进度条实现
    WinForm c#操作Excel
    如何使用 Visual C# .NET 处理 Excel 事件
    C#与Excel的交互示例
    c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
    C#在excel中添加超链接
    ASP.NET学习笔记(3)
    ASP.NET学习笔记(4)
  • 原文地址:https://www.cnblogs.com/cute/p/2083721.html
Copyright © 2011-2022 走看看