(1)
MACHINE_START //(mach-smdkv210.c)
smdkv210_map_io();
MACHINE_END
(2)
smdkv210_map_io——>
(3)
s5p_init_io()
{
s3c_init_cpu(idcode,
cpu_ids, ARRAY_SIZE(cpu_ids)); //查看本文件的cpu_ids
}
(4)
s3c_init_cpu()
{
cpu->map_io(); //回调对应的.map_io
=
s5pv210_map_io, //(在cpu_ids中的)
}
参考:
/********************************************************************
static struct cpu_table cpu_ids[] __initdata = {
{
.idcode
= 0x56440100,
.idmask
= 0xffffff00,
.map_io
= s5p6440_map_io,
.init_clocks
= s5p6440_init_clocks,
.init_uarts
= s5p6440_init_uarts,
.init
= s5p6440_init,
.name
= name_s5p6440,
}, {
.idcode
= 0x36442000,
.idmask
= 0xffffff00,
.map_io
= s5p6442_map_io,
.init_clocks
= s5p6442_init_clocks,
.init_uarts
= s5p6442_init_uarts,
.init
= s5p6442_init,
.name
= name_s5p6442,
}, {
.idcode
= 0x43100000,
.idmask
= 0xfffff000,
.map_io
= s5pc100_map_io,
.init_clocks= s5pc100_init_clocks, //110时钟初始化
.init_uarts
= s5pc100_init_uarts,
.init
= s5pc100_init,
.name
= name_s5pc100,
}, {
.idcode
= 0x43110000,
.idmask
= 0xfffff000,
.map_io
=
s5pv210_map_io,
.init_clocks= s5pv210_init_clocks, //210时钟初始化
.init_uarts
= s5pv210_init_uarts,
.init
= s5pv210_init,
.name
= name_s5pv210,
},
};
**********************************************************************************/
(5)
smdkv210_map_io ——>
①
s5p_init_io——>
——>②s3c24xx_init_clocks——>
① s5p_init_io——>s3c_init_cpu——>
cpu->map_io(); //回调对应的.map_io = s5pv210_map_io, //(在cpu_ids中的)
②s3c24xx_init_clocks——>s5pv210_init_clocks——>s5pv210_register_clocks();
详见:云笔记