mini2440的IO内存映射是在函数mini2440_map_io()函数中的s3c24xx_init_io(mini2440_iodesc, ARRAY_SIZE(mini2440_iodesc));我们发现mini2440_iodesc是一个空的。static struct map_desc mini2440_iodesc[] __initdata = {
};
那么怎么映射呢。
struct map_desc {
};
void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
{
}
s3c24xx_init_io()函数里面iotable_init(mach_desc, size)并映射什么。实际的映射在iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
下面看s3c_iodesc是怎么定义的。
static struct map_desc s3c_iodesc[] __initdata = {
};
IODESC_ENT()宏定义:
#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
所以我们可以得到展开的s3c_iodesc[]
static struct map_desc s3c_iodesc[] __initdata = {
};
我们可以找到S3C24XX_VA_GPIO,S3C24XX_PA_GPIO...可以在/* linux/include/asm-arm/plat-s3c24xx/map.h找到他的定义。
我们看看GPIO