Wince系统定制与驱动开发.doc_第1页
Wince系统定制与驱动开发.doc_第2页
Wince系统定制与驱动开发.doc_第3页
Wince系统定制与驱动开发.doc_第4页
Wince系统定制与驱动开发.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华清远见嵌入式培训专家 Windows CE.Net系统定制与驱动开发实验手册V3.1Windows CE.Net系统定制与驱动开发实验指导手册 Ver 3.1目录第一天 实验内容2一、安装SamArmDvk9 II型开发板的WinCE.NET BSP2二、使用BSP在PB4.2中创建一个新的Platform并编译连接生成新的Image文件4三、将生成的Image烧录到FLASH中安装SamArmDvk9 II型开发板的WinCE.NET BSP9四、添加MFC特性,添加鼠标和U盘驱动19五、建立一个带kitl特性的系统镜像22六、导出SDK26七、通过KITL建立EVC的调试环境30第二天 主要内容35一、开机logo的实现35二、通过地址映射操作外部IO,实现LED控制36三、中断的添加和响应36第三天 主要内容38第四天 主要内容42一、编译一个调试型的内核42二、触摸屏驱动校正实验43三、电源管理驱动实现节电管理43第一天 实验内容一、安装SamArmDvk9 II型开发板的WinCE.NET BSP1. 在WINCE420PLATFORM目录下新建一个名为“SMDK2410”的目录,如果该目录下已有名为SMDK2410的目录,将其改名备份。2. 拷贝光盘中的2410WINCE2410WINCE4.2BSPSMDK2410目录中的内容到步骤一建立的SMDK2410目录。3. 去掉该目录中所有文件的只读属性。4. 将“SMDK2410_for_PublicoakdriversNETCARD”目录下的CS8900R目录拷贝到“WINCE420PUBLICCOMMONOAKDRIVERSNETCARD”目录下。5. 在“WINCE420PUBLICCOMMONOAKDRIVERSNETCARD”目录下的dirs文件中添加cs8900r,示例如下。DIRS=cs8900rdc21x46. 拷贝“SMDK2410_for_PublicCESYSGEN”目录下的Makefile文件到“WINCE420PUBLICCOMMONCESYSGEN”目录下。7. 单击【File】【ManageCatalogFeatures】菜单项,如图1所示。图18. 在Catalog列表中单击选中“smdk2410.cec”文件,如图2所示,然后单击【Remove】按钮,删除PB4.2自带的smdk2410BSP。图29. 单击【Import】按钮,导入“PLATFORMSMDK2410smdk2410.cec”文件,如图3所示。图310. 完成第9步操作后,系统将在Catalog的BSPs文件夹下自动添加“SamsungSMDK2410:ARMV4项”,如图4所示,此时BSP安装完成。图4二、使用BSP在PB4.2中创建一个新的Platform并编译连接生成新的Image文件1. 单击【FILE】【NewPaltform】菜单项,如图5所示。图52. 在弹出的【NewPlatformWizardStep1】对话框中单击【Next】按钮,如图6所示。图63. 在弹出的【NewPlatformWizardStep2】对话框中选择新安装的BSP,接着单击【Next】按钮,如图7所示。图74. 在【NewPlatformWizardStep3】对话框中选中【Available configurations】单选按钮,在下面的列表框中选择一项Cofiguration(这里选择Mobile Handheld),接着在右侧的【Platform name】文本框中输入平台名称,如图8所示,最后单击【next】按钮。图85. 在【NewPlatformWizardStep4】对话框中选择需要的应用,如图9所示,接着单击【Next】按钮。图96. 在【NewPlatformWizardStep5】对话框中选择需要的网络设置,如图10所示,然后单击【Next】按钮。图107. 这时进入图11所示的对话框,接着单击【Next】按钮。图118. 在【NewPlatformWizardStep5】对话框中单击【Done】按钮,如图12所示,完成新平台的建立。图129. 右键单击SMDK2410features,在弹出的菜单中选择【Settings】菜单项,如图13所示。图1310. 这时将弹出【Platform Settings】对话框,在右侧的【Build Option】选项卡中,取消【Enable KITL】和【Enable CE Target Control Support】复选框的选中状态,如图14所示。最后单击【OK】按钮完成平台设置。图1411. 单击【Build platform】按钮编译新平台,如图15所示。编译完成后,将得到“EBOOT.BIN”、“EBOOT.NB0”、“NK.BIN”以及“NK.NB0”等文件。图15三、将生成的Image烧录到FLASH中安装SamArmDvk9 II型开发板的WinCE.NET BSP1. 将目标板和PC机器通过串口和Ethernet(要用交叉网线)相连。2. 用MultiJtag工具和并口电缆,连接PC的并口和目标板的JTAG口,将目标板上电,在PC机端的控制台,准备运行SJF程序。3. 将Nboot_Debug.bin文件烧录到FLASH中(该文件用于调用第2块的EBOOT)。在控制台下sjf2410.exe(在开发工具光盘中Flash烧写工具所目录中,应将该程序复制到硬盘中,并将工具光盘2中的NBoot.bin,eboot.nb0文件复制到同一目录下)。键入“sjf2410/f:NBoot_Debug.bin”,如图16所示。图16回车后进入程序后,如图17所示,接着键入“0”。图17回车后如图18所示。选择将文件烧录到第0号块,选择“0”。图18回车后,烧写的过程如图19所示。图19烧写完毕后,选择“2”并按回车返回到控制台。4. 烧录完成后,再次单击运行SJF,将通过Platform Builder 4.2编译生成的EBOOT.NB0文件或是资料盘中附带的EBOOT.NB0文件烧入FLASH的第二块,如图20所示。图20烧录方法同上一步骤,但注意:因为需要将该文件烧在第二块,所以在地址选择中需要选择“2”后回车。该文件较大,烧录时间可能会稍长些。5. 烧录完成后,运行DNW,然后单击【Serial Port】【Connect】菜单项,如图21所示。图216. 按开发板上的复位键,复位开发板,DNW显示如图22所示。图227. 下载完成后按空格键,DNW显示如图23所示。图238. 将各选项设置如图24所示。IP address需要和PC机的IP地址在同一个子网内,如PC机为则IP address可设为255。其他各项保持和上图一致即可。注意设置MAC地址。图239. 键入“W”将设置保存。10. 接着键入“F”将NandFlash低级格式化,如图24所示。这里不会格式化NandFlash的前10块。图2511. 键入“9“将SMC逻辑格式化为BINFS格式,如图26所示,这一步操作时间会比较长(大约5分钟左右)。图2612. 完成上一步操作后,键入“D“下载Image文件,如图27所示。图2713. 接下来需要进行Platform Builder4.2中【Remote Connection】属性的设置。单击【Target】【Configure Remote Connection】菜单项,如图28所示。图2814. 这时将弹出【Configure Remote Connection】对话框,在【Download】下拉列表框中选择【Ethernet】项,如图29所示。图2915. 同样在【Services】选项卡的【Kernel】下拉列表框中也选择【Ethernet】项,如图30所示。图3016. 接着单击【Download】下拉列表框右侧的【Configure】按钮,这时将弹出【Configure Ethernet Download Service】对话框,该对话框的【Available Devices】文本框中将出现【SMDK2410?】项(注:此时目标板需要为等待下载状态),如图31所示。选中该项,然后单击【OK】按钮即可。图3117. 回到Platform Builder4.2中,接着单击【Target】【Download/Initlize】菜单项,通过Ethernet即可将NK.BIN下载到目标板中,如图32所示。图3218. 此时目标板需要在等待下载状态(D),通过DNW能看到反馈信息,如图33所示。图3319. 下载完后通过DNW可以看到程序正在将下载的Image烧录到NandFlash中,如图34所示。图3420. 稍等一会儿后,WINCE开始初始化并运行时,烧录工作就已完成了,如图35所示。图3521. 烧录完成后,按目标板上的复位键,WINCE将自动运行。四、添加MFC特性,添加鼠标和U盘驱动1. 选中“Catalog/Core OS/Display Based Device/Applicationsand Services Development”目录下的“Microsoft Foundation Classes(MFC)”文件,然后单击鼠标右键,在弹出的快捷菜单中选择【Add To Platform】菜单项,如图36所示。图362. 选中“Catalog/Core OS/Display Based Device/Core OS Services/USB Host Support”目录下的“USB Human Input Device(HID) Class Driver”和“USB Storage Class Driver”两个组件,分别单击鼠标右键,在弹出的快捷菜单中选择【Add To Platform】菜单项,如图37、图38所示。图37图383. 重新编译并下载,系统即可正常支持MFC程序、U盘和USB鼠标了。五、建立一个带kitl特性的系统镜像1. 在Platform Builder中打开刚才建立的工程,在工程上单击鼠标右键,在弹出的快捷菜单中选择【setting】菜单项,如图39所示。图392. 这时将弹出【Platform Settings】对话框,接着单击切换到【Build Option】选项卡中,按照图40所示的完成【Build Option】属性的设置。图403. 单击【OK】按钮完成平台设置,然后Rebuild系统镜像并下载,这样就建立了一个带有KITL特性的系统。4. 如板子掉电重启后,带有KITL特性的系统不能自动启动,需要通过DNW和Platform Builder来实现引导启动。5. 首先启动Platform Builder,打开带有KITL特性的工程,如图41所示。图416. 接着启动DNW,然后给开发板上电,按两下空格进入命令菜单,如图42所示。图427. 接着在DNW界面中键入“l”。8. 回到Platform Builder中,单击【Target】【Connect】菜单项,如图43所示。到此就实现了引导启动,带有KITL特性的系统正常启动了。图43六、导出SDK1. 在Platform Builder中打开工程,然后单击【Platform】【ConfigureSDK】菜单项,如图44所示。图442. 这时将弹出【Export SDK Wizard】对话框,单击【下一步】按钮,进行生成的SDK的名称和提供者姓名的填写(可随意填写),如图45所示。图453. 单击【下一步】按钮,按照图46所示的完成“development language”属性的设置(若系统已经加入MFC特性并编译,则MFC相关的两项为灰体必选项)。图464. 最后单击【下一步】按钮完成设定。在Platform Builder中打开工程,再次单击【Platform】【ConfigureSDK】菜单项可以设定SDK文件的输出路径或更改SDK文件名称和提供者信息。5. 在Platform Builder中单击【Platform】【BuildeSDK】菜单项开始创建SDK文件,如图47所示。图476. 完成SDK的创建后,双击生成的.msi文件进行SDK的安装。安装完成后重新启动,打开EVC就可以针对生成的SDK进行编译了。七、通过KITL建立EVC的调试环境1. 首先通过引导启动带KITL特性的系统,然后将资料光盘中的示范工程IntTest复制到硬盘上,在EVC中单击Open Work Space打开硬盘上刚刚复制过来的IntTest工程文件中的IntTest.vcw。2. 在EVC环境下单击【Tools】【Configure platform manager】菜单项,如图48所示。图483. 在弹出的【Windows CE Platform Manager Configuration】对话框中选择刚才导出的SDK文件,如图49所示,然后单击对话框右侧【Properties】按钮。图494. 这时将弹出【Device Properties】对话框,按照图50所示的完成设备属性的设置,最后单击【OK】按钮。图505. 确认编译的目标SDK的名称和刚才选定的SDK一致,如图51所示。图516. 单击【Build】按钮进行编译。如果在编译过程中出现头文件无法找到的错误,应在电脑中进行搜索,然后将找到的文件的路径复制下来。接着在EVC中单击【Tool】【Options】菜单项,在弹出的对话框中切换到【Directory】选项卡中,将刚才找到的文件的路径填入(注意,不可将找到的文件复制到当前工程目录下,否则可能会出现错误),如图52所示。最后单击【OK】按钮。图527. 完成编译成功后,EVC会自动通过KITL和开发板建立联机,至此就可以进行联机调试了。第二天 主要内容一、开机logo的实现1. 找到WINCE420PLATFORMSMDK2410KERNELHALcfw.c文件,找到staticvoidInitDisplay()这个函数的实现部分。2. 下面这段代码即为开机logo的实现,其意义为将已经转化为C数组的BMP文件数据拷贝到显示缓冲区中。memcpy(void*)FRAMEBUF_BASE,ScreenBitmap,ARRAY_SIZE_TFT_16BIT);”3. 动手修改,首先使用Image2Lcd这个工具将一张人意的BMP图片转化为240x180,16位真彩格式,然后转化为一个C数组。(注意:转化后的数组中成员个数应为86400,有些图片文件因为格式上的原因,导致转化后的数组个数不是86400,这种情况下不能正常进行下面的步骤。推荐使用电脑上“我的文档图片收藏示例图片”下的几张图片进行转换)。4.找到“WINCE420PLATFORMSMDK2410KERNELHALsamsung.c”文件,用上面的数组数据替换掉原始的数组数据。(注意:不要改变原始数组的名称,即只将以下代码括号中的部分替换即可。constunsignedshortScreenBitmap=.5. 屏蔽下面这段代码。memcpy(void*)FRAMEBUF_BASE,ScreenBitmap,ARRAY_SIZE_TFT_16BIT)6. 接着加入下面这段代码。FBuf=(structFrameBuffer*)(FRAMEBUF_BASE);for(i=0;i180;i+)for(j=0;jpixeli+40j=ScreenBitmap480*i+2*j|(ScreenBitmap480*i+2*j+1rINTMSK|=BIT_EINT2;s2410INT-rSRCPND=BIT_EINT2;/*InterruptClear*/if(s2410INT-rINTPND&BIT_EINT2)s2410INT-rINTPND=BIT_EINT2;/RETAILMSG(1,(TEXT(CPUPowerResetrn);RETAILMSG(1,(TEXT(ResetButtonPressedResetButtonPressedrSRCPND=BIT_EINT2;if(s2410INT-rINTPND&BIT_EINT2)s2410INT-rINTPND=BIT_EINT2;s2410INT-rINTMSK&=BIT_EINT2;break;(注意:不要对caseSYSINTR_ETHER:。break;这段代码中间省略的代码部分进行改动,以下相同)5. 找到OEMInterruptDisable的实现,找到下面这段代码。caseSYSINTR_ETHER:。break;在其后添加如下代码。caseSYSINTR_EINT2:s2410INT-rINTMSK|=BIT_EINT2;break;6. 找到OEM Interrupt Done的实现,找到下面这段代码。caseSYSINTR_ETHER:。break;在其后添加如下代码:caseSYSINTR_EINT2:s2410INT-rSRCPND=BIT_EINT2;if(s2410INT-rINTPND&BIT_EINT2)s2410INT-rINTPND=BIT_EINT2;s2410INT-rINTMSK&=BIT_EINT2;break;7. 至此完成中断在内核中的注册。2. 应用程序部分编译示范程序,下载到开发板上运行,单击【等待】菜单项,程序进入等待中断状态,当按下板上的按键k7时,中断被触发,程序弹会弹出出提示框。再次点击后,会再次进入等待状态。第三天 主要内容流驱动驱动程序部分代码#define_WIN32_WINNT0x0400#include#includeHANDLEg_hInstance;#defineBUFSIZE256WCHARachBufferBUFSIZE;/-/-BOOLWINAPIDllEntryPoint(HANDLEhinstDLL,DWORDdwReason,LPVOID/*lpvReserved*/)switch(dwReason)caseDLL_PROCESS_ATTACH:g_hInstance=hinstDLL;RETAILMSG(1,(TEXT(STRINGS:DLL_PROCESS_ATTACHn);returnTRUE;caseDLL_THREAD_ATTACH:RETAILMSG(1,(TEXT(STRINGS:DLL_THREAD_ATTACHn);break;caseDLL_THREAD_DETACH:RETAILMSG(1,(TEXT(STRINGS:DLL_THREAD_DETACHn);break;caseDLL_PROCESS_DETACH:RETAILMSG(1,(TEXT(STRINGS:DLL_PROCESS_DETACHn);break;#ifdefUNDER_CEcaseDLL_PROCESS_EXITING:RETAILMSG(1,(TEXT(STRINGS:DLL_PROCESS_EXITINGn);break;caseDLL_SYSTEM_STARTED:RETAILMSG(1,(TEXT(STRINGS:DLL_SYSTEM_STARTEDn);break;#endifreturnTRUE;/-/-BOOLSTR_Close(DWORDhOpenContext)BOOLbRet=TRUE;RETAILMSG(1,(TEXT(STRINGS:STR_Closen);returnbRet;/-/-BOOLSTR_Deinit(DWORDhDeviceContext)BOOLbRet=TRUE;RETAILMSG(1,(TEXT(STRINGS:STR_Deinitn);returnbRet;/-/-DWORDSTR_Init(DWORDdwContext)DWORDdwRet=0;RETAILMSG(1,(TEXT(STRINGS:STR_Initn);/Initializebuffertozero.memset(achBuffer,0,BUFSIZE*sizeof(WCHAR);/Setreturnvaluetonon-zero.dwRet=1;returndwRet;/-/-BOOLSTR_IOControl(DWORDhOpenContext,DWORDdwCode,PBYTEpBufIn,DWORDdwLenIn,PBYTEpBufOut,DWORDdwLenOut,PDWORDpdwActualOut)BOOLbRet=TRUE;RETAILMSG(1,(TEXT(STRINGS:STR_IOControln);returnbRet;/-/-DWORDSTR_Open(DWORDhDeviceContext,DWORDAccessCode,DWORDShareMode)DWORDdwRet=0;RETAILMSG(1,(TEXT(STRINGS:STR_Openn);dwRet=1;/Havetomakenon-zeroforthiscalltosucceed.returndwRet;/-/-voidSTR_PowerDown(DWORDhDeviceContext)RETAILMSG(1,(TEXT(STRINGS:STR_PowerDownn);/-/-voidSTR_PowerUp(DWORDhDeviceContext)RETAILMSG(1,(TEXT(STRINGS:STR_PowerUpn);/-/-DWORDSTR_Read(DWORDhOpenContext,LPVOIDpBuffer,DWORDCount)DWORDdwRet=0;RETAILMSG(1,(TEXT(STRINGS:STR_Readn);/Copythesmallerofbuffersizeorstringsize.DWORDcbBuffer=wcslen(achBuffer);dwRet=min(cbBuffer,Count);wcsncpy(LPWSTR)pBuffer,achBuffer,dwRet);/Returnnumberofbytesread.returndwRet;/-/-DWORDSTR_Seek(DWORDhOpenContext,longAmount,DWORDType)DWORDdwRet=0;RETAILMSG(1,(TEXT(STRINGS:STR_Seekn);returndwRet;/-/-DWORDSTR_Write(DWORDhOpenContext,LPCVOIDpSourceBytes,DWORDNumberOfBytes)DWORDdwRet=0;RETAILMSG(1,(TEXT(STRINGS:STR_Writen);/Copythesmallerofbuffersizeornumberofbytestheysendus.dwRet=min(BUFSIZE,NumberOfBytes);wcsncpy(achBuffer,(LPWSTR)pSourceBytes,dwRet);/Returnnumberofbyteswritten.returndwRet;驱动程序注册表部分HKEY_LOCAL_MACHINEDriversBuiltInSTRINGSIndex=dword:1Prefix=STRDll=String.dllOrder=dword:0调用这个驱动程序#include#includeStdAfx.h#defineBUFFER_SIZE256/ThebuffersizeisthesameasthedriversbuffersizeintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow)/OpentheSTRINGSdriverwithREADandWRITEaccess/-HANDLEhStr=CreateFile(TEXT(STR1:),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);if(INVALID_HANDLE_VALUE=hStr)MessageBox(NULL,_T(CannotopenSTR1:),_T(StringApp),MB_OK);return0;/Writeastringtothedriver./-DWORDdwWritten=0;WCHAR*pString=TEXT(ThisisatestoftheStringDriver.Thisisonlyatest);WriteFile(hStr,pString,(_tcslen(pString)+1),&dwWritten,NULL);/Readstringfromdriver./-WCHARwchBUFFER_SIZE;DWORDdwBytesRead=BUFFER_SIZE;memset(&wch,0,BUFFER_SIZE*sizeof(WCHAR);ReadFile(hStr,wch,sizeof(wch),&dwBytesRead,NULL);MessageBox(NULL,wch,TEXT(StringApp),MB_OK);/Disconnectfromdriver./-CloseHandle(hStr);return0;第四天 主要内容一、编译一个调试型的内核1. 首先按照第一天的实验内容新建一个pb工程,并添加相应的驱动。2. 右键单击该工程,在弹出的快捷菜单中选择【setting】项,按图53所示的完成平台的设置。图533. 单击【OK】,pb会自动添加这些属性到工程中去。4. 在工程中删除一些组件,包括媒体播放,ie等较大的组件,否则编译出开的的系统镜像过大,无法下载到板子上。5. 编译成功后,下载。系统运行后,可以在操作系统的内部设置断点进行调试。二、触摸屏驱动校正实验在触屏驱动代码中(WINCE420PLATFORMSMDK2410DRIVERSTOUCHPtchpdd.cpp文件).在PddpTouchPanelGetSamples,PddpTouchPanel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论