linux 2440 开发板开机启动时映射了哪些IO
来源:互联网 发布:哈工大软件下载 编辑:程序博客网 时间:2024/06/06 03:30
MACHINE_START(S3C2440, "SMDK2440")
/* Maintainer: Ben Dooks <ben@fluff.org> */
.phys_io = S3C2410_PA_UART,
.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.init_irq = s3c24xx_init_irq,
.map_io = smdk2440_map_io,
.init_machine = smdk2440_machine_init,
.timer = &s3c24xx_timer,
MACHINE_END
之前的启动代码分析中发现, map_io 的作用主要是做物理地址到虚拟地址的静态映射,所以
smdk2440_map_io 被很早的调用了
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(16934400);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
发现,这调用了 24xx 系列的通用函数,smdk2440_iodesc 给了一个板级的映射接口
方便添加需要的映射,其他就是初始化时钟和uart口。
iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
/* minimal IO mapping */
static struct map_desc s3c_iodesc[] __initdata = {
IODESC_ENT(GPIO),
IODESC_ENT(IRQ),
IODESC_ENT(MEMCTRL),
IODESC_ENT(UART)
};
#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x),
S3C24XX_SZ_##x, MT_DEVICE }
可以看出,这些IO是最小化必须被映射的,包括
S3C24XX_PA_GPIO 0X56000000
S3C24XX_PA_IRQ 0x4A000000
S3C24XX_PA_MEMCTRL 0X48000000
S3C24XX_PA_UART 0X50000000
接着还需要调用
s3c_init_cpu
cpu->map_io(); 根据不同的CPUID决定,例如调用的是 s3c244x_map_io
void __init s3c244x_map_io(void)
{
/* register our io-tables */
iotable_init(s3c244x_iodesc, ARRAY_SIZE(s3c244x_iodesc));
}
其中
static struct map_desc s3c244x_iodesc[] __initdata = {
IODESC_ENT(CLKPWR),
IODESC_ENT(TIMER),
IODESC_ENT(WATCHDOG),
};
S3C24XX_PA_CLKPWR
S3C24XX_PA_TIMER
S3C24XX_PA_WATCHDOG
这些都是一般性的通用函数,例如设置PLL,时钟,看门狗等,是属于基本内容,都必须映射的。
映射函数到此基本完毕,对于没有映射的,可以采用动态的 ioremap形式,或者自己添加静态映射
。
/* Maintainer: Ben Dooks <ben@fluff.org> */
.phys_io = S3C2410_PA_UART,
.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.init_irq = s3c24xx_init_irq,
.map_io = smdk2440_map_io,
.init_machine = smdk2440_machine_init,
.timer = &s3c24xx_timer,
MACHINE_END
之前的启动代码分析中发现, map_io 的作用主要是做物理地址到虚拟地址的静态映射,所以
smdk2440_map_io 被很早的调用了
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(16934400);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
发现,这调用了 24xx 系列的通用函数,smdk2440_iodesc 给了一个板级的映射接口
方便添加需要的映射,其他就是初始化时钟和uart口。
iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
/* minimal IO mapping */
static struct map_desc s3c_iodesc[] __initdata = {
IODESC_ENT(GPIO),
IODESC_ENT(IRQ),
IODESC_ENT(MEMCTRL),
IODESC_ENT(UART)
};
#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x),
S3C24XX_SZ_##x, MT_DEVICE }
可以看出,这些IO是最小化必须被映射的,包括
S3C24XX_PA_GPIO 0X56000000
S3C24XX_PA_IRQ 0x4A000000
S3C24XX_PA_MEMCTRL 0X48000000
S3C24XX_PA_UART 0X50000000
接着还需要调用
s3c_init_cpu
cpu->map_io(); 根据不同的CPUID决定,例如调用的是 s3c244x_map_io
void __init s3c244x_map_io(void)
{
/* register our io-tables */
iotable_init(s3c244x_iodesc, ARRAY_SIZE(s3c244x_iodesc));
}
其中
static struct map_desc s3c244x_iodesc[] __initdata = {
IODESC_ENT(CLKPWR),
IODESC_ENT(TIMER),
IODESC_ENT(WATCHDOG),
};
S3C24XX_PA_CLKPWR
S3C24XX_PA_TIMER
S3C24XX_PA_WATCHDOG
这些都是一般性的通用函数,例如设置PLL,时钟,看门狗等,是属于基本内容,都必须映射的。
映射函数到此基本完毕,对于没有映射的,可以采用动态的 ioremap形式,或者自己添加静态映射
。
- linux 2440 开发板开机启动时映射了哪些IO
- linux开机自启动文件有哪些
- Linux开发板下自动开机时启动应用程序
- 设置linux开发板开机启动画面
- Linux启动中加载了哪些服务
- Linux启动中加载了哪些服务
- realARM s5pv210开发板wifi开机启动设置方法 开机启动linux应用程序
- 在Windows下删除了linux分区,开机时无法启动Windows开机引导
- ARM-Linux开机自启动设置-mini2440开发板
- ARM-Linux开机自启动设置-mini2440开发板
- linux开发板下更改开机启动的画面(2)
- ARM-Linux开机自启动设置-mini2440开发板
- ARM-Linux开机自启动设置ARM9开发板
- ARM-Linux开机自启动设置-mini2440开发板
- ARM-Linux开机自启动设置-mini2440开发板
- ARM-Linux开机自启动设置-ok6410开发板
- 计算机开机启动系统都经过了哪些步骤?计算机是如何启动系统的?
- ARM开发板开机启动设置
- CTeX套装自带的TeXworks编辑器使用简说
- 三星Android210评估板Android4.0源码
- python 系统学习笔记(五)---字典
- source insight 保存时删除多余空格,去除多余空格 space tab键
- AfxBeginThread和CreateThread具体区别
- linux 2440 开发板开机启动时映射了哪些IO
- 树莓派系统启动信息解略
- (转)android工程创建的jar包使用proguard进行混淆
- 二叉树的生成和遍历
- Keil51 WARNING L15: MULTIPLE CALL TO SEGMENT
- 关于4412开发板简单介绍
- The Nested Set Model
- 什么是依赖注入
- 【Android】ScrollView嵌套GridView的解决办法