当前位置:首页 > 编程开发

关于wince OS开发面试问题的总结系列之OAL

webgou16年前 (2011-02-13)编程开发409

Q1:OAL是什么?
A1:OAL(OEM Adaptation Layer)OEM适配层,还有一个引申出来的概念是PQOAL(产品质量级OAL),但我们一般都说OAL就可以了。其概念为逻辑上驻留在wince内 核雨目标设备硬件之间的代码层,在物理上OAL于内核库链接起来产生内核可执行文件。或者也可以这样说,OAL是wince操作系统所基于的硬件平台上的 核心硬件的驱动程序、所有设备驱动中的最大集合;

Q2:OAL主要做了哪些事情?
A2:OAL主要做了以下几件事 情:1.Startup函数,2.串口调试,3.OEMINIT初始化,4.系统计时器,5.中断处理,6.内核的输入输出,7,kitl(可选),也就 是说,OAL从startup函数开始一直运行到Kernlinit后,整个wince的操作系统才正式开始运作;

说道这里会引出一个 cacheable和uncachable的问题,这个问题主要是牵涉到MMU以及一些速度上的事情。因为在这个阶段MMU还是需要工作,内存的读写又和 cache有关系,所以必须得提出来,关于cache和mmu的概念我这里也给出来,供大家准备,以下又给出两个问题。

Q3:cache是什么?mmu是什么?
A3:cache: 一个和CPU很近的高速存储器,用来存储一些不是经常变化的数据,提高速度。在经常改变的数据的时候不适合启用,否则效率会更低 比如我们访问GPIO等不能使用cached 地址,就是这个原因,经常替换,效率很低的。(这个东西,也是我们PC的CPU的重要指标)
MMU:用在多任务操作系统中,给每个任务提供独立的虚拟地址空间,其实现原理是:在主存中存贮页表等数据,通过MMU映射到CPU,然后CPU就可以使用虚拟地址调度任务,访问外设等,虚拟地址和物理地址映射是固定的,这样操作系统比较安全稳定。

Q4:cacheable和uncacheable的区别是什么呢?
A4:cache 可以大大提高内存的读写速度,CACHE属性即是对这部分的虚拟地址的读写要使用cache功能,也就是说这部分的虚拟内存是cacheable的,反 之,如果设定为UNCACHED属性,则说明虚拟地址的读写不适用cache,也就是uncacheable,其实两者的区别就是虚拟内存在使用时是否使 用到cache;

Q5:那为什么有的时候用cacheable有的时候有用uncacheable呢?(不要嫌这个问题啰嗦,就是有一些考官很喜欢问这个问题)
A5:这是因为cacheable时,采用了虚拟内存雨cache连用,当然速度是提高了,但是存在的问题是,会造成内存尤其是IO口的读写数据的不可预计性,所以在操作系统内核中悬着使用uncache部分的静态映射虚拟内存;

以上关于cache和mmu的问题,大家如果想更细致的学习话可以参考以下的网站链接去进一步学习:
http://topic.csdn.net/u/20081231/10/BBDE79C2-2884-48E3-9718-90D7FCC1AFA8.html
http://so.csdn.net/BlogSearchResult.aspx?q=cache%20username:gooogleman
By:GOOOGLEMAN

接 下来我们要继续来看我们的OAL下一步会问道什么问题,接下来一个比较重要的环节就是中断了,首先请大家先阅读HJB的关于wince的中断介绍,这篇文 章我已经转过无数次了,非常简单易懂,对wince的中断分析的非常透彻,我这里就不多说,大家直接看文章,看完了我们来回答几个面试中碰到的题目,接下 来的题目就更什么了。。。自己看。
http://www.cnblogs.com/we-hjb/archive/2009/05/26/1490461.html BY:HJB

Q6:什么是ISR?什么是IST?
A6:中断服务例程(ISR):处于内核中的低级处理程序,中断发生时首先被调用。中断服务线程(IST):处于驱动或者应用中的中断处理线程,由系统调度,完成大部分的中断处理工作。

Q7:什么是MDD?什么是PDD?IST在什么情况下开始工作,具体举例.
A7:MDD 是MODEL DEVICE DRIVER的缩写,它是抽象了某一类外设共性的适合任何硬件平台的驱动程序代码,PDD是PLATFORM DEPENDENT DRIVER的缩写,他是反映了一个特定的硬件平台上的某外设的特性的驱动程序代码,IST在如下几种情况下会运行:1.MDD的INIT函数 中,2.MDD的OPEN函数第一次被执行时,3.PDD中;

Q8:WaitForsingleObject函数的第一个参数是什么?描述下它的功能(不要感觉到恶心,我就没回答上来实在是紧张的想不出来了,平常用的还挺顺)
A8:DWORD WaitForsingleObject(HANDLE hHandle, DWORD dwMilliseconds),其功能是等待hHandle参数指定的对象,被触发或者dwMilliseconds参数指定的时间达 到,hHandle可以是事件,互斥量,信号量,进程和线程五种;

接下来我们要说说时钟,pTOC,KITL和config.bib文件 了,前三个内容我在面试的时候并没有遇到过,但是笔试到是考到了,最后一个是面试问道过,问的也很简单,看过一边config.bib文件都应该能答的出 来,直接上题目,今天最后几道题目,看完了睡觉。呵呵。

Q9:为什么选择32768Hz做为RTC时钟呢?
A9:32768正好是1024的32倍,也就是说是2的10次方的倍数,比较好算而且是一个整数,方便操作;

Q10:TOC是什么?如何查看bin文件?
A10:TOC(Table Of Content)是整个Nand Flash中存储内容的一个列表,这里面储存了有关启动和系统内核的一些相关存储信息,需要写在Nand Flash的block1中由Nboot里的函数读取。之后Nboot会按照读取的内容进行配置和跳转到不同的地址。在bin文件中会有专门一个部分去描 述toc的位置,如何查看呢,只需要在wince的编译环境下进入命令行状态,然后输入viewbin –toc nk.bin>output.txt 这样就能看到bin的内容,而且也把toc的内容也打印出来了。很方便;

Q11:KITL是什么?
A11:KITL是Kernel Independent Transport Layer的缩写,内核无关传输层,主要用来辅助调试驱动设备;

Q12:config.bib看过没有啊?什么样子的啊?(当时考官就这样问我。。。囧吧。)
A12:直接给一个config.bib出来看:

   1:  ;
   2:  ; Copyright (c) Microsoft Corporation.  All rights reserved.
   3:  ;
   4:  ;
   5:  ; Use of this sample source code is subject to the terms of the Microsoft
   6:  ; license agreement under which you licensed this sample source code. If
   7:  ; you did not accept the terms of the license agreement, you are not
   8:  ; authorized to use this sample source code. For the terms of the license,
   9:  ; please see the license agreement between you and Microsoft or, if applicable,
  10:  ; see the LICENSE.RTF on your install media or the root of your tools installation.
  11:  ; THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
  12:  ;
  13:   
  14:  MEMORY ;定义了内存分配的相关设置,一般在BSP中的config.bib文件中。
  15:   
  16:  ;
  17:  ; NK and RAM region definitions.
  18:  ;
  19:  IF IMGFLASH !
  20:  #define    NKNAME    NK
  21:  #define    NKSTART   80070000
  22:  #define    NKLEN     02000000
  23:   
  24:  #define    RAMNAME   RAM
  25:  #define    RAMSTART  82070000
  26:  #define    RAMLEN    01E7F000
  27:   
  28:  ELSE
  29:   
  30:  #define    NKNAME    NK
  31:  #define    NKSTART   88001000
  32:  #define    NKLEN     05fff000 // 96mb less 4k
  33:   
  34:  #define    RAMNAME   RAM
  35:  #define    RAMSTART  80070000
  36:  #define    RAMLEN    03E7F000
  37:   
  38:  ENDIF ; IMGFLASH
  39:   
  40:      PTS            80000000       00020000     RESERVED
  41:      ARGS           80020000       00000800     RESERVED
  42:      SLEEPSTATE     80020800       00000800     RESERVED
  43:      EBOOT          80021000       00040000     RESERVED
  44:      EBOOT_STACK    80061000       00004000     RESERVED
  45:      EBOOT_RAM      80065000       00006000     RESERVED 
  46:   
  47:      $(NKNAME)      $(NKSTART)     $(NKLEN)     RAMIMAGE
  48:      $(RAMNAME)     $(RAMSTART)    $(RAMLEN)    RAM
  49:      
  50:      EFSBUF         83EEF000       00011000     RESERVED    
  51:      DISPLAY        83F00000       00100000     RESERVED
  52:   
  53:      ; For Windows CE, reserve FLASH only if IMGFLASH=1
  54:      ; For Windows Mobile, always reserve it, for IMGFS
  55:  IF IMGFLASH !
  56:      FLASH          88000000       06000000     RESERVED
  57:  ENDIF ; !IMGFLASH
  58:  IF IMGFLASH
  59:  IF IMGTPC
  60:      FLASH          88000000       06000000     RESERVED
  61:  ENDIF ; IMGTPC
  62:  IF IMGPPC
  63:      FLASH          88000000       06000000     RESERVED
  64:  ENDIF ; IMGPPC
  65:  ENDIF ; IMGFLASH
  66:      EBOOT_CONFIG   880F0000       00010000     RESERVED
  67:   
  68:  ; @CESYSGEN IF CE_MODULES_RAMFMD
  69:   
  70:  IF IMG_RESERVERAMFMD
  71:      ; Set this variable to the size, in bytes, of memory discovered by
  72:      ; OEMExtensionDRAM to reserve for the RAM FMD persistent storage
  73:      ; driver.  This value must be a multiple of 4K.  Due to limitations
  74:      ; in the implementation of RAMFMD, this value must be less than or
  75:      ; equal to 32MB.
  76:      g_dwExtensionRAMFMDSize   00000000    02000000      FIXUPVAR
  77:  ENDIF   ; IMG_RESERVERAMFMD
  78:   
  79:  ; @CESYSGEN ENDIF CE_MODULES_RAMFMD
  80:   
  81:  ; This fix-up variable is a bitfield that can be used to initialize
  82:  ; the OAL debug zones per oal_log.h.  Uncomment the line and
  83:  ; change the hexidecimal bits to enable the desired zones.  The
  84:  ; default value (0x0000000B) enables the OAL_LOG_ERROR,
  85:  ; OAL_LOG_WARN, and OAL_LOG_INFO zones, and will be used by
  86:  ; OEMInit if the line remains commented out.
  87:  ;
  88:  ;  nk.exe:initialOALLogZones     00000000 0x0000000B       FIXUPVAR
  89:   
  90:  ; This fix-up variable determines the amount of memory the BSP
  91:  ; reserves for Watson dump capture.  The current default behavior is
  92:  ; to default to zero unless the image has SYSGEN_WATSON_DMPGEN
  93:  ; defined.  The default size is 300KiB.
  94:  ;
  95:  ; @CESYSGEN IF CE_MODULES_OSAXST0
  96:  nk.exe:dwOEMDrWatsonSize  00000000   0x4B000               FIXUPVAR
  97:  ; @CESYSGEN ENDIF
  98:   

99: CONFIG ;在最后的Makeimg阶段,为Romimage.exe提供一些生成WinCE image的配置属性。
;该项是可选的,一般也在BSP中的config.bib文件中定义。

 100:   
 101:  ; @CESYSGEN IF !NK_NKNOCOMP
 102:      COMPRESSION=ON
 103:  ; @CESYSGEN ENDIF !NK_NKNOCOMP
 104:  ; @CESYSGEN IF NK_NKNOCOMP
 105:     COMPRESSION=OFF
 106:  ; @CESYSGEN ENDIF NK_NKNOCOMP
 107:   
 108:      KERNELFIXUPS=ON
 109:   
 110:      ; Multi-Region
 111:      ;
 112:  IF IMGFLASH !
 113:      AUTOSIZE=ON        ; AUTOSIZE is used to enable the following flags.
 114:  ENDIF
 115:      DLLADDR_AUTOSIZE=ON
 116:   
 117:      ;AUTOSIZE_ROMGAP=10000
 118:      ;AUTOSIZE_DLLADDRGAP=0
 119:      ;AUTOSIZE_DLLDATAADDRGAP=0
 120:      ;AUTOSIZE_DLLCODEADDRGAP=0
 121:   
 122:  IF IMGPROFILER   
 123:      PROFILE=ON
 124:  ELSE
 125:      PROFILE=OFF
 126:  ENDIF
 127:   
 128:  IF IMGFLASH
 129:  ROMSTART=88000000
 130:  ROMSIZE= 06000000
 131:  ROMWIDTH=32
 132:  ENDIF ; IMGFLASH
 133:   
 134:  ;
 135:  ; ROMFLAGS is a bitmask of options for the kernel
 136:  ;   ROMFLAGS    0x0001      Disallow Paging
 137:  ;   ROMFLAGS    0x0010      Trust Module only
 138:  ;
 139:         
 140:  IF IMGTRUSTROMONLY
 141:          ROMFLAGS=10
 142:  ELSE
 143:          ROMFLAGS=0
 144:  ENDIF
 145:   

 

来源:http://www.cnblogs.com/mercuryxu/archive/2010/02/09/1666152.html

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=429

标签: winceos
分享给朋友:

“关于wince OS开发面试问题的总结系列之OAL” 的相关文章

Audio 组成

Audio 组成0.直接操作Mixer API 速度会比 waveform audio api速度要快1.Mixer api 控件范围要比waveform audio api 要快.2.Mixer api灵活,可以自行控件。…

Bitcoin 的基本原理

昨天读到了 Bitcoin 的中文介绍,觉得非常有意思。不过上面这篇文章解释的非常不靠谱,我花了一晚上去Bitcoin的官方网站 仔细研究了一下,总算理解了其原理。感觉非常有启发,尤其是对虚拟货币的流通和发行有许多借鉴意义。今天写这篇 Blog 理一下。...…

How do I update Ubuntu Linux softwares?

Q. I have latest version of Ubuntu Linux. How do I update Ubuntu Linux for security and application fix or upgrades? A. Ubuntu Linux can be upgraded u…

关于wince OS开发面试问题的总结系列之Bootloader

关于wince OS开发面试问题的总结系列之Bootloader…

Windows CE 内存管理

内存管理        如果你在写Windows CE 程序中遇到的最重要的问题,那一定是内存问题。一个WinCE 系统可能只有4MB 的RAM,这相对于个人电脑来说是十分少的,因为个人电脑的标准配置已经到了128MB 甚至更多。事实上,运…

Scrapy 框架使用

scrapy 使用…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。