• machine_desc结构体【转】


    转自:http://blog.csdn.net/myarrow/article/details/8609564

    1. 简介

      内核提供了一个重要的结构体struct machine_desc ,这个结构体在内核移植中起到相当重要的作用,内核通过machine_desc结构体来控制系统体系架构相关部分的初始化。

           machine_desc结构体通过MACHINE_START宏来初始化,在代码中, 通过在start_kernel->setup_arch中调用setup_machine_fdt来获取。

    2. machine_desc结构体

             machine_desc结构体定义如下:

    [cpp] view plaincopy
     
    1. /* 在文件:arch/arm/include/asm/mach/arch.h */  
    2. struct machine_desc {  
    3.     unsigned int        nr;     /* architecture number  */  
    4.     const char      *name;      /* architecture name    */  
    5.     unsigned long       boot_params;    /* tagged list      */  
    6.     const char      **dt_compat;    /* array of device tree 
    7.                          * 'compatible' strings */  
    8.   
    9.     unsigned int        nr_irqs;    /* number of IRQs */  
    10.   
    11.     unsigned int        video_start;    /* start of video RAM   */  
    12.     unsigned int        video_end;  /* end of video RAM */  
    13.   
    14.     unsigned int        reserve_lp0 :1; /* never has lp0    */  
    15.     unsigned int        reserve_lp1 :1; /* never has lp1    */  
    16.     unsigned int        reserve_lp2 :1; /* never has lp2    */  
    17.     unsigned int        soft_reboot :1; /* soft reboot      */  
    18.     void            (*fixup)(struct machine_desc *,  
    19.                      struct tag *, char **,  
    20.                      struct meminfo *);  
    21.     void            (*reserve)(void);/* reserve mem blocks  */  
    22.     void            (*map_io)(void);/* IO mapping function  */  
    23.     void            (*init_early)(void);  
    24.     void            (*init_irq)(void);  
    25.     struct sys_timer    *timer;     /* system tick timer    */  
    26.     void            (*init_machine)(void);  
    27. #ifdef CONFIG_MULTI_IRQ_HANDLER  
    28.     void            (*handle_irq)(struct pt_regs *);  
    29. #endif  
    30. };  

     3. machine_desc初始化

    machine_desc初始化例子如下:

    [cpp] view plaincopy
     
    1. MACHINE_START(MA, "myboard")  
    2.     .boot_params    = PLAT_PHYS_OFFSET + 0x800,  
    3.     .fixup      = ma_fixup,  
    4.     .reserve             = &ma_reserve,  //内存在交给Linux管理之前,进行预留  
    5.     .map_io     = ma_map_io,  
    6.     .init_irq   = ma_init_irq,  
    7.     .timer      = &ma_timer,  
    8.     .init_machine   = machine_ma_board_init,  
    9. MACHINE_END  

    MACHINE_START和MACHINE_END宏定义如下:

    [cpp] view plaincopy
     
    1. /* 
    2.  * Set of macros to define architecture features.  This is built into 
    3.  * a table by the linker. 
    4.  */  
    5. #define MACHINE_START(_type,_name)            
    6. static const struct machine_desc __mach_desc_##_type      
    7.  __used                           
    8.  __attribute__((__section__(".arch.info.init"))) = {      
    9.     .nr     = MACH_TYPE_##_type,          
    10.     .name       = _name,  
    11.   
    12. #define MACHINE_END               
    13. };  
  • 相关阅读:
    4.0中的并行计算和多线程详解(一)
    Dojo工具包简介
    javascript中event.keyCode
    iText简介(转)
    ServletContext
    java文件加解密算法
    ResultSet 的相关介绍
    spring的AOP的四种实现方式
    java实现文件zip压缩或者解压缩
    Hibernate查询数据的几种方式以及HQL用法及参数的几种使用方法
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/4837252.html
Copyright © 2020-2023  润新知