background image

  在 linux 中 machine 对应一个设备,对于开发者而言对应一个新

的 项 目 , 项 目 开 展 的 初 始 需 要 对 应 定 义 一 个 MACH , 在

arch/arm/mach-xxx/目录下,此文件中定义了 GPIO 的使用,外

设,i2c 总线等系统信息,所以在参加一个项目的开始,应该认真

的分析 machine 定义文件,了解项目的情况。

    在 arch/arm/下定义了很多 mach-xxx 的文件夹,一般是按照

厂商或者平台命名,例如高通平台的为 mach-msm,marvell 的

为 mach-mmp,mach-pxa。

 
本文讲解 LINUX 中用 MACHINE_START/MACHINE_END 定义的 MACH,并给出定义的各个成员函数
在初始化过程中被调用的时机。

 
1.      定义一个 MACH
 
LINUX 中 MACHINE 定义是用 MACHINE_START()/MACHINE_END 两个宏来实现的,比如 MSM 的实
现(arch/arm/mach-msm/board-halibut.c):
 
1.MACHINE_START(HALIBUT,"Halibut Board (QCT SURF7200A)") 
 2.         .boot_params      = 0x10000100, 
 3.         .map_io           = halibut_map_io, 
 4.         .init_irq         = halibut_init_irq, 
 5.         .init_machine     = halibut_init, 
 6.         .timer            = &msm_timer, 
 7.MACHINE_END 
 
2. MACHINE_START / MACHINE_END 定义
 
上面的定义中,用到了这两个宏 MACHINE_START/MACHINE_END,下面是它们具体的定义(在
arch/arm/include/asm/mach/arch.h 中):
 
1.#defineMACHINE_START(_type,_name)                        \  
 2.static const structmachine_desc __mach_desc_##_type      \ 
 3. __used                                                  \ 
 4. __attribute__((__section__(".arch.info.init")))= {      \ 
 5.         .nr             = MACH_TYPE_##_type,            \ 
 6.         .name           = _name,