bluefishhttp://blog.yesky.com/Blog/vincentzhou/复制地址
公告栏
专注wince底层开发,学习linux 为生活而奋斗!
控制面板
日历
<2008年8月>
SuMoTuWeThFrSa
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456
留言簿(13)
文章分类
文章档案
日记档案
向强人学习

到目前,我移植的s3c2440bsp在wince6下可以跑到oeminit了,并且已经跑完。下面的事情似乎就是移植相关的drivers了。

其实从可以编译nk.nb0到可以跑完oal没有什么太多要做的事情。首先调整了下config.bib文件中的nk的地址,以至于可以让原来现成的bootloader与其配套。修改debug.c中的调试串口的初始化,由于代码中用的是uart1,而我现在板子上要用uart0。

在这里主要简单说下wince6内核的启动过程:

在bootloader加载内核到指定地址,并跳到内核中运行的时候,WINCE600\PLATFORM\SMDK2440\Src\oal\oallib下的startup.s文件中便包含了第一条要执行的命令。进行一些硬件的初始化(看门狗,中断,和时钟等),然后就是直接跳到KernelStart(此处kernelstart,我的理解是kernel.dll的入口,而并非armtrap.s中的kernelstart)。

下面就是进入内核了,传说中的kernel.dll。NKStartup是这个文件的入口函数。具体实现在WINCE600\PRIVATE\WINCEOS\COREOS\NK\KERNEL\ARM下的mdarm.c中。在这里有调用OEMInitDebugSerial,OEMInit。在这个函数的最后调用了一个KernelStart()。

KernelStart的实现在WINCE600\PRIVATE\WINCEOS\COREOS\NK\KERNEL\ARM下的armtrap.s文件中。在这里call了一个KernelInit和跳到FirstSchedule处执行调度第一个进程。

KernelInit函数在WINCE600\PRIVATE\WINCEOS\COREOS\NK\KERNEL下的nkinit.c中,主要是为内核启动做准备。调用的函数有APICallInit ();HeapInit ();InitMemoryPool ();PROCInit ();VMInit (g_pprcNK);THRDInit ();MapfileInit ();以后有空再详细分析下这几个函数。

可惜我的nk跑着跑着出现了一个abort,在gwes中,郁闷!


作者:bluefish 阅读() 评论()  编辑 发表于:2007-09-04 18:24
相关内容
文章评论

  • # re: wince6移植之内核启动
  • 在CE5上面,GWES.EXE管TOUCH,DISPLAY,KEYBOARD这几个DLL,CE6上不知道变什么样子了,会不会你这几个驱动没移植好?

    原来我这个项目也有计划做到CE6上,但最后由于日程原因只能维持在CE5上了,你就做先锋多写些心得给大家吧,哈哈
    Walzer | 2007-09-05 09:45
  • # re: wince6移植之内核启动
  • 我给你留言了,你去查看下私人留言
    天极博友 | 2007-09-05 10:03
  • # re: wince6移植之内核启动
  • 兄弟你都搞6.0了,可我的wince5.0还一堆问题,现在卡在系统挂起和唤醒上了,你能把相关代码文件发给我参考下吗?谢谢了

    far609◎126.com
    天极博友 | 2007-12-29 09:28
  • # re: wince6移植之内核启动
  • 楼上这位兄弟,5.0下我们没有做电源管理,也就没有实现挂起和唤醒。代码是公司的,我也不方便发给你,请见谅!
    bluefish | 2007-12-29 11:28

    发表评论
    标题 *  
    姓名 *  
    内容 *  
       验证码: *       
           
    版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
    Powered by:

    Copyright © bluefish