资源描述
WINCE 系统实验指引书
WINCE 系统实验指引书 1
实验一、Windows CE系统平台创立及模仿器使用: 2
一、实验目 2
二、实验内容 2
三、预备知识 2
四、实验设备 2
五、实验原理 3
六、实验环节 4
七、思考题 11
实验二、Windows CE BOOTLOADER 实验 12
一、实验目 12
二、实验内容 12
三、预备知识 12
四、实验设备及工具 12
五、实验原理及环节 12
六、思考题 30
实验三、Windows CE驱动开发 31
一、实验目 31
二、实验内容 31
三、预备知识 31
四、实验设备及工具 31
五、实验原理及阐明 31
六、实验环节 33
七、思考题 40
实验四、Windows CE应用程序开发 41
一、实验目 41
二、实验内容 41
三、预备知识 41
四、实验设备及工具 41
五、实验原理及阐明 41
六、实验环节 44
七、思考题 58
实验一、Windows CE系统平台创立及模仿器使用:
一、实验目
1、理解WinCE 下重要工具——模仿器
2、学习和模仿器有关远程调试工具
3、学习WinCE 调试手段
4、复习WinCE 开发工具Platform Builder
二、实验内容
建立WinCE PC 端模仿器,建立使用模仿器配备,结识基于PB 端WinCE 远程调试
工具。详细环节如下:
² 依照目的平台特点和系统需要,使用Platform Builder配备WINDOWS CE操作系统特性和功能。
² 编译、链接操作系统内核,生成内核镜像文献NK.bin。
² 将镜像文献下载,并在模仿器上运营生成WINDOWS CE系统。
² 同步,构建一种调试版WINDOWS CE系统,并实际调试该系统。
三、预备知识
嵌入式系统调试手段和办法基本概念,操作系统基本知识,Platform Builder 基本操
作。
四、实验设备
硬件:PC 一台P3 以上(内存不不大于384MB,安装竣工具硬盘剩余空间不得不大于600M)、
ARM9 实验箱(包括NETARM2410-S 实验板、JTAG 仿真器、各种串口线、并口线、网线、光盘
等)一台。
软件:PC 操作系统Win 以上、ADS1.2 集成开发环境、Platform Builder 4.2 版本、
Source Insight3.0。
五、实验原理
模仿器(emulator)是PB 一某些。专用于调试在PB 下创立内核及应用程序。模仿器可以在PC 下模仿Windows CE 物理平台。但事实上它只但是是一种运营在CPU Ring 3级别顾客程序。因此它运营速度要比正常物理平台要慢。模仿器仅支持x86 平台,它只能调试基于"Emulator:x86"内核和所有用x86 指令集编译程序。模仿器有很大限制,这些限制使它只能运营简朴应用程序。但是有一点是好,操作系统大多数API 对于任何CPU 而言都是相似。考虑到不受CPU 类型影响简朴程序,还是可以在模仿器上调试。学习PB,用它来创立内核而又没有实际物理平台来调试,那么模仿器非常适合。但模仿器限制也非常多,因此虽然在模仿器下调试过所有可以调试内核特性(feature,或者称组件),你掌握也但是是冰山一角。
Windows CE.net 模仿器是嵌入式开发非常重要工具利器之一,通过模仿器可以在开发端进行平台模仿仿真验证。并且在PB 方面和EVC 方面都可以启动模仿器。通过模仿器,可以模仿一种在线运营WinCE 系统设备,使得针对硬件设备调试可以放在PC 端模仿实现,这对于整个开发过程中设计和验证有着至关重要作用。这一点和许多嵌入式操作系统有相似之处,例如VxWorks。
图1-1 Windows CE 模仿器窗口
注意:关于模仿器硬件限制:(摘自Windows CE 协助文档)
² 仅能模仿DEC 2114x 网卡驱动来提供网络支持,其他网卡驱动不支持。
² 仅能模仿FLAT 显示驱动,其他显示驱动不支持。
² 不支持USB 设备
² 不支持PC 卡、硬盘、CF 卡。
² 不支持FAT、CDFS、DVD 文献格式。
六、实验环节
1、使用PB 建立一种X86 体系下模仿器
办法和上一种实验讲过办法类似,如下简朴概括一下过程。
(1)运用向导建立工程,第一步如图所示:
图1-2 工程建立第一步
点击“Next”进入下一步,如图所示:
图1-3 工程建立第二步
在这里可以选取你需要设备,也可以使用Custom configuration 自己定制。点击
“Next”进入下一步,如图所示:
图1-4 工程建立第三步
图1-5 工程建立第六步
图1-6 工程建立第七步
(2)配备编译环境
一方面需要设立Platform\setting…对话框
选取Retail 模式
图1-7 设立Platform\setting…对话框
保证Enable KITL,Enable Kernel Debuger,Enable Full Kernel Mode 三项都被选中,
如图所示。
图1-8 设立Platform\setting 选项
图1-9 语言选项
(3)编译
点击快捷按钮或者选取菜单Build\Build Platform 编译工程。详细编译时间和你
机器配备有很大关系。
编译完毕,在系统信息里面会显示编译完毕信息“×errors,×warnings”,并显示生
成内核镜像文献,如图所示。
图1-10 内核镜像文献
(4)下载到模仿器
配备模仿器:编译成功后,单击"Target"-"Configure Remote Connection",如图2-35。
在弹出对话框中找到"Download"下拉框,选取"Emulator-4.20",单击背面"Configure",
在弹出对话框中设立辨别率为800 X 600 或640 X 480。系统内存设立为64MB。单击"OK"
后,在"Kernel"下拉框中选取"Emulator-4.20"。单击"OK",如图所示。
图1-11 配备连接
图1-12 配备模仿器
启动模仿器:单击"Target"-"Download Initialize"。在下面对话框点“Yes”。
图1-13 启动模仿器
等待一会,模仿器就出来了。可以看到原则外壳界面,也就是桌面。
图1-14 初始化下载
显示模仿器界面如下图。
注意:模仿器在本地PC 生成需要占用较大内存和CPU 使用,因此应当保证足够
可用内存,否则模仿器运营将非常慢。同步,由于PB 编译模仿器会产生大量文献,所
以必要保证Window CE.net 系统目录所在分区有足够硬盘空间(至少600M),否则在编译
过程中会因磁盘空间不够而中断。
图1-15 模仿器界面
七、思考题
结合你实验操作想一下,使用模仿器对于嵌入式开发有什么好处?
实验二、Windows CE BOOTLOADER 实验
一、实验目
1、掌握WinCE 启动过程,
2、掌握WinCE for S3C2410 中Bootloader 基本工作原理,
3、理解普通Bootloader 开发办法。
二、实验内容
学习NETARM2410-S 上WinCE Bootloader 工作原理,理解各级boot 功能,结识
Bootloader 在嵌入式操作系统中普通开发办法。详细环节如下:
² 理解WinCE 启动过程,掌握WinCE for S3C2410 中Bootloader 基本工作原理
² 掌握两级Bootloader 不同功能,完毕两级Bootloader烧写
² 编译、链接操作系统内核,生成内核镜像文献NK.bin,通过Eboot下载镜像文献,最后在开发板上引导WINDOWS CE系统
三、预备知识
C 语言基本知识,操作系统体系构造基本知识,Bootloader 方面知识。
四、实验设备及工具
硬件:PC 一台P3 以上(内存不不大于384MB,安装竣工具硬盘空间不得不大于600M)、ARM9
实验箱(包括NETARM2410-S 实验板、JTAG 仿真器、各种串口线、并口线、网线、光盘等)
一台。
软件:PC 操作系统Win 以上、ADS1.2 集成开发环境、Platform Builder 4.2 版本、
Source Insight3.0。
五、实验原理及环节
1、Bootloader 概述
简朴地说,Boot Loader 就是在操作系统内核运营之前运营一段小程序。通过这段小程序,可以完毕初始化硬件设备、建立内存空间映射图、和内核镜像建立通讯通道和调试通道等等工作,从而将系统软硬件环境带到一种适当状态,以便为最后调用操作系统内核准备好对的环境。
普通来讲,Boot Loader 是严重依赖于硬件而实现,特别是在嵌入式系统中(有些某些还不可避免使用汇编语言实现)。因而,在嵌入式世界里几乎不也许建立一种通用Boot Loader。因此针对特定解决器,必要专门来定制Bootloader,以实现不同功能需求。
图2-1 bootloader 与其他构造关系
绝大多数Bootloader 实现功能都无外乎两个:启动内核镜像和下载内核镜像。而两者区别在顾客看来是不存在,它们只针对开发人员。因而,Bootloader 作用是看起来很不起眼但实则是很重要。
² 启动加载(Boot loading)模式:即Bootloader 自动加载系统过程,整个过程并没有开发者和顾客介入。在正常条件下,必要保证这种启动方式有效,特别是在嵌入式产品发布时侯,Boot Loader 必要直接工作在这种模式下以保证系统正常运营。
² 下载(Downloading)模式:在这种模式下,目的机上 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文献,例如:下载内核映像和根文献系统映像等。从主机下载文献普通一方面被 Boot Loader 保存到目的机 RAM 中,然后再被 BootLoader 写到目的机上FLASH 类固态存储设备中。有系统还将启动各种通讯办法。BootLoader 这种模式普通在第一次安装内核与根文献系统时被使用;此外,后来系统更新也会使用 Boot Loader 这种工作模式。工作于这种模式下 Boot Loader 普通都会向它终端顾客提供一种简朴命令行接口,并可以执行简朴交互。
如下图2-2 所示
图2-2 Boot Loader 构造图
2、烧写Bootloader
2410-S 上CE 系统和其她RTOS 不同,它具备两级Bootloader 来引导内核镜像。在
Bootloader 阶段,比起其她系统Bootloader 来讲要复杂多。
(1)Nboot
Nboot(NandFlash Bootloader)是2410-S 上WinCE 第一级Bootloader,位于Nand FlashBlock0。重要负责初始化Flash,读取TOC,等等工作,最后将Eboot 内容拷贝到RAM 中,把CPU 执行权交给Eboot 接管。Nboot 可以使用ADS 开发,也可以使用其她工具来开发。
使用SJF 来把Nboot 某些Bootloader 烧写在第0 个block 中。用法如下:
² 修改BIOS 中计算机并口选项,设立并口为“378”模式。
² 安装Giveio 驱动,详细安装请参照Giveio 阐明。
² 之后在平台和PC 之间连接好JTAG 下载线。
在命令行运营SJF2410 /f:2410loader.bin 回车,可以看到如下图界面
注:在这里三次选取顺序为000(0120)
图2-3
选取K9S1208 prog,即输入“0”,回车,如图所示。
图2-4
选取K9S1208 Program,即输入“0”,回车,如图2-5 所示。
图2-5
向block0 烧写,即输入“0”,回车。之后看到浮现“Epppp……”字样表达正在向相应
flash 中写入数据。烧写完之后选取“2”Exit 退出,如图所示。
图2-6
图2-7
(2)TOC
TOC(Table Of Content)是整个Nand Flash 中存储内容一种列表,这里面储存了关于启动和系统内核某些有关存储信息,需要写在Nand Flash block1 中,由Nboot 里函数读取。之后Nboot 会按照读取内容进行配备和跳转到不同地址。使用文本查看工具可以看到TOC 重要组织形式。如图所示:
图2-8
注:在这里三次选取顺序为001(0120)
图2-9
图2-10
(3)Eboot
Eboot(Ethernet Bootloader)是一种高档Bootloader,可以理解为一种伪KernelImage,位于从Nand Flash Block2 开始某些空间。它重要负责各个设备初始化,内存地址映射,文献系统,网络系统驱动和加载内核镜像有关准备工作,已经是比较复杂Bootloader 了。
使用Eboot 下载内核,Eboot 执行完毕之后可以通过控制台来下载真正Kernel Image,并跳转到Kernel 来执行,这时系统就引导起来了。
在执行过程中,Eboot 会依照需要变化TOC 中内容,这样就记录下来当时状态,例如IP 地址,MAC 地址,启动信息等等。
值得注意是,只有在调试阶段才有使用Eboot 必要,当系统设计完毕之后,可以通过修改Nboot 来直接跳转执行Kernel Image,不再使用Eboot 来控制执行。这时,启动速度会有很大提高。
Boot Loader 由两某些构成:OEM 启动代码(OEM startup code)和主代码(maincode)。OEM 启动代码是最先执行某些,它功能是初始化内存寄存器、设立CPU频率、初始化高速缓存等。之后它跳转到主代码中执行。普通OEM 启动代码都是用汇编编写。主代码普通用C 语言编写,它负责其他所有任务,在执行同步还可以将执行有关信息显示在屏幕上。普通添加公司LOGO 或者其他启动LOGO 都在此修改。
主代码重要由几种某些构成:镜像下载代码,通过并口或者网卡来实现从远程计算机下载nk.bin;串口调试代码,包括对串口读写函数,顾客调用这些函数就可以通过串口在远程计算机和本地计算机之间通信;写flash 代码,包括写镜像到flash 函数;硬件监控代码。普通Boot Loader 执行流程见下图:
图2-11
上图中每个函数功能如下:
StartUp() :CPU最先执行函数。也就是启动代码。
BootLoaderMain() :先后调用KernelRelocate、OEMDebugInit、OEMPlatformInit、OEMPreDownload等函数。
此函数源码文献途径为%_WINCEROOT%\public\common\oak\drivers\ethdbg\blcommon 。
OEMDebugInit() :初始化串口。
OEMPlatformInit() :执行特定平台初始化工作,如时钟、某些驱动程序。
OEMPreDownload() :做下载前准备工作。普通用于反馈给顾客某些信息。
DownloadImage() :下载操作系统镜像到RAM或者Flash。
OEMLaunch() :负责启动镜像。
OEMReadData() :从远程计算机读取数据。
OEMMapMemAddr() :专用于写Flash时使用。由于写flash速度非常慢,因此此函数将Flash镜像暂时缓冲到RAM中。
OEMShowProgress() :从函数名就能看出。
OEMIsFLashAddr() :判断一种地址与否是Flash地址。
OEMFinishEraseFlash() :判断与否完毕了擦除Flash内容工作。
OEMWriteFlash() :写镜像到Flash。
OEMStartEraseFlash() :开始擦除Flash。
OEMContinueEraseFlash() :继续擦除Flash工作。
可以看到,在Eboot 中,所关于于网络和系统初始化工作都已经完毕,并作好了下载
内核镜像准备,DownloadImage()下载内核镜像,最后执行OEMLaunch()函数,跳转到内核
开始地址运营。此后内核就接管了CPU 使用权和控制权,Bootloader 退出控制。
流程图如下图:
图2-12
Eboot 也需要使用sjf2410 在命令行中烧写,在命令行里面敲入sjf2410 /f:eboot.nb0
选取K9S1208,再选取写入Block2.操作与烧写Nboot 完全类似
注:在这里三次选取顺序为002(0120)
图2-13
图2-14
3、控制台使用
Bootloader 下载好之后,可以运营控制台执行某些操作。控制台负责了关于启动内核
基本操作。建立控制台如下图所示:
建立超级终端对EBOOT 进行配备
图2-15
图2-16
图2-17
在这里需要对端口进行设立
图2-18
进入下画面后单击空格键就会进入EBOOT配备截面(即控制台)
图2-19
Eboot配备界面
图2-20
功能解释:
² 1 为设备启动IP 及子网地址设定;
² 2 为boot 延时时间设定;
² 3 选取与否设立动态IP 分派,这一级Boot 可以选取IP 分派方式;
² 4 为重置TOC 为缺省设立,各项参数将还原为默认值;
² 5 有两个选取,切换DOWNLOAD NEW 方式和LAUNCH EXIST 方式;
² 6 选取与否将RAM 内image 写入到Nand Flash 中去,如果是Disable,则系统掉电将
² 不能被保存;
² 7 选取修改MAC 地址,推荐避开主机MAC 地址;
² 8 选取与否启动Kernel Debug 功能;
² 9 为格式化整片NandFlash 为二进制文献系统,这需要大概几分钟时间;
² B 选取与否支持二进制文献系统,如果选取了9,则必要支持二进制文献系统;
² D 下载内核镜像;
² R 读取TOC 中实际配备数据;
² F 为低档格式化NandFlash,选取这一项将擦除flash 上涉及Bootloader 所有内容;
² L 运营NandFlash 上已有内核镜像。
² W 将当前配备好数据写到TOC 中保存。
在这里重要对1、5、6、7、9等进行功能选取(其选项含义在下边有详解)
注:
1) IP及子网地址设定( 注:IP规定同一网段网地址与PC相似)
5)第一次下载选取DOWNLOAD NEW方式成功后改为LAUNCH EXIST方式
6 )若不选取ENABLED将不会被写入FLASH中掉电后将会丢失
7)修改MAC地址;不要与主机发生冲突(两者设立不同)
9) 最佳在下载新内核镜像时候先格式化FLASH否则也许会在下载新内核后浮现某些错误
4. 对编译好镜像内核进行下载:
(此镜像是通过Platform Builder 4.2来完毕;此工具软件可在微软网站下载)
(1)一方面 在 Platform Builder 4.2上建立一种工程(建立细节参照实验一)
(2)然后把NK.bin放在你安装Platform Builder 4.2盘符下如:C:\WINCE420\PUBLIC\arm2410\RelDir\SAMSUNG_SMDK2410_ARMV4IDebug
注:arm2410是建立工程名字
(3 )在PB 中选取菜单中Target/ Configure Remote Connection…,弹出如下对话框:选取相应平台之后将“Download:”“Kernel”都选取为“Ethernet”。然后启动实验板,按空格进入控制台,监视超级终端,选取“D”选项下载新内核,然后等待超级终端浮现:
“Using device name:'SMDK'+EbootSendBootmeAndWaitForTftp
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255”
或类似字样。
图2-21
图2-22
图2-23
选取configure等待选取设备号
图2-24
图2-25
(3)内核编译时间普通较长,如果不想等待太久,可以将光盘中已经编译完毕NK.bin 拷贝到系统编译目录%_winceroot%\PUBLIC\NETARM2410-S\RelDir\SAMSUNG_UT2410XARMV4Release 或类似目录下(如果已经存在则覆盖之)。使用eboot 及Platform Builder 下载已经编译好NK image
到目的设备上。其中NK.bin 在\PUBLIC\NETARM2410-S\RelDir\
图2-26
4、在上面对话框中点”configure…”浮现如下对话框:
图2-27
在其中选取浮现设备名,之后“OK”。然后拟定。这时会浮现下载进度。等待下载完
毕。下载完毕后目的板上WinCE 系统会自动运营。
图2-28
图2-29
当WINCE操作系统成功启动后按实验平台复位键重新启动WINCE操作系统并对EBOOT进行重新配备:
5)改为LAUNCH EXIST方式
6)改为DISABLE
w)对修改过选项进行保存
六、思考题
1、Bootloader 在嵌入式操作系统中作用和功能是什么?想一想,WinCE 中Bootloader
形式和功能各是什么?
2、想一想,如何修改nboot 代码使nboot 直接引导内核镜像启动,不通过eboot 阶段。
(提示:使用TOC 不同内容,可以选取跳转到哪个,TOC 已经包括了系统基本信息)
实验三、Windows CE驱动开发
一、实验目
1、学会使用WinCE 操作系统开发工具
2、熟悉开发环境
3、理解嵌入式系统驱动开发基本思想和开发过程
二、实验内容
学习使用Platform Builder 4.2 集成开发环境,建立流驱动程序。
² 理解WinCE 基本系统体系架构
² 理解WINDOWS CE系统设备驱动基本知识和办法
² 学习使用Platform Builder 4.2 集成开发环境,建立流驱动程序
三、预备知识
C 语言基本知识,设备驱动基本知识和办法,WinCE 基本系统体系架构。
四、实验设备及工具
硬件:PC 一台P3 以上(内存不不大于384MB,安装竣工具硬盘空间不得不大于600M)、ARM9
实验箱(包括NETARM2410-S 实验板、JTAG 仿真器、各种串口线、并口线、网线、光盘等)
一台。
软件:PC 操作系统Win 以上、ADS1.2 集成开发环境、Platform Builder 4.2 版本、
Source Insight3.0。
五、实验原理及阐明
1、WinCE 驱动程序架构
当前WinCE 拥有两种驱动架构模型,一种是本机设备驱动,另一种是流接口设备驱动。其中本机设备驱动已经被Microsoft 开发并由系统直接支持,由GWES(图形窗口及事件子系统)统一管理和加载;流驱动则是由WinCE 设备管理器来管理。这种组织形式相对于UNIX体系来说是比较复杂。
本机设备驱动适合于集成到CE 平台设备。例如电源驱动,它们已经成为了GWES 一某些,不体现为单个DLL 使用。这些驱动程序普通和系统有着较为紧密联系,因此普通是和系统一起加载。
流设备驱动由于具备较好可移植性和可扩展性,被设备管理器独立出来管理统筹。在本实验中,将以一种示例流驱动演示程序来讲述简朴驱动工作。
下面图3-1 中较为清晰显示了单片形式存在驱动和分层方式驱动在WinCE 中组织状况。
图3-1 驱动在WinCE 中组织状况
2、流驱动程序
流驱动程序通过流驱动接口函数和设备管理器进行数据交互,并通过文献形式来组
织,这一点和Unix 平台是很类似。它以动态链接库形式存在,具备同一组接口并调用同
一种函数集。流驱动面向是各种各样外设,重要任务是把外设使用传递给应用程
序来使用。在WinCE 中设备文献普通是保存在固定途径\Windows 目录下,通过注册表机制来完毕特殊命名惯例。虽然流借口驱动程序具备普遍特性,但是咱们仍旧可以使用不同办法来实现它们。例如有些内部设备驱动程序就是使用流接口。此外尽管流接口程序普通是由设备管理器程序加载和卸载,但是有时候应用程序也执行加载和卸载任务。应用程序通过文献系统API 来调用流接口函数,然后由流接口驱动程序调用本机驱动或者通过设备管理器与系统内核外围设备通讯交互,最后直接驱动有关硬件执行动作。
3、流接口驱动程序普通原则入口
流接口驱动程序普通都具备如下函数,具备一种统一操作原则如表3-1 所示:
表3-1 流接口驱动程序函数
函 数 名 称 描 述
XXX_Close 驱动程序关闭时候调用
XXX_Open 打开一种设备驱动时调用
XXX_Deinit 设备管理器或者应用程序卸载驱动时调用
XXX_Init 设备管理器初始化设备时调用
XXX_IOControl 上层软件进行IO 控制调用
XXX_PowerDown 系统挂起前调用
XXX_PowerUp 系统重新启动时调用
XXX_Read 打开设备时候进行读操作
XXX_Write 打开设备时候进行写操作
XXX_Seek 对设备指针进行操作时调用
XXX_Reinit 设备重复打开时调用
其中XXX 代表驱动文献名,由驱动类型3 个大写字母缩写而成,规则由系统商定。详
细规则请参照协助文档和MSDN 阐明。
理解了这些函数功用,就可以开始着手建立起来一种最简朴流驱动程序。它功能
是向缓冲区中读写字符。
六、实验环节
1、建立模仿器工程
运营Platform Builder,建立一种基于X86 体系模仿器。下面驱动程序建立都可以
在仿真器中模仿实现。
注意需要在Applications & Services Development 选项中选取Active Temple Library
(ATL),C libraries &Runtimes,Message Queuing(MSMQ),Microsoft Foundation Classes
(MFC),Standard SDK for Windows CE.net 这几种选项,这样可以保证将来调试驱动和调用应用程序具备足够库和服务可以享用。
详细建立过程和办法可以仿照实验二里面环节来做,这里不再赘述。
2、创立驱动程序工程
在PB 中新建一种工程,单击菜单中File 选取建立New Project or File Name…弹出
如下图3-2 对话框。
图3-2 新建工程
在这里选取Project 标签选取WCE Dynamic-Link Library 即WinCE DLL 并在右侧输入
工程名和存储位置(会默认)。点击“OK”确认。
图3-3 生成DLL 类型
在对话框中选取生成DLL 类型,可以选取An empty project 来创立一种空dll,也
可以选取A simple Windows CE DLL project,创立一种简朴WinCE 动态链接库工程,这
个工程只带有简朴DLL 入口函数。A DLL that exports some symbols 用来生成简朴输
出函数。点“Finish”完毕创立。如图3-3。
创立完PB 主界面上会切换到该工程,如图3-4 所示。
图3-4 工程根目录
再次点击File,选取“New Project or File Name…”,在向导对话框中选取Files 标
签,如下图3-5 所示。
如图3-5 选取File
选取建立C++ Source File,同步添加文献名,存储途径并将文献添加到DLL 工程中。
加入“windows.h”,“tchar.h”头文献和动态链接库入口函数(原则函数)DllEntry
Point( ),建立好一种简朴动态链接库架子,添加相应解决。详见各种阐明文档。
3、编写驱动程序代码
DWORD STR_Init(DWORD dwContext)
{
DWORD dwReturn = 0;
RETAILMSG (1,TEXT(“MYSTRINGS:STR_Init\t\n”));
memset (achBuffer,0,BUFSIZE * sizeof (WCHAR));
dwReturn = 1;
return dwReturn;
}
BOOL STR_Deinit(DWORD hDeviceContext)
{
BOOL bReturn = TRUE;
RETAILMSG(1,(TEXT(MYSTRINGS:STR_Deinit\t\n”)));
return bReturn;
}
DWORD STR_Open (DWORD hDeviceContext,
DWORD AccessCode,
DWORD ShareMode)
{
DWORD dwReturn = 0;
RETAILMSG (1,TEXT(“MYSTRINGS:STR_Open\t\n”));
dwReturn = 1;
return dwReturn;
}
BOOL STR_Close(DWORD hOpenContext)
{
BOOL bReturn = TRUE;
RETAILMSG(1,(TEXT(MYSTRINGS:STR_Close\t\n”)));
return dwReturn;
}
BOOL STR_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
BOOL bReturn = TRUE;
RETAILMSG(1,(TEXT(MYSTRINGS:STR_IOControl\t\n”)));
return bReturn;
}
void STR_PowerDown (DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT(MYSTRINGS:STR_PowerDown\t\n”)));
}
void STR_PowerUp(DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT(MYSTRINGS:STR_PowerUp\t\n”)));
}
DWORD STR_Read(DWORD hOpenContext,
LPVOID pBuffer,
DWORD Count)
{
DWORD darter = 0;
RETAILMSG (1,TEXT(“MYSTRINGS:STR_Read\t\n”));
DWORD cbBuffer = wcslen ( achBuffer);
dwReturn = min(cbBuffer,Count);
wcsncpy((LPWSTR)pBuffer,achBuffer,dwReturn);
return dwReturn;
}
DWORD STR_Seek(DWORD hOpenContext,
Long Amount,
DWORD Type)
{
DWORD dwReturn =0;
RETAILMSG(1,(TEXT(MYSTRINGS:STR_Seek\t\n”)));
Return dwReturn;
}
DWORD STR_Write(DWORD hOpenContext,
LPCVOID pSourcdBytes,
DWORD NumberOfBytes)
{
DWORD dwReturn =0;
RETAILMSG(1,(TEXT(MYSTRINGS:STR_Write\t\n”)));
dwReturn = min(BUFSIZE,NumberOfBytes);
wcsncpy (achBuffer,(LPWSTR) pSourceBytes,dwReturn);
Return dwReturn;
}
拟定编写完毕保存。如果不想编写,也可以直接拷贝光盘中MyDriver.cpp 文献到工
作目录下。
4、准备配备文献
² Def 文献。复制光盘中String.Def 文献到工作目录下。
² Reg 文献。复制光盘中StringReg.reg 文献到工作目录下。
² Cec 文献。复制光盘中MyDriver.cec 文献到工作目录下。
² Makefile 文献和Sources 文献。复制makefile 和sources 文献到工作目录下。
这些文献是 DLL 工程编译必要具备配备文献,它们阐明了关于驱动如何链接,编译路
径,和系统注册等等重要工作,在编写新DLL 时普通都需要进行改动甚至重写。这里直
接拷贝光盘中文献来实现。有兴趣也可以使用文本查看软件(如Ultra Edit32,WinHEX
等)来打开这些文献,看看文献内部是如何配备。
拷贝完毕后,在PB 下导入CEC 文献。将MyDriver.cec 拷贝到PB 当前工程目录下(模仿器目录下),打开File 菜单,选取Manage Catalog Features 弹出一种属性对话框,如图3-6。
图3-6 属性对话框
在右侧按钮中点击Import,选中MyDriver.cec 导入当前工程目录,然后单击“OK”确
认完毕。导入办法和导入平台BSP 办法是相似。
可以发现驱动被添加到工程组件窗口中,在组件上点击右键,选取Add to Platform,
完毕系统驱动添加。
5、编译内核
和实验一编译办法同样,点击来实现编译。特别注意当前是在使用模仿器,因此
在编译选项中应当选中“EMULATOR:X86 WIN32”。
编译之前,在Build Option 选项标签中保证“Enable CE Target Control System”,“Enable Kernel Debugger”,“Enable KITL”被选定,这些选项容许内核向PB 传送调试信息。单击“OK”拟定。如图3-7 所示:
图3-7 编译
6、加
展开阅读全文