在 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,