虚拟地址匹配问题

      在调试以前的一个老版本的时候碰到了一些问题(s3c2440,wince4.2)
      首先,加载内核(NK)之后,跑到kernelstart的地方就挂掉了,还好以前在调试eboot的时候遇到这样的问题。在此再说明一下:在bootloader中要从flash中load nk.nb0并将它放到0x30200000(物理地址,在sdram上)然而这个地址在系统启动的时候经mmu映射后为0x8c200000(虚拟地址),而config.bib中的设置为nk是在虚拟地址0x8c300000处。由bootloader跳到nk中去执行当然没有问题,因为这是用的物理地址并且sdram中的nk.nb0的位置就是它放的。在系统启动时(fw.s)经过mmu映射地址之后要用虚拟地址,所以之后的要跳到nk中的kernelstart(0x8c300000+根据偏移量)处去执行是找不到这个函数的,所以系统就挂掉了。
      其次这个版本中有外扩串口,然而在系统加载这些串口驱动的时候挂掉了。所以就改了些东西,可能不小心将s2440.h文件中framebuffer的地址给改了。这样在oeminit的时候可以看到logo,但是死活看不到久违的windows界面。这里要说的就是定义的这些像framebuffer,dma_base的地址一定要和config.bib中的一致。
     今天还从硬件工程师那了解到所谓的扩展串口就是加一个芯片(相当于串口控制器),通过cpu的io口来控制。悲哀啊,看来自己真的很土。

你可能感兴趣的:(问题,匹配,地址,休闲,虚拟)