struct machine

mac2025-02-05  3

MACHINE_START的使用及各个成员函数的的放置位置以及调用过程如下: MACH_TYPE_SMDK2410这个值是目标板的类型值,定义在arch/include/asm-arm/mach-types.h内,值为193.

/* arch/include/asm-arm/mach-types.h */ #define MACH_TYPE_SMDK2410 193

由上发现,MACHINE_START主要是定义了"struct machine_desc"的类型,放在 section(".arch.info.init"),是初始化数据,其所占用的内存在内核起来之后将会被释放。

这里的map_io成员即内核提供给用户的创建外设I/O资源到内核虚拟地址静态映射表的接口函数。map_io成员函数会在系统初始化过程中被调用,流程如下: start_kernel -> setup_arch() --> paging_init()中被调用 struct machine_desc 结构体的各个成员函数在不同时期被调用: 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( )被调用

其他主要都在 setup_arch() 中用到。

用户可以在定义machine_desc结构体时指定map_io的接口函数,我们也正是这样做的。

最新回复(0)