当前位置:主页   - 电脑 - 程序设计 - C/C++
在VDSP中编译uclinux(2):内存布局
来源:网络   作者:快乐虾   更新时间:2011-10-23
收藏此页】    【字号    】    【打印】    【关闭

  1   uclinux的内存布局

  在uclinux启动时,有一段空间利用的提示:

  Memory map:

 text      = 0x00001000-0x000b0db0
 init      = 0x000b1000-0x000bd23c
 data      = 0x000bf1b8-0x000e5588
 stack     = 0x000c0000-0x000c2000
 bss       = 0x000e5590-0x000f14d8
 available = 0x000f14d8-0x03500000
 rootfs    = 0x03500000-0x03f00000
 DMA Zone = 0x03f00000-0x04000000

  其中text代表这段空间中存储的是uclinux内核的代码;init中存放的也是 uclinux内核的代码,但是这一段空间在内核启动完成后是可以回收的,即它可以供内核重新分配;DATA段是 uClinux 未被初始化的数据空间;BSS段是 uClinux初始化的数据空间,它的初始化操作将在head.s中完成。此外从0到text开始的这一段空间也会被初始化为0。

  2   VDSP中的空间分配

  uclinux的空间定位是由链接器完成的,由arch/blackfin /kernel/vmlinux.lds.s控制完成。而VDSP的空间定位则是由ldf文件完成的,而ldf文件的语法与vmlinux.lds.s相似。我们所要做的就是将vmlinux.lds.s中的相关定义转移到ldf文件中。

  1、定义一块uclinux使用的内存空间:

  MEM_SDRAM_UCLINUX    { TYPE(RAM) START(0x00010000) END(0x001fffff) WIDTH(8) }       在这里,空间的结束使用了一个较大的数值,实际上在uclinux内核中会从代码实际结束的地方开始管理存储空间。

  2、将uclinux内核的入口函数写入到0xFFA00000,即a核的启动地址。

       RESOLVE(__start, 0xFFA00000)
       KEEP(__start,_main)

编缉推荐阅读以下文章

  • 在VDSP中编译uclinux(7):令人困惑的成功
  • 在VDSP中编译uclinux(6):VFS: Unable to mount root fs on unknown-block(31,0)
  • 在VDSP中编译uclinux(5):Milestone-内核启动基本完成
  • 在VDSP中编译uclinux(4):console实现
  • 在VDSP中编译uclinux(3):编译器的差异
  • 在VDSP中编译uclinux(1):不可能的任务?
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明