WINCE 实验指导书Word格式.docx
《WINCE 实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《WINCE 实验指导书Word格式.docx(75页珍藏版)》请在冰点文库上搜索。
![WINCE 实验指导书Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/eec4817f-4b70-48d1-82dc-359024e33d39/eec4817f-4b70-48d1-82dc-359024e33d391.gif)
二、实验内容
建立WinCE的PC端模拟器,建立使用模拟器的配置,认识基于PB端的WinCE远程调试
工具。
具体步骤如下:
✧根据目标平台的特点和系统的需要,使用PlatformBuilder配置WINDOWSCE操作系统的特性和功能。
✧编译、链接操作系统内核,生成内核镜像文件NK.bin。
✧将镜像文件下载,并在模拟器上运行生成的WINDOWSCE系统。
✧同时,构建一个调试版WINDOWSCE系统,并实际调试该系统。
三、预备知识
嵌入式系统调试手段和方法的基本概念,操作系统基本知识,PlatformBuilder基本操
作。
四、实验设备
硬件:
PC一台P3以上(内存不小于384MB,安装完工具硬盘剩余空间不得小于600M)、
ARM9实验箱(包含NETARM2410-S实验板、JTAG仿真器、各种串口线、并口线、网线、光盘
等)一台。
软件:
PC操作系统Win2000以上、ADS1.2集成开发环境、PlatformBuilder4.2版本、
SourceInsight3.0。
五、实验原理
模拟器(emulator)是PB的一部分。
专用于调试在PB下创建的内核及应用程序。
模拟器能够在PC下模拟WindowsCE的物理平台。
但实际上它只不过是一个运行在CPURing3级别的用户程序。
所以它的运行速度要比正常的物理平台要慢。
模拟器仅支持x86平台,它只能调试基于"
Emulator:
x86"
的内核和所有用x86指令集编译的程序。
模拟器有很大的限制,这些限制使它只能运行简单的应用程序。
但是有一点是好的,操作系统的大多数API对于任何CPU而言都是相同的。
考虑到不受CPU类型影响的简单程序,还是可以在模拟器上调试的。
学习PB,用它来创建内核而又没有实际的物理平台来调试,那么模拟器非常适合。
但模拟器的限制也非常多,所以即使在模拟器下调试过所有能够调试的内核特征(feature,或者称组件),你掌握的也不过是冰山一角。
WindowsCE.net的模拟器是嵌入式开发的非常重要的工具利器之一,通过模拟器可以在开发端进行平台的模拟仿真验证。
并且在PB方面和EVC方面都可以启动模拟器。
通过模拟器,可以模拟一个在线运行的WinCE系统设备,使得针对硬件设备的调试可以放在PC端模拟实现,这对于整个开发过程中的设计和验证有着至关重要的作用。
这一点和许多嵌入式操作系统有相似之处,例如VxWorks。
图1-1WindowsCE模拟器窗口
注意:
关于模拟器的硬件限制:
(摘自WindowsCE帮助文档)
✧仅能模拟DEC2114x网卡驱动来提供网络支持,其它网卡驱动不支持。
✧ 仅能模拟FLAT显示驱动,其它显示驱动不支持。
✧ 不支持USB设备
✧ 不支持PC卡、硬盘、CF卡。
✧ 不支持FAT、CDFS、DVD文件格式。
六、实验步骤
1、使用PB建立一个X86体系下的模拟器
方法和上一个实验讲过的方法类似,以下简单概括一下过程。
(1)利用向导建立工程,第一步如图所示:
图1-2工程建立第一步
点击“Next”进入下一步,如图所示:
图1-3工程建立第二步
在这里可以选择你需要的设备,也可以使用Customconfiguration自己定制。
点击
“Next”进入下一步,如图所示:
图1-4工程建立第三步
图1-5工程建立第六步
图1-6工程建立第七步
(2)配置编译环境
首先需要设置Platform\setting…对话框
选择Retail模式
图1-7设置Platform\setting…对话框
确保EnableKITL,EnableKernelDebuger,EnableFullKernelMode三项都被选中,
如图所示。
图1-8设置Platform\setting选项
图1-9语言选项
(3)编译
快捷按钮或者选择菜单Build\BuildPlatform编译工程。
具体编译的时间和你
的机器配置有很大关系。
编译完毕,在系统信息里面会显示编译完毕信息“×
errors,×
warnings”,并显示生
成的内核镜像文件,如图所示。
图1-10内核镜像文件
(4)下载到模拟器
配置模拟器:
编译成功后,单击"
Target"
-"
ConfigureRemoteConnection"
,如图2-35。
在弹出的对话框中找到"
Download"
下拉框,选择"
Emulator-4.20"
,单击后面的"
Configure"
,
在弹出的对话框中设置分辨率为800X600或640X480。
系统内存设置为64MB。
单击"
OK"
后,在"
Kernel"
下拉框中选择"
。
,如图所示。
图1-11配置连接
图1-12配置模拟器
启动模拟器:
DownloadInitialize"
在下面的对话框点“Yes”。
图1-13启动模拟器
等待一会,模拟器就出来了。
可以看到标准外壳的界面,也就是桌面。
图1-14初始化下载
显示模拟器界面如下图。
模拟器在本地PC的生成需要占用较大的内存和CPU使用,所以应当保证足够的
可用内存,否则模拟器的运行将非常的慢。
同时,由于PB编译模拟器会产生大量文件,所
以必须保证WindowCE.net系统目录所在分区有足够的硬盘空间(至少600M),否则在编译
过程中会因磁盘空间不够而中止。
图1-15模拟器界面
七、思考题
结合你的实验操作想一下,使用模拟器对于嵌入式开发有什么好处?
实验二、WindowsCEBOOTLOADER实验
1、掌握WinCE的启动过程,
2、掌握WinCEforS3C2410中Bootloader的基本工作原理,
3、了解一般Bootloader的开发方法。
学习NETARM2410-S上WinCEBootloader的工作原理,了解各级boot的功能,认识
Bootloader在嵌入式操作系统中的一般开发方法。
✧了解WinCE的启动过程,掌握WinCEforS3C2410中Bootloader的基本工作原理
✧掌握两级Bootloader的不同功能,完成两级Bootloader的烧写
✧编译、链接操作系统内核,生成内核镜像文件NK.bin,通过Eboot下载镜像文件,最终在开发板上引导WINDOWSCE系统
C语言基本知识,操作系统体系结构基础知识,Bootloader方面知识。
四、实验设备及工具
PC一台P3以上(内存不小于384MB,安装完工具硬盘空间不得小于600M)、ARM9
实验箱(包含NETARM2410-S实验板、JTAG仿真器、各种串口线、并口线、网线、光盘等)
一台。
五、实验原理及步骤
1、Bootloader概述
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,可以完成初始化硬件设备、建立内存空间的映射图、和内核镜像建立通讯通道和调试通道等等工作,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常来讲,BootLoader是严重依赖于硬件而实现的,特别是在嵌入式系统中(有些部分还不可避免的使用汇编语言实现)。
因此,在嵌入式的世界里几乎不可能建立一个通用的BootLoader。
所以针对特定的处理器,必须专门来定制Bootloader,以实现不同的功能需求。
图2-1bootloader与其它结构的关系
绝大多数的Bootloader实现的功能都无外乎两个:
启动内核镜像和下载内核镜像。
而二者的区别在用户看来是不存在的,它们只针对开发人员。
因此,Bootloader的作用是看起来很不起眼但实则是很重要的。
✧启动加载(Bootloading)模式:
即Bootloader自动加载系统的过程,整个过程并没有开发者和用户的介入。
在正常条件下,必须保证这种启动方式的有效,特别是在嵌入式产品发布的时侯,BootLoader必须直接工作在这种模式下以保证系统的正常运行。
✧下载(Downloading)模式:
在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,例如:
下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。
有的系统还将启动各种通讯方法。
BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用;
此外,以后的系统更新也会使用BootLoader的这种工作模式。
工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口,并可以执行简单的交互。
如下图2-2所示
图2-2BootLoader结构图
2、烧写Bootloader
2410-S上的CE系统和其他RTOS不同,它具有两级Bootloader来引导内核镜像。
在
Bootloader阶段,比起其他系统Bootloader来讲要复杂的多。
(1)Nboot
Nboot(NandFlashBootloader)是2410-S上WinCE的第一级Bootloader,位于NandFlash的Block0。
主要负责初始化Flash,读取TOC,等等工作,最后将Eboot内容拷贝到RAM中,把CPU执行权交给Eboot接管。
Nboot可以使用ADS开发,也可以使用其他工具来开发。
使用SJF来把Nboot部分Bootloader烧写在第0个block中。
使用方法如下:
✧修改BIOS中计算机并口的选项,设置并口为“378”模式。
✧安装Giveio驱动,具体安装请参考Giveio的说明。
✧之后在平台和PC之间连接好JTAG下载线。
在命令行运行SJF2410/f:
2410loader.bin回车,可以看到如下图界面
注:
在这里三次选择顺序为000(012的0)
图2-3
选择K9S1208prog,即输入“0”,回车,如图所示。
图2-4
选择K9S1208Program,即输入“0”,回车,如图2-5所示。
图2-5
向block0烧写,即输入“0”,回车。
之后看到出现“Epppp……”字样表示正在向对应
的flash中写入数据。
烧写完之后选择“2”Exit退出,如图所示。
图2-6
图2-7
(2)TOC
TOC(TableOfContent)是整个NandFlash中存储内容的一个列表,这里面储存了有关启动和系统内核的一些相关存储信息,需要写在NandFlash的block1中,由Nboot里的函数读取。
之后Nboot会按照读取的内容进行配置和跳转到不同的地址。
使用文本查看工具可以看到TOC的主要组织形式。
如图所示:
图2-8
在这里三次选择顺序为001(012的0)
图2-9
图2-10
(3)Eboot
Eboot(EthernetBootloader)是一种高级Bootloader,可以理解为一个伪的KernelImage,位于从NandFlash的Block2开始部分空间。
它主要负责各个设备的初始化,内存地址映射,文件系统,网络系统驱动和加载内核镜像的相关准备工作,已经是比较复杂的Bootloader了。
使用Eboot下载内核,Eboot执行完毕之后可以通过控制台来下载真正的KernelImage,并跳转到Kernel来执行,这时系统就引导起来了。
在执行过程中,Eboot会根据需要改变TOC中的内容,这样就记录下来当时的状态,例如IP地址,MAC地址,启动信息等等。
值得注意的是,只有在调试阶段才有使用Eboot的必要,当系统设计完毕之后,可以通过修改Nboot来直接跳转执行KernelImage,不再使用Eboot来控制执行。
这时,启动速度会有很大提高。
BootLoader由两部分组成:
OEM启动代码(OEMstartupcode)和主代码(maincode)。
OEM启动代码是最先执行的部分,它的功能是初始化内存寄存器、设置CPU频率、初始化高速缓存等。
之后它跳转到主代码中执行。
一般OEM启动代码都是用汇编编写。
主代码一般用C语言编写,它负责其它所有任务,在执行的同时还能够将执行的相关信息显示在屏幕上。
一般添加公司LOGO或者其它启动LOGO都在此修改。
主代码主要由几个部分组成:
镜像下载代码,通过并口或者网卡来实现从远程计算机下载nk.bin;
串口调试代码,包含对串口的读写函数,用户调用这些函数就可以通过串口在远程计算机和本地计算机之间通信;
写flash代码,包含写镜像到flash的函数;
硬件监控代码。
一般的BootLoader的执行流程见下图:
图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(012的0)
图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有两个选择,切换DOWNLOADNEW方式和LAUNCHEXIST方式;
✧6选择是否将RAM内的image写入到NandFlash中去,如果是Disable,则系统掉电将
✧不能被保存;
✧7选择修改MAC地址,推荐避开主机的MAC地址;
✧8选择是否开启KernelDebug功能;
✧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)第一次下载选择DOWNLOADNEW方式成功后改为LAUNCHEXIST方式
6)若不选择ENABLED将不会被写入FLASH中掉电后将会丢失
7)修改MAC地址;
不要与主机发生冲突(二者设置不同)
9)最好在下载新内核镜像时候先格式化FLASH否则可能会在下载新内核后出现一些错误
4.对编译好的镜像内核进行下载:
(此镜像是通过PlatformBuilder4.2来完成的;
此工具软件可在微软网站下载)
(1)首先在PlatformBuilder4.2上建立一个工程(建立细节参考实验一)
(2)然后把NK.bin放在你安装PlatformBuilder4.2的盘符下如:
C:
\WINCE420\PUBLIC\arm2410\RelDir\SAMSUNG_SMDK2410_ARMV4IDebug
arm2410是建立的工程名字
(3)在PB中选择菜单中Target/ConfigureRemoteConnection…,弹出如下对话框:
选择相应的平台之后将“Download:
”“Kernel”都选择为“Ethernet”。
然后启动实验板,按空格进入控制台,监视超级终端,选择“D”选项下载新的内核,然后等待超级终端出现:
“Usingdevicename:
'
SMDK241036864'
+EbootSendBootmeAndWaitForTftp
SentBOOTMEto255.255.255.255
SentBOOTMEto255.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及PlatformBuilder下载已经编译好的NKimage
到目标设备上。
其中NK.bin在\PUBLIC\NETARM2410-S\RelDir\
图2-26
4、在上面对话框中点”configure…”出现如下对话框:
图2-27
在其中选择出现的设备名,之后“OK”。
然后确定。
这时会出现下载进度。
等待下载完
毕。
下载完毕后目标板上的WinCE系统会自动运行。
图2-28
图2-29
当WINCE操作系统成功启动后按实验平台的复位键重新启动WINCE操作系统并对EBOOT进行重新配置:
5)改为LAUNCHEXIST方式
6)改为DISABLE
w)对修改过的选项进行保存
六、思考题
1、Bootloader在嵌入式操作系统中的作用和功能是什么?
想一想,WinCE中Bootloader
的形式和功能各是什么?
2、想一想,如何修改nboot代码使nboot直接引导内核镜像启动,不经过eboot阶段。
(提示:
使用TOC的不同内容,可以选择跳转到哪个,TOC已经包含了系统的基本信息)
实验三、WindowsCE驱动开发
1、学会使用WinCE操作系统开发工具
2、熟悉开发环境
3、了解嵌入式系统驱动开发的基本思想和开发过程
学习使用PlatformBuilder4.2集成开发环境,建立流驱动程序。
✧了解WinCE基本系统体系架构
✧了解WINDOWSCE系统设备驱动基础知识和方法
✧学习使用PlatformBuilder4.2集成开发环境,建立流驱动程序
C语言基本知识,设备驱动基础知识和方法,WinCE基本系统体系架构。
PC操作系统Win2000以上、ADS1.2集成开发环境、Plat