Eboot代码流程 [转]

修改Eboot过程的一点经验 <br />修改Eboot过程的一点经验<br /> <br /><br />    我们的产品使用的是WINCE5.0操作系统,系统启动时间比较长,大概15、16秒钟后才能看到应用程序界面。而在这段启动时间内,屏幕上一直是白屏,没有任何图案,很呆板,所以打算修改bootloader的界面来改善这种情况。<br /><br />    修改了Eboot的源码以后,在PB中编译,结果在Release目录中没有发现要烧写的Eboot.nb0文件,不知什么原因,也不知道在什么情况下会生成Eboot.nb0。怎么办 阅读详情
Eboot代码流程 [转]

Eboot代码流程 
                                            ----by nasiry
                                                        转载请说明出处 

eboot弄了很多次了,一直都没有整理一下整个代码流程。这次还是事来做一下吧:



首先通常都是汇编代码:启动时由系统复位导致PC为0为触发条件:以2440代码为例直接进入fw.s文件。主要执行的操作为设置处理器频率(PLL),设置内存参数,须注意的是在该部分代码虽然在形式上实现了诸多中断向量,但是这些代码根本上不会得到执行。(参考“Eboot 编译编译器决定中断向量及其实现单一性的原因”)而在后面会有一些其他手段用于实现中断向量的功能。由于和hal复用该部分文件,所以调用的函数名称会与内核启动函数的相同(如:KernelStart),但是实现内容却是完全不同的。在该部分的最后还将保存一个OEMAddressTable的地址指针到下一格函数,进行应有的内存影射。下面还是以2440bsp为例说明。根据windowsCE系统的要求,需要把将会操作到的内存空间影射到0x8000 0000后的512M空间中,其中低256M为带缓冲的,高256M则是不带缓冲的。不带缓冲的区域通常是驱动访问设备必须的,这样可以保障对硬件的操作不受到缓冲的干扰。除了按照OEMAddressTable进行内存空间影射外,还可以要根据程序需求进行其他一系列影射,通常的做法都是将目前所有的设备/内存在原地址空间上再影射一次,以方便使用。另外就是在将0x0位置影射到内存,这样,就可以通过这个部分来进行中短向量的安装了,以实现中断服务程序。(以上内存影射并不是必须的,仅仅是为了方便程序的编写而已,使用和系统相同的影射表可以使得不必重新另外建一套头文件,同时如果需要的话可以一直在内存中保存eboot,这样内存空间的规划也会相对容易做一些)。


以上的这些工作做完,就进入windowsCE提供的eboot入口函数了。 也就是BootloaderMain。这个函数位于WINCE420/PUBLIC/COMMON/OAK/DRIVERS/ETHDBG/BLCOMMON/blcommon.c文件中。该目录的文件就是微软提供的eboot框架,尽管这不是实现的部分,也一并分析了吧。这部分的内容一开始就很有意思,第一个执行的语句如下
if (!KernelRelocate (pTOC)) {  HALT (BLERR_KERNELRELOCATE);   }
而这个传入的参数却这样定义:ROMHDR * volatile const pTOC = (ROMHDR *)-1;  按照程序的内容来说,这个函数到这里一定是死循环了,可是事实上这个死循环不会得到执行,也就是pTOC = (ROMHDR *)-1并没有真正的起到作用。 在pTOC第一次使用前检查了一下pTOC的值,结果如下:pTOC=0x8C04D694。也就是说pTOC在没有被改变之前就已经不再是-1了,而且pTOC是被定义成const的,也没有办法去改变,看样子就只能是编译器的过程中这个指针就已经被动了手脚。而查看eboot.map中该地址所对应的内容居然是bootpart.obj的内容。感觉是无从下手了,这样子让人太费解了。仔细比较eboot.exe和eboot.nb0后发现,eboot.exe通过romimage处理后长度增加了,而且结构上改变了许多,在原.eboot.exe后增加了一系列原来没有内容,pTOC的内容就是属于这部分内容中的一部分。由于牵涉到windowsCE的Image Chain结构,所以无法继续往下分析,这部分的内容就先跳过。以后再回头来看。


随后在 BootloaderMain中对调试界面进行初始化,由OEMDebugInit完成这个函数的实现是由具体的硬件决定的通常来说为串口的初始化,再次以后就通过该调试界面进行调试信息的发布。




然后在OEMPlatformInit()中对eboot所要用到的硬件资源进行初始化设备,通常这些会包含:存储设备(FLASH、硬盘等)、传输界面(以太网卡、USB-RNDIS、无线网卡、CF—LAN等等)、系统时钟,为下面将会进行的os镜像传输、os镜像存储、读取等等一系列动作做好准备。
做好准备以后就可以调用OEMPreDownload ()来进行传输OS的准备了,在这个函数中通常会实现一系列功能,诸如:设备的设置、存储设备的格式化、网卡IP的指定、等等。windowsCE所支持的标准操作则只是两个,一个是跳转、一个是下载、分别对应下载OS镜像和跳入OS的入口点,前面提到的那些功能都是自己的扩展实现。


下面我们分别来看这两个标准操作的分支:首先是下载的分支,在下载的分支中首先通过OEMReadData来获取在最先收到的标示位也就是被称为魔法数的数据,用以比较确认该传输的内容是否为windowsCE的镜像数据,随后继续进一步获取将接收的数据的效验和,待接收的镜像的数量,镜像起始地址、长度等信息,有了这些个信息,很自然地就是接收镜像了,


随后检查数据的效验和。下一个镜像的信息的接收,如此往复循环直至所有的镜像信息接收完毕。 


jason128 发表于 >2004-12-14 0:28:39 保存该日志到本地 [全文] [评论] [引用] [推荐] [档案] [推给好友]

2004-12-14
[转]WindowsCE目录解析

WindowsCE目录解析 

 ---windowsCE.net 4.20篇


                                             ---------------by nasiry 
                                     转载请说明出处,并通知我


windowsCE的目录结构巨大而庞杂,尽管windowsCE的帮助对这个庞大的目录结构进行了说明仍然有很多目录下对应的代码在windowsCE help没有介绍其具体用途,下面就将windowsCE的目录结构进行简单的介绍。
1.SDK
在windowsCE.net4.2的根目录下存在PLATFORM,PRIVATE,SDK,OTHERS,PUBLIC五个目录。SDK是其中最为简单的一个目录结构SDK/BIN/I386下所存放的就是开发所需要的工具集,编译器等等,在这里我就不再啰嗦了。
The SDK directory contains tools that are used by Platform Builder. However,
it does not contain the tools that are used to build the image. The tools
contained by the SDK directory are:
.. Processor compilers
This directory contains the cross compilers and assemblers for supported
platforms.
.. Development tools
This directory contains the tools such as, Error Lookup, GuidGen, and Link
and Nmake.
.. Miscellaneous utilites
This directory contains the utilities, such as Zoomin, and Windiff. 

2.other
这个目录下的内容比较杂,有诸如ATL,MFC的头文件,运行库等开发应用程序所需的库文件和其一部分代码。其中有个文件目录对开发系统来说是比较重要的,就是CETK的客户端OTHERS/WCETK,通过该目录下的文件可以订制自己的Windows CE .NET Test Kit客户端。
The Others directory contains all the Windows CE runtime libraries and
headers, components for .NET Compact Frameworks, and Samples for ATL
and MFC. The Others directory contains the following subdirectories:
.. ATL
This directory contains ATL headers, libraries and source code for
debugging. The library debug symbols are also included.
.. DOTNET
This directory contains the .NET processor specific binaries and portable
.NET Compact Framework files.
.. MFC
This directory contains MFC Headers, Libraries and Source Code for
debugging. The library debug symbols are also included.
.. SAMPLES
This directory contains the MFC and ATL sample applications.
.. WCETK
This directory contains the Windows CE Test Kit (CETK) processor
specific binaries. CETK provides tests for each class of devices. Within the
CETK, you can choose the appropriate test to perform on your device driver
and the tool remotely runs the tests on your target device. 

3.PLATFORM
PLATFORM下存放的就是传说中的BSP了,这些BSP提供对各种开发板的硬件抽象层,bootloader,soc驱动等资源,由此可见这个目录下的资源是硬件相关的,一般说来该目录下每个文件夹都对应一个SDB的,下面以SMDK2410为例说明platform目录结构的内容.
|platform|--smdk2410----|--CESYSGEN
   |--DRIVERS------|--DISPLAY
   |  |--DRVLIB 
   |  |--KEYBD
   |  |--PCMCIA
   |  |--PWRBTN
   |  |--SERIAL
   |  |--TOUCHP
   |  |--USB
   |  |--WAVCLICK
   |  |--WAVEDEV
   |--EBOOT--------|--ARM
   |  |--BIN  
   |--FILES--------|--INTLTRNS
   |--GWE----------|--BUILDEXE
   |  |--NLEDDRV
   |--INC  |
   |--KERNEL-------|--BUILDEXE-----|--KERN
   |  |  |--KERNKITL
   |  |  |--KERNKITLPROF
   |  |--HAL
   |  |--PROFILER
   |--NAND*
   |--UTILITIES*
其中NAND和UTILITIES是2410的bsp特有的,NAND包含的是以NANDFLASH为启动介质的启动代码,UTILITIES里面的内容是包含调试信息的可执行文件-三星的测试程序(用ADS的调试器AXD就可以使用该文件)。
CESYSGEN一般都只有一个叫makefile的文件,通常该文件指向(_WINCEROOT)/public/common/cesysgen/CeSysgenPlatform.mak 也就是公共的platform生成文件,该文件为产生windowsCE项目提供支持。
DRIVER目录下的内容也是很直接的,也就是各种soc的设备和板载设备的驱动。例如:display就是lcd控制器的驱动,keybd就是键盘驱动等等
eboot目录下面的文件是ethernet bootloader的源文件,通常这个目录下的文件都来自于PUBLIC/COMMON/OAK/DRIVERS/ETHDBG所提供的模版改写得到,因此发现该目录下文件使用到未知的函数时都可以到上述文件中寻找答案。(bootloader的源文件是完整的,有兴趣的男男女女都大可研究一下)
FILES下面就是一个杂物仓库,里面可能有BSP提供的应用程序和生成系统所需要的信息文件。要是想要知道该bsp的入口点,调整镜像,了解静态高内存分配等信息大可以到这儿一看,INTLTRNS子目录下定义了一些字串,这些字串在生成系统的时候用来替换CEPB生成注册表所使用的标示。
GWE里面就是GWES的部分了,这里面NLEDDRV下面的文件是LED提示灯的驱动,至于buildExe就是生成gwes.exe所需的文件了,事实上这个目录下是空的,因为使用CSP里面的GWS.lib等所提供的接口已经完备了。
INC就是头文件的聚集地,这个就不说了。
KERNEL:
   这个目录结构是整个bsp的关键所在,内核就在这儿诞生。
   buildexe目录下的三个文件夹-KERN-KERNKITL--KERNKITLPROF分别生成kernel的三个版本kernel only/kernel with kitl transport/kernel with kitl and profiler,第一个版本就是最基本的kernel也就是以后用作发布用的,第二个提供了kitl传输界面,可对系统进行调试,而kernkitlprof提供了传输界面的同时还提供了专门的性能计时器用作测定系统性能。
   PROFILER目录下面的就是性能计时器的代码。
   HAL下面是内核硬件抽象层的代码所在。
   基本上platform文件夹就是这个样子了,比起后面还没有说的private和public目录来说这两个文件夹的结构还是相对简单明了的。
   我们看看后面都还有什么东西 

4.PUBLIC 
这个文件夹是我这辈子见到过的最最可怕的目录结构之一。总而言之这里面什么东西都有,一个字"杂",难说得上什么分类。先来看看第一级子目录的结构吧。
|public-|--WCESHELLFE *
 |--SHELLSDK   * 
 |--SHELL      * 
 |--WCEAPPSFE  
 |--VIEWERS
 |--SQLCE
 |--SPEECH
 |--SERVERS
 |--SCRPIT
 |--IE
 |--RDP
 |--NETCF
 |--IABASE
 |--HLBASE
 |--DirectX
 |--DCOM
 |--DATASYNC
 |--COMMON
COMMON下面的东西很多,现在我们先绕开不说。我还是从上往下说吧(流汗中...)
4.1关于shell 
WCESHELLFE,SHELLSDK,SHELL这三个目录下的东西都是shell相关的(别问我什么是shell,它就是你天天看到,最最熟悉你还不知道它的存在的那个玩意儿).SHELL下面提供了standshell和AYGSHELL,standShell就是标准的windowsCEshell看起来和tablePC的样子差不多,其中AYGshell原来是给Pocket PC设计的,这两个shell都可以在CEPB的IDE里面选。
至于WCESHELLFE,主要是各种windowsShell的组件:
CTLPNL就是控制面板的组件,有了这个你可以自己做自己的控制项,且不愉快?
FTPUPDATE提供了通过ftp升级firemire的程序,作用也是给大家照猫画虎
LANG 和INPUTMETHODS 是输入法支持,这个我不了解就不乱说了
Taskman 这个就比较有意思,恐怕很多人都会需要这个东西,用这个shell可以直接生成一个空的桌面,没有图标,没有icon,除了蓝色的桌面什么都没有,不过这个不能通过IDE选项生成,照帮助也是弄不出来的,需要修改sysgen.bat才行。
至于这个目录下面的那些个什么FILE ,inc,lib与上面提到的同名的文件夹作用差不多,我就不再说了.
shellSDK就比较简单了,里面也就是开发SHELL应用程序所要用的head和lib,没啥好讲了。
Modules and components relative to the far-east enabled
shell, such as, task manager and control panel components 


4.2 WCEAPPSFE
传说这里面有word和outlook,我没弄过,也不清楚。
既然别人这么说我就当它有吧。 

4.3 VIEWERS
这个听名字就知道是干什么的,也就是windowsCE带的那一对查看器,比如什么pdf啊,excel啊,word啊什么的,不过都不是source都只是lib了,所以也没什么大的意思的。 

4.4 SQLCE
这个就是SQLCE的老家,不过和上面一样,还是没得改,更没得写,一样的无聊。 

4.5 SPEECH
这个目录下面是MS SAPI5.0,里面包括了TTS和语音识别,免费的啊!不过只支持汉语和英语还有日语的TTS其他的语言一概不支持。同样也是不开放代码,顺便说一句,file里面有个voice目录,那个是发声文件,要想听别的声音就要自己换,要是谁知道哪儿有这些vce文件请告诉我一下。 

4.6 SERVERS
这个目录下主要是windowsCE的网络服务。上次记得有人问我类似路有器的远程管理界面(web shell)是怎么弄的,在这儿找答案吧。 

4.7 SCRPIT  IE
这个不用说了就是天天用的Internet Explorer还有java-vb script支持所在。其中IE是可以订制的。 

4.8 RDP
该目录下面提供远程桌面的支持(我理解为用于windowsCE的木马),包括远程软件的客户端和服务端。里面有个第三方软件,具体的使用方法我也不是很清楚。 

4.9 NETCF
Dot Net Compact Framework.事实上目录下面是空的,到底这些.net的文件都在那儿呢?看看makefile就可以知道,这里面用到的资源都是来自于前面讲过的%WINCEROOT%/OTHERS/DOTNET下面。
4.10 IABASE
4.11 HLBASE
这两个合到一起讲,这两个目录存在的目的不是给PB的IDE用的,而是在命令行模式下创建工程的模版,里面有很多.bat文件,对应了一些默认的配置,这个和PB IDE里面的向导是一致的。两个目录的区别在于,一个带显示一个不带,这就决定了配置有很多相关的东西不一样:如gwes等,所以分开两个目录,使用不同的sysgen.bat文件。在CE5.0中已经将这两个目录合二为一了。
Internet Appliance Base Configuration
Headless Base Configuration 

4.12 DirectX
DirectX就是DirectX了,看看目录结构
├─CESYSGEN
Sysgen目录下
├─OAK
│  ├─FILES
│  │  ├─INTLFILE
│  │  └─INTLTRNS
│  ├─INC
│  ├─LIB
│  └─VOIP
│      ├─VOIPMEDIA_REF
│      ├─VOIPPROV
│      │  ├─FILE
│      │  ├─LDAP
│      │  ├─MANUAL
│      │  ├─MANUAL_CORE
│      │  ├─TEST
│      │  └─XMLHELPER
│      └─VOIPUI
│          ├─APP
│          │  └─RES
│          ├─HELPER
│          ├─IME
│          ├─INC
│          └─STATE
└─SDK
    ├─INC
    ├─LIB
    └─SAMPLES
        ├─D3D
        │  ├─BOIDS
        │  ├─SIMPLE
        │  └─TUTORIALS
        │      ├─TUT01_CREATEDEVICE
        │      ├─TUT02_VERTICES
        │      ├─TUT03_MATRICES
        │      ├─TUT04_LIGHTS
        │      └─TUT05_TEXTURES
        ├─DDRAW
        │  ├─INCLUDE
        │  └─SRC
        │      ├─DDEX1
        │      ├─DDEX2
        │      ├─DDEX3
        │      ├─DDEX4
        │      ├─DDUTIL
        │      ├─DONUTS
        │      └─MOSQUITO
        ├─DDVD
        │  ├─ANXJTEST
        │  ├─DVDPLAY
        │  └─DVDSAMPLE
        ├─DSHOW
        │  ├─BASECLASSES
        │  │  ├─HEADED
        │  │  └─HEADLESS
        │  ├─FILTERS
        │  │  ├─BALL
        │  │  ├─DUMP
        │  │  ├─EZRGB24
        │  │  └─INFTEE
        │  └─PLAYERS
        │      ├─CEPLAYIT
        │      ├─DDXCLMV
        │      ├─HLPLAYIT
        │      └─PLAYWND
        ├─DSOUND
        │  ├─CAPTUREECHO
        │  └─DSPLAY
        ├─DXMISC
        │  ├─DDCAPS
        │  └─DXVIEW
        ├─MIXER
        │  └─TMIX
        ├─STB
        │  └─STBIHOST
        ├─VOIP
        │  └─VOIPDEMO
        │      ├─RESOURCES
        │      └─SOURCE
        └─WMP
            └─CEPLAYER
                └─RES 

4.13 DCOM
该目录提供DCOM/COM的支持,可惜的是没有源码,仅仅是2二进制的链接库。值得注意的是SDK目录下面的sample目录下提供比如:regsvr32等等常用的工具。 

4.14 DATASYNC
Device-side communication components. 

 

5 public/common/OAK/driver
不要以为这个目录下的东西就像它的名字一样全部都是驱动,事实上这个目录下面有很多驱动和windows组件,我们在windowsCE IDE中选取的很多特性的源代码都在这里,而且这儿提供了很多开发模版供我们写代码使用,个人认为用好这个目录是我们是定制自己的windowCE的关键,特色windowsCE就从这里开始。
到这里顺便说一个事情,OAK这个目录名一直困扰我多年,直到前段时间有位叫做"土豹子"的兄弟告知才明白,oak原来是OEM adaptation kit的意思。
下面我们就来看看这下面都有什么东西吧。
├─1394
│  ├─DRIVERS
│  │  ├─CLIENT
│  │  │  ├─1394DCAM
│  │  │  ├─AVC_STREAM
│  │  │  └─AVC_VCR
│  │  └─VIRTUAL
│  │      ├─1394DCAM
│  │      ├─AVC_UNIT
│  │      └─AVC_VVCR
│  ├─INC
│  └─TEST
│      ├─DRIVER
│      │  ├─1394DIAG
│      │  ├─1394VDEV
│      │  └─COMMON
│      ├─INC
│      └─UI
│          └─TOPOMAP
1394驱动。
├─ACM
│  ├─ACMDWRAP
│  ├─GSM610
│  ├─MSFILTER
│  └─PCMCONV
├─BATTDRVR
│  └─TEST
│      ├─GETBAT
│      └─SETSTUBBAT
ACM是Audio Compression Manager 的简写也就是音频压缩管理器,该目录下面所提供了G.711 (A-law 和 mu-law 编码), GSM 610, G.722.1, 和 SIREN,说白了就是音频编码器,做传输用途做voip这类的东西时还是比较有用的。GSM610在同名目录下,另外的几个ACM在MSFILTER目录下。PCMCONV故名思义就是PCM converter了.
├─BATTDRVR
电池驱动。
├─BLOCK
│  ├─ATADISK
│  ├─ATAPI
│  ├─MSFLASHFMD
│  │  ├─ECC
│  │  ├─INC
│  │  ├─SDNPCI
│  │  │  ├─SDNPCID
│  │  │  └─SDNPCIK
│  │  └─STRATA
│  │      ├─STRATAD
│  │      └─STRATAK
│  ├─RAMDISK
│  │  ├─DRIVER
│  │  └─LOADERDriver Code Structure
│  └─SDMMC
BLOCK目录下面就是windowsCE提供的所有的block驱动。包括PCCARD接口的硬盘/光驱,Flash,以及ramdisk和SD card /MMC card的驱动程序。
ATAPI是PCI总线的ATA控制器驱动,尽管只有一个目录内容却是不少的这里面包含了ALI的1543,promise的20262,intel 82371ATA控制器/南桥芯片的驱动程序。ATADISK是PCMCIA ATA卡的驱动。另外还有PCI总线界面的SD/NANDFLASH/MMC卡,以及平面接口的NORFLASH的驱动程序。RAMDISK是使用内存模拟存储系统的例子。
├─BLUETOOTH
│  ├─DRIVERS
│  │  ├─WCESTREAMBT
│  │  └─WENDYSER
│  ├─PROFILES
│  │  └─HID
│  │      ├─BASE
│  │      ├─PARSER
│  │      └─PB
│  ├─SAMPLE
│  │  ├─ASUI
│  │  ├─BTCP
│  │  ├─BTDC4.15 COMMON
│  │  ├─BTDIALER
│  │  ├─BTDIALP
│  │  ├─BTECHO
│  │  ├─BTENUM
│  │  ├─BTFILTER
│  │  ├─BTHEADSET
│  │  │  ├─BTAUDIOGW
│  │  │  ├─BTHSAGW_CE
│  │  │  ├─BTHSAGW_MDD
│  │  │  ├─HEADSETCTL
│  │  │  ├─INC
│  │  │  ├─PLAY
│  │  │  └─TALK
│  │  ├─BTHLINK
│  │  ├─BTHNSCREATE
│  │  ├─BTLOADER
│  │  ├─BTMODEM
│  │  ├─BTPAIR
│  │  ├─BTSVC
│  │  ├─COMTEST
│  │  ├─DUNPORT
│  │  ├─FCTEST
│  │  ├─GW
│  │  ├─HCITEST
│  │  ├─L2CAPAPI
│  │  ├─L2CAPDEV
│  │  ├─OPTTEST
│  │  ├─PHONEUI
│  │  ├─PRINTUI
│  │  ├─SCA
│  │  ├─SDPCOMMON
│  │  ├─SDPPRINT
│  │  ├─SDPSEARCH
│  │  ├─SOCKTEST
│  │  └─SSA
│  └─TRANSPORTS
│      ├─AMBICOM
│      ├─BCSP
│      ├─SC
│      ├─UART
│      ├─UNIV
│      ├─USB
│      └─WSS
│          └─INC
这个目录下的是关于蓝牙的支持,我没看过,也就不乱说了。
├─CALIBRUI
这个目录是一个触摸屏校准的例子。
├─CEDDK
│  ├─DDK_BUS
│  ├─DDK_DMA
│  ├─DDK_IO
│  ├─DDK_MAP
│  ├─DDK_TIME
│  ├─DLL
│  └─TEST
│      ├─ISAENUM
│      └─PCIENUM
由于嵌入式系统的硬件架构千差万别所以在定制DDK的时候需要为自己的硬件系统专门实现一套一般操作的硬件抽象层,以供其它开发者使用这些一般的操作能够控制挂接的设备,这些操作通常包括总线,DMA,IO,计时器等资源,以该目录的为一套x86的DDK的接口抽象。
├─CERDISP
│  ├─CERDISP
│  ├─CERHOST
│  └─INC
远程显示的例子。这个远程显示就是windowsCE特性里面的那个。
├─DISPLAY
│  ├─AABLT
│  ├─ATI
│  ├─DDGPE
│  ├─DISPPERF
│  ├─EMUL
│  ├─EMULROTATEPERM3
│  ├─EMULSTUB
│  ├─GPE
│  ├─GPEROTATE
│  ├─MQ200
│  ├─NOPDISP
│  ├─PERM3
│  ├─PERM3_CFG
│  ├─RFLAT
│  ├─SWG
│  ├─TVIA5000
│  └─VGAFLAT
显示部分的东西就比较多了,aablt是抗锯齿的例子,DDGPE是带DDraw的GPE驱动的例子,DISPPERF是测试驱动效率的一段代码,夹在自己的程序里面可以做测用。,SWG是Microsoft Software Graphics Library的源代码,没有看完不知道齐不齐。以mul开头的都是模拟图形处理源代码,还有gpe的源代码,带旋转能力的gpe的源代码。上面能说的这几个在display 目录下的程序都不是驱动程序,应该算是windowsCE GWES显示部分的一些源代码尽管没有提供完整的代码但从这些个零散的代码也能看出windowsCE的图形库的基本结构了,还是很有研究价值的,更况且这个和winnt的架构是如此的相似:P
NODISP是个比较特殊的显示驱动的例子,它满足GDI的借口需求但同时并没有实际的显示,有PERM3啥用我也没想明白。
rflat下面是基于GPERotate的显示驱动,想要旋状你的屏幕又不想改硬件的可以来看看。至于vgaflat就是模拟器上使用的那个驱动程序。这段提到的这几个驱动程序都是最最简单的显示驱动程序模版,如果需要自己写显示驱动可以拷贝这些代码保留架构重新实现就可以了,看得出微软在做这些个目录结构的时候还是为大家考虑得比较周到的。这几个驱动都是用在VESA BIOS 2.0 兼容的显卡上的就是说模拟器就可以使用这些驱动,要是想操练显示驱动又没有硬件支持的话,可以用这几个驱动作试验。 

剩下的那几个是几种特定的显卡的驱动,PERM3是个比较特别的驱动,这是这些驱动里面唯一支持D3D的显示驱动程序。尽管微软推荐用这几个驱动作为写代码的参考,我还是建议大家用上面提到的XXflat的显示驱动来重新实现会比较清晰。
├─ETHDBG
│  ├─3C90X
│  ├─AM79C970
│  ├─BLCOMMON
│  ├─BOOTPART
│  ├─CS8900
│  ├─DEC21140
│  ├─DP83815
│  ├─EBOOT
│  ├─EDBGSAMP
│  ├─KITLETH
│  ├─NE2000
│  ├─RNE_MDD
│  ├─RTL8139
│  ├─SMC9000
│  ├─SMSC100
│  ├─VBDGSTUB
│  ├─VBRIDGE
│  └─VMINI
ETHDBG下面有很多东西,同样是比较杂.
blcommon,bootpart,eboot都是写bootloader所需要的组成部分。我们可以看到platform下面的eboot的代码调用了很多其它的函数,那些函数就是这里的代码生成的,看不懂bootloader?接着这儿的代码一起看相信很快就可以看出结果。blcommon是bootloader的主流程代码,bootpart是bootloader操作hdd或Flash的相关代码,主要是在文件系统层面进行操作比如分区啊什么的,eboot下面包含的内容是tftp和dhcp等网络协议的实现,但不包含hal代码。KITLETH是kitl下以太网transport的硬件无关实现,包含DHCP和UDP协议的实现。 

EDBGSAMP下面应该是TCP/Ip transport的实现,目的是通过以太网卡实现调试信息通道,过对这个我没有去验证过不是很确定。

3C90X AM79C970 CS8900 DEC21140 DP83815 NE2000 RTL8139 SMC9000 SMSC100都是针对芯片的驱动代码,bootloader可以利用它们作为ethernet和KITL的HAL但是必须将这些"驱动"与windowsCE的驱动程序区别开来,这些驱动仅仅是能用于作为操作系统下的HAL使用,而不是系统网络部分的网卡驱动。

RNE_MDD KITLETH  VBDGSTUB VBRIDGE VMINI 都是关于kitl的代码,KITLETH是kitl的以太网传输实现,vbridge和vmini是虚拟网桥和网卡,这两个部分的目的在于建立kitl ethernet transport 的同时windowsCE能共享以太网用作传输。vDBGSTUB是vbirdge的最简实现(啥都不干)。
RNE_MDD是R-ndis的MDD支持。可以与Common/Oak/Drivers/Rndisfn/net2890配合使用.
├─FSD
│  ├─ENCFILT
│  ├─FATUTIL
│  │  ├─MAIN
│  │  ├─NOUI
│  │  └─UI
│  ├─FSDSPY
│  └─REGPART
FSD不用说,就是文件系统驱动了,这个是上层的驱动程序与具体的硬件代码无关。FATUTIL提供了一系列的支持,比如格式化,磁盘扫描这类的程序。ENCFILT里面提供了加密的途径,要加密这里来。而FSDSPY估计是侦测文件系统的,具体使用方法和用途不详。REGPART是一个partition驱动的例子,作用同样也是模版。构建好自己的partition驱动以后可以像调用mspart.dll来操作。
├─GDCFG
这个是Generic Device Configuration是和PCI总线相关的代码,看代码大概是总线设备通常行为管理和控制的用途,由于知识的匮乏,不知道具体干什么用的。
├─GIISR
Generic installable ISR的例子。 
├─HELPER
传闻是注册已配置的PCI设备的代码,同样我不清楚。
├─IMEJPN
├─IMEJPP
│  ├─COMMONCODE
│  ├─DICMAKE
│  │  └─BIN
│  └─IMEUI
这两个目录都是输入法-IME相关的,还是不懂。
├─IRMAC
│  ├─INC
│  ├─IRSIR
│  └─UTILS
红外线端口的驱动程序。
├─KEYBD
│  ├─DEVICELAYOUTS
│  │  ├─PS2_AT
│  │  │  ├─00000409
│  │  │  ├─00000411
│  │  │  ├─00000412
│  │  │  └─00010411
│  │  └─REMAP
│  │      └─NUMPADRMP
│  ├─DLL
│  │  ├─KBD8042JPN1
│  │  ├─KBD8042JPN2
│  │  ├─KBD8042KOR
│  │  ├─KBD8042US
│  │  ├─KBDNOPJPN1
│  │  ├─KBDNOPJPN2
│  │  ├─KBDNOPKOR
│  │  └─KBDNOPUS
│  ├─HIDIOCTL
│  ├─INPUTLANGS
│  │  ├─0409
│  │  ├─0411
│  │  └─0412
│  ├─IST
│  ├─LAYMGR
│  ├─NOP
│  │  ├─PDD
│  │  └─PDDLIST
│  ├─PS2_8042
│  └─TEST
键盘驱动及其测试程序。
├─LMEMDEBUG
这个目录下的代码可以使用用户代码进行内存检测,通常用于测试内存泄露和调试,有兴趣还可以参考private/winceos/coreos/core/lmem目录下的内容。
├─MESSAGEDIALOGBOXCUSTOMIZE
这个下面就是大名鼎鼎的MessageBox,想要自己的messageBox?容易啊,改掉这个家伙就可以了。
├─MMTIMER
多媒体时钟。
├─NDISUIO
NDIS usermode I/O driver.用途不明。
├─NETCARD
│  ├─DC21X4
│  ├─DP83815
│  ├─NE2000
│  ├─NE2000ISR
│  ├─NETMUI
│  ├─RNDISMINI
│  │  ├─HOST
│  ├─SMSC100FD
│  └─XIRCOM.CE2
这个目录下面的是网卡驱动.NE2000ISR相当于一个插件使得ne2000本地驱动可以工作在IISR模式下。netmui据说是网络多用户支持里面的内容简单得看不出怎么个支持法。RNDISMINI是RNDIS的小端口驱动,这相当于一个实现了微软的remote NDIS Specification 的MDD,这个程序与RNDISFN 目录下的PCI-USB界面结合就可以实现rNDIS,RNDISFN目录下面的东西相当于是PDD,Host目录下面的东西是使用RNDISFN作为PDD时,在PC上所需的安装信息文件,另外所需的RNDIS-USB Kit在微软的网站上可以下到。
├─NETSAMP
│  ├─ASYNCMAC
│  ├─AUTORAS
│  │  ├─DLL
│  │  └─TEST
│  ├─CONNMC
│  ├─ETHMAN
│  ├─INC
│  ├─IPCONFIG
│  ├─IPNAT
│  │  └─EDITSAMP
│  ├─IPV6TUN
│  ├─NDISCONFIG
│  ├─NDISPWR
│  ├─NETSTAT
│  ├─PASSTHRU
│  ├─PEGTERM
│  │  ├─APP
│  │  └─TERMCTRL
│  ├─PING
│  ├─RASDIAL
│  ├─RASENTRY
│  ├─RASSERVER
│  ├─RNAAPP
│  ├─ROUTE
│  ├─TAPIHELP
│  ├─TRACERT
│  ├─WZCTOOL
│  └─ZCLOG
这个目录下面的东西包括了整个广域网协议从上到下的各个层面的一些例子和工具,ping netstat route tracert ipconfig这几个是大家再熟悉不过的网络工具了。其他的我也不是很清楚用途。
├─NETUI
这个目录下面的是UI相关于网络的部分,比如控制面板里面的网络选项,在状态栏出现的连接图标等等。
├─OOMUI
OOMUI就是out of memory User Interface...内存溢出时显示什么东西?就在这儿了。顺便说一句所有以UI结束的目录都是可定制UI的部分。
├─PARALLEL
这里有并行口模块驱动的代码,以及使用该模块驱动生成并口驱动的例子。
├─PCIBUS
这个目录下是PCI总线相关的代码,不了解我就不说了。
├─PCMCIA
│  ├─I82365
│  ├─MDD
│  ├─TEST
│  │  ├─DEVTUPLE
│  │  └─TUPLETST
│  ├─TI1250
│  └─TI1250ISR
同样,MDD下面就是PCMCIA的模块驱动,另外I82365和ti1250是使用模块驱动构建驱动程序的例子,TI1250ISR是TI1250驱动的IISR.
├─PM
│  ├─BATTERY
│  ├─MDD
│  ├─PDD
│  │  ├─DEFAULT
│  │  └─PDA
│  ├─PMSTUBS
│  └─TEST
│      ├─DEVSAMPLE
│      ├─GET
│      ├─GETD
│      ├─MON
│      ├─REQ
│      ├─SET
│      └─SETD
PM就是power management,里面包含电池驱动.PM device的模块驱动,test下面还有使用模块驱动的例子。PDD目录下是平台相关的驱动代码。
├─PRINTER
│  ├─PCL
│  ├─PRNERR
│  └─PRNPORT
看名字像是打印机相关的驱动,具体内容不详.
├─REGENUM
设备管理器的注册表枚举器,该目录下的内容可以生成一个regenum.dll,该链接库由设备管理器加载并决定了如何使用注册表的信息来加载驱动,因此在很多场合(由硬件决定的不同的加载方式)都需要自己订制该链接库,这样才能正确地加载驱动。
├─RNDISFN
│  └─NET2890
使用2890建立r-NDIS的例子。
├─SAMPTSPI
TAPI的实现样例。
├─SERIAL
│  ├─2890_SER
│  ├─COM16550
│  ├─COM_CARD
│  ├─COM_MDD
│  ├─COM_MDD2
│  ├─ISR16550
│  ├─SER16550
│  ├─SER_CARD
│  └─SER_CARD2
这个目录下都是串行驱动的例子,2890_SER是使用USB端口模仿普通串口的行为,这样子就可以通过RAS用USB端口与桌面PC机相连接,这是最流行的用法,很多ARM系列的处理器BSP都对USB function实现成Serial-unimoden的形式,桌面的驱动可以在activeSync目录下找到,仅仅需要修改驱动的安装信息文件就可以直接使用,所以这个驱动是针对ActiveSync的实现,如果需要将USB实现为RNDIS的话所参考的驱动就不再是这个目录下的代码而是RNDIS下的相应代码了,再进一步如果需要将该设备用于你自定义的功能的话<比如与你自己的USB桌面程序同步/下载>就需要直接将该设备实现为流式驱动,由此可以看到WindowsCE的驱动的实现并不时一尘不变的,实现的方法由目的决定,是多样的。com16550是标准的CE串行驱动范例,COM_CARD是PCMICA界面COM口的例子。COM_MDD/2是串口模块驱动,通常我们并不直接位操作系统实现流式驱动供其调用,而是编写与MDD接口相兼容的代码然后再让MDD区实现流式驱动。这样来我们仅仅需要将特定的硬件操作封装成其所需要的程序就可以了而不需要做与系统相关的诸多工作,该目录下的代码就是串行口模块驱动的源代码。ISR16550是IISR的例子。ser16550是把16550当作标准设备来使用的驱动的例子,这个驱动是不使用模块驱动的。SER_CARD下的驱动是使用ser16550生成的库编写的PCMICA界面的串行口的驱动。这个目录下面并没有列举多个芯片的驱动,而是以16550为例子对其进行了多种方式的实现,对学习windowsCE驱动程序结构还是很有研究价值的。
├─SKINNABLEUI
│  ├─COMMCTRL
│  ├─COMMCTRLXP
│  ├─GWE
│  │  ├─BTNCTL
│  │  ├─CMBCTL
│  │  ├─CURSOR
│  │  ├─GCACHE
│  │  ├─INC
│  │  ├─LBCTLVIEW
│  │  ├─NCLIENT
│  │  ├─SBCMN
│  │  └─STCCTL
│  └─GWEXP
│      ├─BTNCTLVIEWXP
│      ├─CMBCTLVIEWXP
│      ├─GCACHEVIEWXP
│      ├─INC
│      ├─LBCTLVIEWXP
│      ├─NCLIENTVIEWXP
│      ├─SBCMNVIEWXP
│      └─STCCTLVIEWXP
这个目录下面是定值UI界面的例子,不带XP后缀的是WinCE下win9X风格的公共控件和光标等的代码,而带XP后缀则是winXP UI元素的代码。诸如:光标,button,static,checkbox等
├─SMARTCARD
│  ├─BULLTLP3
│  ├─PSCR
│  ├─SMCLIB
│  └─STCUSB
SmartCArd相关的驱动。
├─SNMP
│  └─SNMPTESTMIB
简单网络管理协议的测试软件代码,据说仅仅是对MIB的测试。
├─STARTUI
可以通过改写编译这下面的代码改变启动时运行的程序的外观和功能。
├─TCH_CAL
这个目录下的代码是用于为2D触摸屏驱动提供坐标旋转校准的能力。
├─TEST
│  └─PCMCIA 

├─TOUCH
│  ├─BASIC
│  ├─TCHMAIN
│  └─TRNSCRBR
这里面包括了触摸屏的MDD和DDI等代码。
├─USB
│  ├─CLASS
│  │  ├─COMMON
│  │  ├─HID
│  │  │  ├─CLIENTS
│  │  │  │  ├─CONSHID
│  │  │  │  ├─KBDHID
│  │  │  │  └─MOUHID
│  │  │  └─HIDCLASS
│  │  ├─PRINTER
│  │  └─STORAGE
│  │      ├─CLASS
│  │      ├─DISK
│  │      │  └─SCSI2
│  │      ├─emulatorDbg
│  │      └─INC
│  ├─CLIENTS
│  ├─COMMON
│  ├─HCD
│  │  ├─COMMON
│  │  ├─OHC
│  │  ├─OHCD2
│  │  ├─UHC
│  │  └─UHCD
│  ├─INC
│  └─USBD
该目录下面是USB相关的驱动,class下面的都是类驱动,包括人机界面(也就是键盘鼠标),打印机,磁盘/存储设备的类驱动。HCD下面的代码是OHCD和UHCD的驱动代码。USBD下面是USB 驱动代码。
├─VGACON
这个目录下很有用,如果你不需要GUI而是需要控制台的时候,就可以使用这个目录下的驱动.
├─WAVEDEV
│  ├─MDD
│  ├─PDD
│  │  ├─ES1371
│  │  └─TVIA5000
│  └─UNIFIED
│      └─ENSONIQ
声卡驱动,包含MDD和 ES1371 TVIA5000的MDD,至于Unified下面是Unified Audio Model驱动的例子.
└─WAVEUI
和前面的Calibrui, Fatui, Netui, Oomui, Startui等一样,waveui也是用户自定义界面的一部分,不过这次是相关声音输出的。 


to be continue.... 


Prviate 目录非完全收录
WINCE420/PRIVATE/WINCEOS/COREOS/NK/TOOLS/ROMIMAGE
├─CATBIN
├─CHECKSYMBOLS
├─COMPBIN
├─COMPRESS
├─COMPRESSLZ77
├─COMPRESSLZX
├─CVRTBIN
├─DATA
├─DIFFBIN
├─MYSTRING
├─ROMIMAGE
├─SIGNBIN
│  ├─CE
│  └─NT
├─SORTBIN
├─STAMPBIN
└─VIEWBIN
这个目录下面收录的都是对windowsCE镜像进行操作的工作,但这些工具不是在windowsCE上运行的,而是桌面PC的程序。 
WinCE6.0的EBOOT概要 在开发的过程中使用EBOOT,可以提高开发效率。前一篇介绍NBOOT加载EBOOT的方法时提到,NBOOT必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。本文粗略的介绍了WinCE6、0下EBOOT的内容,但没有涉及具体的代码实现,相关代码可以参考目录C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。EBOOT在实现必备功能的前提下,我们还可以扩展其功能,譬如说初始化LCD,并显示特定的启动画面,显示加载映像的进度等。 阅读详情

相关推荐

WinCE的EBOOT概述及编程指南

本文介绍了WinCE的EBOOT概述以及相关的编程指南。通过了解EBOOT的核心功能和使用示例代码,您可以更好地理解和掌握EBOOT的开发和定制。通过在EBOOT中实现适当的初始化、操作系统加载和参数传递,您可以为Windows CE设备创建一个可靠的引导加载程序。本文将详细介绍WinCE的EBOOT,并提供相应的编程示例。以上只是EBOOT编程的一些关键要点和示例代码,实际开发中可能还涉及更多的细节和功能。通过编写适当的EBOOT代码,您可以自定义设备的引导过程,并实现特定需求。二、EBOOT编程指南。

PixelCoder的博客 544

Eboot代码流程

                                            ----by nasiry                                                         转载请说明出处 eboot弄了很多次了,一直都没有整理一下整个代码流程。这次还是事来做一下吧: 首先通常都是汇编代码:启动时由系统复位导致PC为...

weixin_33747129的博客 114

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

[转]Eboot代码流程 (by nasiry)

----by nasiry转载请说明出处 eboot弄了很多次了,一直都没有整理一下整个代码流程。这次还是事来做一下吧: 首先通常都是汇编代码:启动时由系统复位导致PC为0为触发条件:以2440代码为例直接进入fw.s文件。主要执行的操作为设置处理器频率(PLL),设置内存参数,须注意的是在该部分代码虽然在形式上实现了诸多中断向量,但是这些代码根本上不会得到执行。(参考"Eboot 编译编译器...

weixin_34007879的博客 108

MDM主数据清洗和编码集成说明

绝大多数的企业业务系统是伴随业务发展而建设的,但随着业务发展单一系统难以支撑企业业务闭环。MDM主数据管理平台可以满足企业数据治理的需求,本文针对主数据清洗和编码集成进行梳理。...

数通畅联 3318

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

EBOOT架构及流程

EBOOT

kathyzju的专栏 1476

SpringBoot整合JWT实战:从零构建无状态认证系统,详解Token生成、验证与安全最佳实践

JWT在SpringBoot中的实现与应用 摘要:本文介绍了JWT(JSON Web Token)的基本概念、与Session机制的对比,以及SpringBoot项目中JWT的整合实现。JWT由Header、Payload和Signature三部分组成,具有无状态、跨域支持等优势。文章详细展示了如何在SpringBoot项目中配置JWT环境,封装JWT工具类来实现Token的生成、解析和验证功能,包括密钥管理、自定义声明、签名验证等核心操作。通过对比表格和生活化比喻,帮助读者理解JWT与传统Session的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1775

Eboot软件框架

Eboot,全称为Ethernet Bootloader,它主要负责通过以太网把系统镜像从主机下载到目标平台的非易失性固态存储设备中,它还主要负责配置一些系统的启动参数(如TOC)等。Eboot一般是在系统定制过程中利用系统定制平台工具(如Platform Builder)完成开发,而Nboot一般是用ADS开发的。  Eboot的软件代码可以划分为以下5个部分:1、BLCOMMON:

昔日之的专栏 1737

10款AI工具赋能虚拟展厅设计:架构师效率提升90%的秘密武器

2020年全球疫情成为数字转型的催化剂,虚拟展厅从"可选项"迅速转变为"必需品"。根据Gartner最新报告,到2025年,超过70%的企业将采用虚拟展厅作为客户体验和产品展示的核心渠道。这一转变不仅是应急措施,更是商业模式的永久性革新。虚拟展厅突破了物理空间的限制——一个精心设计的虚拟展厅可以同时接待来自全球各地的访客,无需考虑场地容量;展品可以以数字形式永久保存,避免了物流和损耗问题;数据分析功能可以精确追踪每位访客的行为轨迹,提供前所未有的洞察。数据透视。

AI 领航者的博客 1573

麒麟系统无法进入单用户模式该怎么办?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1820

WINCE EBOOT的配置方法

-------------------------------------------------------------------------------------------------------------------------------------- EBOOT是WINCE调试的好工具,在EBOOT上我也走了不少弯路,现将成功的经验与大家分享,希望能给有需要的人一点帮助!---S

sunwill_chen的专栏 1972

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记

本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。

添柴程序猿的专栏 1239

wince下EBOOT详解

为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤: 1.       针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。 2.       利用创建的BSP,定制一个系统设计(OS Design)

ZMEmbeded的专栏 2041

黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

黑猫带你学eMMC协议第7篇:全网最全emmc写保护详解(write protect) 黑猫带你学eMMC协议第8篇:emmc可靠写详解(Write Reliability) 黑猫带你学eMMC协议第9篇:emmc的分区配置(partitioning) 黑猫带你学eMMC协议第10篇:eMMC命令队列详解(CMDQ) 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim…) 黑猫带你学eMMC协议第12篇:

黑猫奥利奥的博客 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WinCE Eboot中的BLCOMMON

作者:ARM-WinCE 在EBOOT中,从Startup.s跳转到C程序入口以后,程序就可以用C语言来编写了,这样感觉就好多了。一般C语言的入口就是一个Main函数,也可能叫其他的名字。在这个Main函数中会掉用BootloaderMain函数,该函数在BLCOMMON模块中被定义的。一般Main函数的写法如下: void (void){    // Common boo

唐勉的ARM/Linux/WinCE专栏 5796

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Eboot启动代码分析

Eboot启动代码分析启动代码通常都是用处理器相应的汇编代码写成,比较晦涩,但是却包含了很多与平台相关的信息,对初始化代码进行分析有利于对平台的理解。本文将对Eboot的初始化代码进行分析,主要包含从Reset到进入C的main开始。mov     r0, #0x48000000         ; Memory controller base physical addr.    ad

yeyueyeyue的专栏 2095

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WinCE EBOOT的入口Startup.s

作者:ARM-WinCE 在Startup.s文件中包含一个startup的入口函数,该函数为EBOOT的最开始的入口。在系统上电或者冷启动的时候,这是第一个被执行的函数。该函数都是由汇编语言编写的,完成基于硬件平台的最初的初始化,也就是CPU的相关初始化,如果有必要,也可以在这里对外围的设备进行初始化。该函数执行到最后,会跳转到C语言的入口,一般是Main函数,或者叫做EBootMain

唐勉的ARM/Linux/WinCE专栏 5532

S3c2410/2440的Eboot流程介绍

对于嵌入式系统来说,一般都需要一个bootloader来下载和引导操作系统,常用的bootloader有eboot,uboot以及vivi等,对于windows ce来说最理想的bootloader当然是eboot(我也做了利用uboot下载和引导ce,以后我会介绍)。下面我就把自己开发eboot的过程和大家分享。eboot的流程可以如下图所示:    1)eboot和nk公用一段

AwingPig 1834

WinCE Eboot中的OEM Flash函数

作者:ARM-WinCE 在EBOOT中提供了操作Flash的功能,可以将下载的WinCE image烧到Flash当中,这需要实现一些Flash相关的OEM函数。 这些OEM函数会在BLCOMMON模块中被调用,也就是在blcommon.c文件的DownloadImage函数中被调用。在DownloadImage函数中,一般image文件的header会被先下载并进行解析。然后调

唐勉的ARM/Linux/WinCE专栏 3279

WINCE5.0 EBOOT下载更新开机LOGO

原先用的开发板的开机LOGO是用数组的形式放进EBOOT.BIN和NK.BIN中的,这样带来的问题是:图片分辨率很大的时候需要修改EBOOT.BIN。另外如果我们需要经常更新LOGO的话,还要重新编译,这个如果源码不开放,那就抓狂了。用EBOOT来下载更新LOGO,就是把LOGO放到NAND的固定块中去。让系统起来后自己去读它。然后显示出来。开发平台:SC32440+64MB NAND+64MB SDRAM + WINCE5.0基本流程:1,在EBOOT中MAIN.C中添加下载图片二进制文件的驱动命令函数,

lightsoure的专栏 1620
上一篇: 生产者-消费者问题
下一篇: ARM 处理器如何处理异常
ryman
博客等级 码龄22年 77粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值