Wince net系统定制与驱动开发.docx

上传人:b****4 文档编号:5065494 上传时间:2022-12-13 格式:DOCX 页数:47 大小:2.33MB
下载 相关 举报
Wince net系统定制与驱动开发.docx_第1页
第1页 / 共47页
Wince net系统定制与驱动开发.docx_第2页
第2页 / 共47页
Wince net系统定制与驱动开发.docx_第3页
第3页 / 共47页
Wince net系统定制与驱动开发.docx_第4页
第4页 / 共47页
Wince net系统定制与驱动开发.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

Wince net系统定制与驱动开发.docx

《Wince net系统定制与驱动开发.docx》由会员分享,可在线阅读,更多相关《Wince net系统定制与驱动开发.docx(47页珍藏版)》请在冰豆网上搜索。

Wince net系统定制与驱动开发.docx

Wincenet系统定制与驱动开发

WindowsCE.Net系统定制与驱动开发

实验指导手册Ver3.1

目录

第一天实验内容2

一、安装SamArmDvk9II型开发板的WinCE.NETBSP2

二、使用BSP在PB4.2中创建一个新的Platform并编译连接生成新的Image文件4

三、将生成的Image烧录到FLASH中安装SamArmDvk9II型开发板的WinCE.NETBSP9

四、添加MFC特性,添加鼠标和U盘驱动19

五、建立一个带kitl特性的系统镜像22

六、导出SDK26

七、通过KITL建立EVC的调试环境30

第二天主要内容35

一、开机logo的实现35

二、通过地址映射操作外部IO,实现LED控制36

三、中断的添加和响应36

第三天主要内容38

第四天主要内容42

一、编译一个调试型的内核42

二、触摸屏驱动校正实验43

三、电源管理驱动实现节电管理43

第一天实验内容

一、安装SamArmDvk9II型开发板的WinCE.NETBSP

1.在WINCE420\PLATFORM目录下新建一个名为“SMDK2410”的目录,如果该目录下已有名为SMDK2410的目录,将其改名备份。

2.拷贝光盘中的2410WINCE\2410WINCE4.2BSP\SMDK2410目录中的内容到步骤一建立的SMDK2410目录。

3.去掉该目录中所有文件的只读属性。

4.将“SMDK2410\_for_Public\oak\drivers\NETCARD”目录下的CS8900R目录拷贝到“WINCE420\PUBLIC\COMMON\OAK\DRIVERS\NETCARD”目录下。

5.在“WINCE420\PUBLIC\COMMON\OAK\DRIVERS\NETCARD”目录下的dirs文件中添加cs8900r,示例如下。

DIRS=

\cs8900r

\dc21x4

6.拷贝“SMDK2410\_for_Public\CESYSGEN”目录下的Makefile文件到“WINCE420\PUBLIC\COMMON\CESYSGEN”目录下。

7.单击【File】>【ManageCatalogFeatures…】菜单项,如图1所示。

图1

8.在Catalog列表中单击选中“smdk2410.cec”文件,如图2所示,然后单击【Remove】按钮,删除PB4.2自带的smdk2410BSP。

图2

9.单击【Import】按钮,导入“PLATFORM\SMDK2410\smdk2410.cec”文件,如图3所示。

图3

10.完成第9步操作后,系统将在Catalog的BSPs文件夹下自动添加“SamsungSMDK2410:

ARMV4项”,如图4所示,此时BSP安装完成。

图4

二、使用BSP在PB4.2中创建一个新的Platform并编译连接生成新的Image文件

1.单击【FILE】>【NewPaltform】菜单项,如图5所示。

图5

2.在弹出的【NewPlatformWizard–Step1】对话框中单击【Next】按钮,如图6所示。

图6

3.在弹出的【NewPlatformWizard–Step2】对话框中选择新安装的BSP,接着单击【Next】按钮,如图7所示。

图7

4.在【NewPlatformWizard–Step3】对话框中选中【Availableconfigurations】单选按钮,在下面的列表框中选择一项Cofiguration(这里选择MobileHandheld),接着在右侧的【Platformname】文本框中输入平台名称,如图8所示,最后单击【next】按钮。

图8

5.在【NewPlatformWizard–Step4】对话框中选择需要的应用,如图9所示,接着单击【Next】按钮。

图9

6.在【NewPlatformWizard–Step5】对话框中选择需要的网络设置,如图10所示,然后单击【Next】按钮。

图10

7.这时进入图11所示的对话框,接着单击【Next】按钮。

图11

8.在【NewPlatformWizard–Step5】对话框中单击【Done】按钮,如图12所示,完成新平台的建立。

图12

9.右键单击SMDK2410features,在弹出的菜单中选择【Settings…】菜单项,如图13所示。

图13

10.这时将弹出【PlatformSettings】对话框,在右侧的【BuildOption】选项卡中,取消【EnableKITL】和【EnableCETargetControlSupport】复选框的选中状态,如图14所示。

最后单击【OK】按钮完成平台设置。

图14

11.单击【Buildplatform】按钮编译新平台,如图15所示。

编译完成后,将得到“EBOOT.BIN”、“EBOOT.NB0”、“NK.BIN”以及“NK.NB0”等文件。

图15

三、将生成的Image烧录到FLASH中安装SamArmDvk9II型开发板的WinCE.NETBSP

1.将目标板和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,将通过PlatformBuilder4.2编译生成的EBOOT.NB0文件或是资料盘中附带的EBOOT.NB0文件烧入FLASH的第二块,如图20所示。

图20

烧录方法同上一步骤,但注意:

因为需要将该文件烧在第二块,所以在地址选择中需要选择“2”后回车。

该文件较大,烧录时间可能会稍长些。

5.烧录完成后,运行DNW,然后单击【SerialPort】>【Connect】菜单项,如图21所示。

图21

6.按开发板上的复位键,复位开发板,DNW显示如图22所示。

图22

7.下载完成后按空格键,DNW显示如图23所示。

图23

8.将各选项设置如图24所示。

IPaddress需要和PC机的IP地址在同一个子网内,如PC机为192.192.78.1则IPaddress可设为192.192.78.2~255。

其他各项保持和上图一致即可。

注意设置MAC地址。

图23

9.键入“W”将设置保存。

10.接着键入“F”将NandFlash低级格式化,如图24所示。

这里不会格式化NandFlash的前10块。

图25

11.键入“9“将SMC逻辑格式化为BINFS格式,如图26所示,这一步操作时间会比较长(大约5分钟左右)。

图26

12.完成上一步操作后,键入“D“下载Image文件,如图27所示。

图27

13.接下来需要进行PlatformBuilder4.2中【RemoteConnection】属性的设置。

单击【Target】>【ConfigureRemoteConnection…】菜单项,如图28所示。

图28

14.这时将弹出【ConfigureRemoteConnection】对话框,在【Download】下拉列表框中选择【Ethernet】项,如图29所示。

图29

15.同样在【Services】选项卡的【Kernel】下拉列表框中也选择【Ethernet】项,如图30所示。

图30

16.接着单击【Download】下拉列表框右侧的【Configure】按钮,这时将弹出【ConfigureEthernetDownloadService】对话框,该对话框的【AvailableDevices】文本框中将出现【SMDK2410?

?

?

?

】项(注:

此时目标板需要为等待下载状态),如图31所示。

选中该项,然后单击【OK】按钮即可。

图31

17.回到PlatformBuilder4.2中,接着单击【Target】>【Download/Initlize】菜单项,通过Ethernet即可将NK.BIN下载到目标板中,如图32所示。

图32

18.此时目标板需要在等待下载状态(D),通过DNW能看到反馈信息,如图33所示。

图33

19.下载完后通过DNW可以看到程序正在将下载的Image烧录到NandFlash中,如图34所示。

图34

20.稍等一会儿后,WINCE开始初始化并运行时,烧录工作就已完成了,如图35所示。

图35

21.烧录完成后,按目标板上的复位键,WINCE将自动运行。

四、添加MFC特性,添加鼠标和U盘驱动

1.选中“Catalog/CoreOS/DisplayBasedDevice/ApplicationsandServicesDevelopment”目录下的“MicrosoftFoundationClasses(MFC)”文件,然后单击鼠标右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项,如图36所示。

图36

2.选中“Catalog/CoreOS/DisplayBasedDevice/CoreOSServices/USBHostSupport”目录下的“USBHumanInputDevice(HID)ClassDriver”和“USBStorageClassDriver”两个组件,分别单击鼠标右键,在弹出的快捷菜单中选择【AddToPlatform】菜单项,如图37、图38所示。

图37

图38

3.重新编译并下载,系统即可正常支持MFC程序、U盘和USB鼠标了。

五、建立一个带kitl特性的系统镜像

1.在PlatformBuilder中打开刚才建立的工程,在工程上单击鼠标右键,在弹出的快捷菜单中选择【setting…】菜单项,如图39所示。

图39

2.这时将弹出【PlatformSettings】对话框,接着单击切换到【BuildOption】选项卡中,按照图40所示的完成【BuildOption】属性的设置。

图40

3.单击【OK】按钮完成平台设置,然后Rebuild系统镜像并下载,这样就建立了一个带有KITL特性的系统。

4.如板子掉电重启后,带有KITL特性的系统不能自动启动,需要通过DNW和PlatformBuilder来实现引导启动。

5.首先启动PlatformBuilder,打开带有KITL特性的工程,如图41所示。

图41

6.接着启动DNW,然后给开发板上电,按两下空格进入命令菜单,如图42所示。

图42

7.接着在DNW界面中键入“l”。

8.回到PlatformBuilder中,单击【Target】>【Connect】菜单项,如图43所示。

到此就实现了引导启动,带有KITL特性的系统正常启动了。

图43

六、导出SDK

1.在PlatformBuilder中打开工程,然后单击【Platform】>【ConfigureSDK】菜单项,如图44所示。

图44

2.这时将弹出【ExportSDKWizard】对话框,单击【下一步】按钮,进行生成的SDK的名称和提供者姓名的填写(可随意填写),如图45所示。

图45

3.单击【下一步】按钮,按照图46所示的完成“developmentlanguage”属性的设置(若系统已经加入MFC特性并编译,则MFC相关的两项为灰体必选项)。

图46

4.最后单击【下一步】按钮完成设定。

在PlatformBuilder中打开工程,再次单击【Platform】>【ConfigureSDK】菜单项可以设定SDK文件的输出路径或更改SDK文件名称和提供者信息。

5.在PlatformBuilder中单击【Platform】>【BuildeSDK】菜单项开始创建SDK文件,如图47所示。

图47

6.完成SDK的创建后,双击生成的.msi文件进行SDK的安装。

安装完成后重新启动,打开EVC就可以针对生成的SDK进行编译了。

七、通过KITL建立EVC的调试环境

1.首先通过引导启动带KITL特性的系统,然后将资料光盘中的示范工程IntTest复制到硬盘上,在EVC中单击OpenWorkSpace打开硬盘上刚刚复制过来的IntTest工程文件中的IntTest.vcw。

2.在EVC环境下单击【Tools】>【Configureplatformmanager…】菜单项,如图48所示。

图48

3.在弹出的【WindowsCEPlatformManagerConfiguration】对话框中选择刚才导出的SDK文件,如图49所示,然后单击对话框右侧【Properties】按钮。

图49

4.这时将弹出【DeviceProperties】对话框,按照图50所示的完成设备属性的设置,最后单击【OK】按钮。

图50

5.确认编译的目标SDK的名称和刚才选定的SDK一致,如图51所示。

图51

6.单击【Build】按钮进行编译。

如果在编译过程中出现头文件无法找到的错误,应在电脑中进行搜索,然后将找到的文件的路径复制下来。

接着在EVC中单击【Tool】>【Options】菜单项,在弹出的对话框中切换到【Directory】选项卡中,将刚才找到的文件的路径填入(注意,不可将找到的文件复制到当前工程目录下,否则可能会出现错误),如图52所示。

最后单击【OK】按钮。

图52

7.完成编译成功后,EVC会自动通过KITL和开发板建立联机,至此就可以进行联机调试了。

第二天主要内容

一、开机logo的实现

1.找到\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c文件,找到staticvoidInitDisplay()这个函数的实现部分。

2.下面这段代码即为开机logo的实现,其意义为将已经转化为C数组的BMP文件数据拷贝到显示缓冲区中。

memcpy((void*)FRAMEBUF_BASE,ScreenBitmap,

ARRAY_SIZE_TFT_16BIT);”

3.动手修改,首先使用Image2Lcd这个工具将一张人意的BMP图片转化为240x180,16位真彩格式,然后转化为一个C数组。

(注意:

转化后的数组中成员个数应为86400,有些图片文件因为格式上的原因,导致转化后的数组个数不是86400,这种情况下不能正常进行下面的步骤。

推荐使用电脑上“我的文档\图片收藏\示例图片”下的几张图片进行转换)。

4.找到“\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\samsung.c”文件,用上面的数组数据替换掉原始的数组数据。

(注意:

不要改变原始数组的名称,即只将以下代码括号中的部分替换即可。

constunsignedshortScreenBitmap[]={

……….

}

5.屏蔽下面这段代码。

memcpy((void*)FRAMEBUF_BASE,ScreenBitmap,ARRAY_SIZE_TFT_16BIT)

6.接着加入下面这段代码。

FBuf=(structFrameBuffer*)(FRAMEBUF_BASE);

for(i=0;i<180;i++)

{

for(j=0;j<240;j++)

{

FBuf->pixel[i+40][j]=ScreenBitmap[480*i+2*j]|(ScreenBitmap[480*i+2*j+1]<<8);

}

}

7.重新编译内核后即可实现自定义的开机logo。

二、通过地址映射操作外部IO,实现LED控制

详细代码参见资料光盘中的示范程序IntTest,将该程序编译后下载到板子上运行,可以通过单击“打开”、“关闭”来控制LEDD11的亮灭。

三、中断的添加和响应

1.内核处理部分

1.在“:

\WINCE420\PLATFORM\SMDK2410\INC\oalintr.h”中加入

#defineSYSINTR_EINT2(SYSINTR_FIRMWARE+21)

2.在“:

\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\ARM\arminit.c”中找到“OEMInterruptHandler”的实现部分,屏蔽掉以下代码。

elseif(IntPendVal==INTSRC_EINT2)//EINT2

{

s2410INT->rINTMSK|=BIT_EINT2;

s2410INT->rSRCPND=BIT_EINT2;/*InterruptClear*/

if(s2410INT->rINTPND&BIT_EINT2)s2410INT->rINTPND=BIT_EINT2;

//RETAILMSG(1,(TEXT(">>>CPUPowerReset\r\n")));

RETAILMSG(1,(TEXT(">>>>>>ResetButtonPressed<<<<<<\r\n")));

CPUPowerReset();

return(SYSINTR_POWER);

}

3.在下面这三句代码中添加“return(SYSINTR_EINT2);”

RETAILMSG(1,(TEXT(">>>>>>ResetButtonPressed<<<<<<\r\n")));

CPUPowerReset();

return(SYSINTR_POWER);

4.在“:

\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\ARM\cfw.c”中找到函数OEMInterruptEnable的实现,找到下面这段代码

caseSYSINTR_ETHER:

break;

在其后添加如下代码。

caseSYSINTR_EINT2:

s2410INT->rSRCPND=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.找到OEMInterruptDone的实现,找到下面这段代码。

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

#include

HANDLEg_hInstance;

#defineBUFSIZE256

WCHARachBuffer[BUFSIZE];

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

BOOLWINAPI

DllEntryPoint(HANDLEhinstDLL,

DWORDdwReason,

LPVOID/*lpvReserved*/)

{

switch(dwReason)

{

caseDLL_PROCESS_ATTACH:

g_hInstance=hinstDLL;

RETAILMSG(1,(TEXT("STRINGS:

DLL_PROCESS_ATTACH\n")));

returnTRUE;

caseDLL_THREAD_ATTACH:

RETAILMSG(1,(TEXT("STRINGS:

DLL_THREAD_ATTACH\n")));

break;

caseDLL_THREAD_DETACH:

RETAILMSG(1,(TEXT("STRINGS:

DLL_THREAD_DETACH\n")));

break;

caseDLL_PROCESS_DETACH:

RETAILMSG(1,(TEXT("STRINGS:

DLL_PROCESS_DETACH\n")));

break;

#ifdefUNDER_CE

caseDLL_PROCESS_EXITING:

RETAILMSG(1,(TEXT("STRINGS:

DLL_PROCESS_EXITING\n")));

break;

caseDLL_SYSTEM_STARTED:

RETAILMSG(1,(TEXT("STRINGS:

DLL_SYSTEM_STARTED\n")));

break;

#endif

}

returnTRUE;

}

//-----------------------------------------------------------------------------

//--------------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1