|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好:
菜鸟报道……想求教一下关于memory分配的问题。
假设有一个SOC芯片,用的mips核,外接的有flash和DDR。如果想进行嵌入式开发的话应该怎么进行memory 分配?
我知道一般都是让上电从0xBFC00000运行,据说是mips的要求,一般这个地址是在flash里面,然后把需要的内容拷贝到DDR里面继续运行。
1. 我知道虚拟地址是从程序的角度来看的可以映射的空间包含flash和DDR,但是某一个虚拟地址究竟是指向了flash还是指向了DDR这个是如何判断的?
2. 0xBFC00000为什么就能够指向flash呢?0xBFC00000应该是一个虚拟地址,按照《see mips run》来讲指向的应该是物理地址为0x1FC00000,可是一般烧写bootloader不都是在flash的0物理地址么?
3. 我搜百度上有关于存储器映射的描述 “ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说, 0X00000000依次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器 0X80000000,VPB(低速外设地址,如GPIO,UART)——0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。”,这里面的地址究竟是物理地址还是虚拟地址啊??我怎么查看我的芯片是怎么要求的呢?
4. 如果现在需要构建linux在这个系统上面,是不是要严格进行memory分配,是分配虚拟地址还是物理地址?分配有什么要求呢?我看到一个分配从0地址开始是kernel到0x3e00000->userdata1->userdata2->从0xA100000到0xe00 0000又是kernel->userdata3 共256M,这个究竟是什么意思,怎么还有两个kernel?对于kernel的地址难道没有要求么?
5. 此外如果成功建立了整个系统的软件,诸如bootloader,kernel,用户程序,都是需要烧写到flash里面才能运行的,要根据什么在flash的物理地址中摆放这些内容呢?
多谢大家。 |
|