SylixOS的BSP开发实例之S3C2416 【第二篇】内存映射与初始布局
2015-07-24 15:16
531 查看
在SylixOS的S3C2416的BSP包中有“SylixOS/bsp/bspMap.h”文件,此文件是操作系统内存布局设置与初始映射配置,在文件的开始有内存分配的描述,描述如下图。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201507/8d7a388c6bb7e7cba8bc210d75059c22)
其中 MMU 页面标识可以在
SylixOS 的 BASE 工程中 “SylixOS/kernel/vmm/pageTable.h” 中获取到,具体参数描述如下图。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201507/231dcba047bcbcba94bfeecabb222f07)
/*********************************************************************************************************
physical memory zone
*********************************************************************************************************/
#ifdef __BSPINIT_MAIN_FILE
LW_VMM_ZONE_DESC _G_zonedescGlobal[] = {
{0x31800000, 0x01400000, LW_ZONE_ATTR_DMA}, /* 均可被 DMA 使用 */
{0x32C00000, 0x01400000, LW_ZONE_ATTR_DMA},
};
/*********************************************************************************************************
初始化内存类型与布局 (VMM 管理区的内存不需要在全局初始化表中初始化)
*********************************************************************************************************/
LW_MMU_GLOBAL_DESC _G_globaldescMap[] = {
#ifdef __BOOT_INRAM
/*
* ARM except table
*/
{ /* 中断向量表 */
0x00000000, /* ARM except table */
0x30000000, /* RAM except table */
LW_CFG_VMM_PAGE_SIZE, /* one page size */
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
/*
* IROM area
*/
{
(0x00000000 + LW_CFG_VMM_PAGE_SIZE), /* flash 剩下的空间直接映射 */
(0x00000000 + LW_CFG_VMM_PAGE_SIZE),
((8 * LW_CFG_KB_SIZE) - LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
#else /* __DEBUG_IN_FLASH */
/*
* IROM area
*/
{
(0x00000000), /* flash 直接映射 */
(0x00000000),
(8 * LW_CFG_KB_SIZE),
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
#endif /* __DEBUG_IN_RAM */
/*
* kernel space
*/
{ /* nSCS0 - SDRAM 6MByte */
(0x30000000),
(0x30000000),
(6 * 1024 * 1024), /* SylixOS Kernel Text */
(LW_VMM_FLAG_EXEC | LW_VMM_FLAG_RDWR) /* 此段可修改, 方便调试 */
},
{ /* nSCS0 - SDRAM 18MByte */
(0x30600000),
(0x30600000),
(18 * 1024 * 1024), /* SylixOS Kernel Memory */
(LW_VMM_FLAG_RDWR) /* 状态属性 CB */
},
{ /* IRAM - SRAM 8KB */
0x40000000,
0x40000000,
(8 * LW_CFG_KB_SIZE),
(LW_VMM_FLAG_EXEC | LW_VMM_FLAG_RDWR)
},
{ /* SDRAM */
0x48000000,
0x48000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* SDRAM */
0x48800000,
0x48800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* USB Host Controller */
0x49000000,
0x49000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* USB Device Controller */
0x49800000,
0x49800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Interrupt Controller */
0x4A000000,
0x4A000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HS-MMC1 Controller */
0x4A800000,
0x4A800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HS-MMC0 Controller */
0x4AC00000,
0x4AC00000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* DMA 0 - 5 Controller */
0x4B000000,
0x4B000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{
4000
/* System Controller */
0x4C000000,
0x4C000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* LCD Controller */
0x4C800000,
0x4C800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* 2D Controller */
0x4D408000,
0x4D408000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* NAND Flash Controller */
0x4E000000,
0x4E000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* MATRIX & EBI */
0x4E800000,
0x4E800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Memory Controllers ( SSMC ) */
0x4F000000,
0x4F000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART0 Controller */
0x50000000,
0x50000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART1 Controller */
0x50004000,
0x50004000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART2 Controller */
0x50008000,
0x50008000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART3 Controller */
0x5000C000,
0x5000C000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* PWM Timer Controller */
0x51000000,
0x51000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HSSPI(SPI Channel 0) */
0x52000000,
0x52000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Watchdog Timer Controller */
0x53000000,
0x53000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* IIC Controller */
0x54000000,
0x54000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* IIS Multi Audio Interface */
0x55000000,
0x55000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* I/O Port Controller */
0x56000000,
0x56000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* RTC Controller */
0x57000000,
0x57000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* A/D Converter */
0x58000000,
0x58000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* AC97 Audio-CODEC Interface */
0x5B000000,
0x5B000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* PCM Audio Interface */
0x5C000000,
0x5C000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* 结束 */
0,
0,
0,
0
}
};
#endif /* __BSPINIT_MAIN_FILE */
SylixOS技术讨论群(32537017) SylixOS开发者联盟群(216907470)
系统常用链接:
【1】系统主页 www.sylixos.com
【2】系统百科
wiki.sylixos.com/index.php/%E9%A6%96%E9%A1%B5
【3】系统下载 git.sylixos.com/cgit/
【4】系统论坛
bbs.sylixos.com/forum.php
【5】社区新闻
bbs.sylixos.com/forum.php
【6】清华镜像站点 coop.tuna.tsinghua.edu.cn/git coop.tuna.tsinghua.edu.cn/git (改版中)
【7】北邮镜像站点(建设中)
其中 MMU 页面标识可以在
SylixOS 的 BASE 工程中 “SylixOS/kernel/vmm/pageTable.h” 中获取到,具体参数描述如下图。
/*********************************************************************************************************
physical memory zone
*********************************************************************************************************/
#ifdef __BSPINIT_MAIN_FILE
LW_VMM_ZONE_DESC _G_zonedescGlobal[] = {
{0x31800000, 0x01400000, LW_ZONE_ATTR_DMA}, /* 均可被 DMA 使用 */
{0x32C00000, 0x01400000, LW_ZONE_ATTR_DMA},
};
/*********************************************************************************************************
初始化内存类型与布局 (VMM 管理区的内存不需要在全局初始化表中初始化)
*********************************************************************************************************/
LW_MMU_GLOBAL_DESC _G_globaldescMap[] = {
#ifdef __BOOT_INRAM
/*
* ARM except table
*/
{ /* 中断向量表 */
0x00000000, /* ARM except table */
0x30000000, /* RAM except table */
LW_CFG_VMM_PAGE_SIZE, /* one page size */
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
/*
* IROM area
*/
{
(0x00000000 + LW_CFG_VMM_PAGE_SIZE), /* flash 剩下的空间直接映射 */
(0x00000000 + LW_CFG_VMM_PAGE_SIZE),
((8 * LW_CFG_KB_SIZE) - LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
#else /* __DEBUG_IN_FLASH */
/*
* IROM area
*/
{
(0x00000000), /* flash 直接映射 */
(0x00000000),
(8 * LW_CFG_KB_SIZE),
(LW_VMM_FLAG_EXEC) /* 文字池类型 */
},
#endif /* __DEBUG_IN_RAM */
/*
* kernel space
*/
{ /* nSCS0 - SDRAM 6MByte */
(0x30000000),
(0x30000000),
(6 * 1024 * 1024), /* SylixOS Kernel Text */
(LW_VMM_FLAG_EXEC | LW_VMM_FLAG_RDWR) /* 此段可修改, 方便调试 */
},
{ /* nSCS0 - SDRAM 18MByte */
(0x30600000),
(0x30600000),
(18 * 1024 * 1024), /* SylixOS Kernel Memory */
(LW_VMM_FLAG_RDWR) /* 状态属性 CB */
},
{ /* IRAM - SRAM 8KB */
0x40000000,
0x40000000,
(8 * LW_CFG_KB_SIZE),
(LW_VMM_FLAG_EXEC | LW_VMM_FLAG_RDWR)
},
{ /* SDRAM */
0x48000000,
0x48000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* SDRAM */
0x48800000,
0x48800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* USB Host Controller */
0x49000000,
0x49000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* USB Device Controller */
0x49800000,
0x49800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Interrupt Controller */
0x4A000000,
0x4A000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HS-MMC1 Controller */
0x4A800000,
0x4A800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HS-MMC0 Controller */
0x4AC00000,
0x4AC00000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* DMA 0 - 5 Controller */
0x4B000000,
0x4B000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{
4000
/* System Controller */
0x4C000000,
0x4C000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* LCD Controller */
0x4C800000,
0x4C800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* 2D Controller */
0x4D408000,
0x4D408000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* NAND Flash Controller */
0x4E000000,
0x4E000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* MATRIX & EBI */
0x4E800000,
0x4E800000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Memory Controllers ( SSMC ) */
0x4F000000,
0x4F000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART0 Controller */
0x50000000,
0x50000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART1 Controller */
0x50004000,
0x50004000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART2 Controller */
0x50008000,
0x50008000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* UART3 Controller */
0x5000C000,
0x5000C000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* PWM Timer Controller */
0x51000000,
0x51000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* HSSPI(SPI Channel 0) */
0x52000000,
0x52000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* Watchdog Timer Controller */
0x53000000,
0x53000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* IIC Controller */
0x54000000,
0x54000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* IIS Multi Audio Interface */
0x55000000,
0x55000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* I/O Port Controller */
0x56000000,
0x56000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* RTC Controller */
0x57000000,
0x57000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* A/D Converter */
0x58000000,
0x58000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* AC97 Audio-CODEC Interface */
0x5B000000,
0x5B000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* PCM Audio Interface */
0x5C000000,
0x5C000000,
(LW_CFG_VMM_PAGE_SIZE),
(LW_VMM_FLAG_DMA) /* 状态属性 NCNB */
},
{ /* 结束 */
0,
0,
0,
0
}
};
#endif /* __BSPINIT_MAIN_FILE */
SylixOS技术讨论群(32537017) SylixOS开发者联盟群(216907470)
系统常用链接:
【1】系统主页 www.sylixos.com
【2】系统百科
wiki.sylixos.com/index.php/%E9%A6%96%E9%A1%B5
【3】系统下载 git.sylixos.com/cgit/
【4】系统论坛
bbs.sylixos.com/forum.php
【5】社区新闻
bbs.sylixos.com/forum.php
【6】清华镜像站点 coop.tuna.tsinghua.edu.cn/git coop.tuna.tsinghua.edu.cn/git (改版中)
【7】北邮镜像站点(建设中)
相关文章推荐
- Android布局的小窍门?
- Web布局连载——两栏固定布局(五)
- 样式表CSS布局经验
- css网页布局中注意的几个问题小结
- DL.DT.DD实现左右的布局简单例子第1/2页
- 使用CSS框架布局的缺点和优点小结
- div+CSS网页布局的意义与副作用原因小结第1/2页
- 解析C语言中位字段内存分配的问题
- CSS顶级技巧大放送,div+css布局必知
- C#字符串内存分配与驻留池学习分享
- 用div实现像table一样的布局方法
- 精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
- 基于C++内存分配、函数调用与返回值的深入分析
- PHP变量内存分配问题记录整理
- 理解Javascript_01_理解内存分配原理分析
- android自定义RadioGroup可以添加多种布局的实现方法
- 瀑布流布局并自动加载实现代码
- C/C++语言中结构体的内存分配小例子
- SWT(JFace)体验之RowLayout布局
- Extjs学习笔记之七 布局