Windows CE环境下无线网卡的自动安装

Windows CE 环境下无线网卡的自动安装摘 要: 讨论了 Windows CE 环境下无线网卡无线网卡的安装,并提出了一种在系统 断电重启时自动安装无线网卡的解决方案对 Windows CE 的系统定制、应用程序应用程序的 开发及系统封装进行了介绍 关键词: 嵌入式系统 Windows CE 无线网卡 设 备驱动Windows CE 是为多种嵌入式系统和产品而设计的紧凑、高效、可升级的操作系统, 并特别为有限的硬件资源设计了多线程、多任务和完全优先的操作系统环境在无线通信领 域有很大的应用前景 本文重点讨论了 Windows CE环境下无线网卡的安装,并提出了一种在系统断电重启时自动安装无线网卡的解决方案;还对Windows CE的系统定制、应用 程序的开发及系统封装进行了介绍由于Windows CE与Windows的同源和相似,决定了学习 Windows CE的简易性,这样就缩短了应用者的开发周期1 Windows CE简介 WindowsCE包括四大基本模块,它们提供了操作系统的关键特性,分别是:内核(Kernel)模块、对 象存储(Objec t St ore)模块、GWES (用户、应用程序和操作系统之间的图形用户界面)模 块和通信(Communication)模块。
图1为Windows CE的模块化结构图操作系统定制工具有Windows CE Platform Builder(简称PB),应用程序开发工具 有嵌入式开发工具包Embedded Visual Tools,包括Embedded Visual C++ (简称EVC)和 Embedded Visual Basic简称EVB)2特定硬件平台Windows CE操作系统的开发 有了具体的嵌入式硬件平台后,就可以为其开发满足特定功能需要的Windows CE系统总之, 可以分成三个步骤:操作系统的定制、特定功能应用程序模块的开发、功能模块封装入操作 系统2.1操作系统的初步定制 图2为在PB中定制Windows CE操作系统的一般流程[3]首先,选择操作系统的基本配置,并且为特定的平台选择相应的微处理器和平台支持 包BSP(Board Support Packet)PB提供的BSP有CEPC (基于PC机的WinCE硬件开发平台) 和0D0 (基于Hitachi D9000的WinCE硬件开发平台)开发者可以选择其一或自己定制特定 平台的BSP其次,制定平台,在此阶段可开发设备驱动,适当地裁剪、添加组件,如有必 要还需对某些配置文件进行修改。
然后,封装所需要的各功能模块,编译生成OS镜像镜像文 件若设备为自己定制的目标设备,则需开发OAL(OEM Adaptat ion Layer )、BSP和BootLoader 接着,把镜像文件下载到目标设备,进行调试;需要的话,进行重复配置、封装、下载及调 试,直到满足要求,完成平台的创建 最后导出相应的SDK(Software Development Kit)软件开发工具包,运行后加载到EVC中,使得可以进行特定硬件平台上的应用程序开发oSDK 包含程序库、头文件、示例程序源代码和库函数使用文档,同时还包括编程指导和API参考 以及设备驱动工具包(DDK)2.2特定功能应用程序模块的开发 开发特定功能的应用程序模块就是在 EVC 中编写应用程序,满足系统功能扩充的需要重点要做以下工 作: (1)为特定平台选择相应的微处理器,如WCE THUMB或WCE x86em等 (2)编写应用程序方法上EVC与PC机上运行的VC差别不大两者的区别主要有:前者的API 是后者API的子集,对不兼容的函数要做一些修改或者寻求可替代的函数;前者为Unicode 环境,所有字符都是两个字节,是一种世界范围的编码标准,有助于开发国际化软件,而后 者为 ANSI 美国标准,每个字符一个字节,因此必要时两者间要作数据类型转换;另外在用户 界面编程和内存管理等方面也有些差异。
(3)对程序进行编译和调试编译时一定要选择特定的硬件平台调试时可用微软提供的工具Microsoft Activesync建立PC机与目 标机的连接,把系统镜像从 PC 机下载到目标机上进行调试;另外 EVC 中带有模拟器,可以在PC 机上模拟目标平台上的大部分功能2.3 功能模块封装入系统 OEM 开发者通常把必要的应用程序和操作系统封装在一起发布给使用者,因此要把应用程序打包封装入初步制定 的操作系统中需要做的工作主要有两个: (1)把编译好的可执行文件拷贝到 WindowsCE系统相应的文件夹中 (2)在PB中修改相应的系统配置文件PB所提供的配置文件包括四种文件类型:.bib,说明需要打包进镜像文件的Windows CE文件;.da t,文件系 统、目录和文件分配表描述;.db, Windows CE对象存储数据库的描述;.reg,系统注册表 注册表在开发过程中最常用到的配置文件有:Pla tf orm.bib、Pla tf orm.reg、Pla tform.da t、 Config.bib°Pla tf orm.bib定义打包到OS镜像文件时所需要的文件(files)和模块(modules); Platform.reg定义目标平台冷启动时所加载的注册表键值;Platform.dat定义目标平台冷启 动时所加载的系统文件、目录和链接等; Config.bib 定义可用的物理地址,并进行一些属性 设置。
做好以上两步以后,对操作系统重新编译、下载、调试,最终得到功能完整的系统镜像3开发实例 Windows CE环境下无线网卡的自动安装3.1项目介绍 项目要求实现一个独立的嵌入式无线通信模块,通过现有的 IEEE802.11b 无线网卡接入无线局 域网进行通信系统采用 Samsung 公司的 S3C2410 芯片开发嵌入式系统硬件平台,需要在 Windows CE 环 境 下 驱 动 PCMCIA 无 线 网 卡 3.2 无 线 网 卡 安 装 的 问 题 和 解 决 方 案 Windows CE 操作系统支持两种类型的设备驱动程序设备驱动程序:内置式设备驱动程序和可安装设备驱动程序当目标机与 PC 机相连,且目标机有显示屏和键盘时,对于可 安装的设备驱动程序,其安装步骤为:建立目标机与PC机的连接,将设备驱动程序的.dll 文件复制到 Windows CE 的 Windows 目录下;当系统检测到设备时,显示屏中会出现相应的 对话框,用键盘输入驱动的名称即可 项目中要为现有的无线网卡安装驱动程序因为 WindowsCE 系统运行时是基于 RAM 存储的, ROM 相当于只读硬盘,一旦系统断电或冷启动 后, RAM 中的信息就会丢失,尤其是一些注册表的信息,所以要对 RAM 持续供电。
但由于本 系统硬件电源不能保证持续供电,安装了无线网卡的驱动程序后,信息存储在RAM中,系统 断电或冷启动后,相关的信息会丢失而且,目标机在实际使用中无显示屏和键盘因此, 断电重启时需要自动重新安装无线网卡驱动程序 解决方案为:从系统持久存储 SM卡中读取网卡驱动程序xi825.dll和TCP/IP属性配置文件config. txt,并按配置文件设置 注册表键值,然后为无线网卡安装驱动程序若需要根据具体应用环境更新TCP/IP属性值, 可用新的配置文件覆盖 SM 卡中的旧文件,冷启动后,重新设置属性值,再安装网卡驱动即 可 用 EVC 编写应用程序完成自动安装无线网卡驱动的功能,图 3 为应用程序的大体流程首先,把两个文件从SM卡的storage card文件夹拷贝到Windows CE系统的Windows 目录下;拷贝成功后,按 config.txt 的内容对注册表进行操作,设置具体环境下的 TCP/IP 属性值;系统检测到无线网卡后,在弹出名为'UnidentifiedPCCardAdapter'的对话框中程 序自动输入网卡驱动程序名,完成无线网卡的自动安装 3.3 几个具体问题的解决 下面,再讨论一下本方案中几个具体问题的解决办法。
包括对注册表的操作、自动安装功能的 实现、程序流程的总体控制以及将程序打包封装入操作系统的作法 3.3.1 对注册表的操 作 Windows CE 中有一系列 API 函数可以对注册表进行操作,完成打开关闭注册表、读取或修改键值等功能另外,Windows CE注册表中值的类型为Unicode;而配置文件 config. txt是在PC机上产生的,类型为ANSI要按config. txt中读取的值设定注册表值, 就要进行数据类型的转换,可以用函数 MultiByteToWideChar ()实现[4]关键代码如 下 : RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 根键 TEXT('Comm\xi8251\Parms\TcpIP'), // 打 开 根 键 下 的 子键0,//预留值,必设为00,// 不支持此 项 ,必设为0&hKey// 最 终打开键的句柄指针);RegSetValueEx( hKey,// 对 键 操 作 的 句 柄 TEXT('IpAddress'), // 键 中 的 数 据 项 名 0, // 预 留 值 , 必 设 为 0 REG_SZ, // 数 据 项 中 值 的 类 型 (CONST BYTE*)((LPCTSTR)regData),// 存 有 数 据 项 值 的 缓 冲 区 dwDataSize // 值 的 字 节 数 ); // 对’IpAddress '数据项的值作修改,即改变IP值3.3.2 自动安装功能的实现 用FindWindow ()函数判断对话框窗口的出现;用keybd_event ()函数模拟键盘输入。
关键代码如下: TCHARg_szTitle[80]=TEXT(“Unidentified PCCard Adapter”);// 指 定 对 话 框 的 标 题 HWND hWnd=::FindWindow(NULL,g_szTitle) ; //判断此标题名的窗口是否已出现 , 不 论 其 是 否 为 前 台 窗 口 if (hWnd!=NULL) // 若 窗 口 已 出现 {::SetForegroundWindow(hWnd); // 将 此 窗 口 设 置 为 前 台 窗口 keybd_event(0x58,0,0,0); // 按 下 x键 keybd_event(0x58,0,KEYEVENTF_KEYUP,0); //抬起 x 键 //完成了按下和抬起x键的两个动作,就模拟了键盘输入字符x, //用同样 的 方 法 输 入’i825.dll’ keybd_event(0x0d,0,0,0); keybd_event(0x0d,0,KEYEVENTF_KEYUP,0); //最后输入确认键 } 正确输入后,可以看到无线网卡的显示灯开始闪烁,说明网卡已经安装成功,等待进行无线通信。
3.3.3 程序流程的总体控制 为了保 证程序流程的顺序,整个程序中还需要有一个总体监视控制的管理员这种监控功能,可以 通过发送接收特定消息给主控函数的方法,也可以采用等待特定事件对象的方法,还可以采 用开定时器查询的方法等鉴于方法简单,而且对系统资源占用并不大,这里选用了开定时 器查询的方法,并设置了标志位flag区分不同阶段工作,进行相应的操作下面列出部分关 键 代 码 : flag=0; // 最 初标 志 位 设 为 0 , 即 先拷贝所需要文件 m_nTimer =SetTimer(1,2000,NULL); // 开 启 定 时器 KillTimer(m_nTimer); //时间到,先关闭定时器,进行相应判断和操作3.3.4 应用程序封装入系统 上文已经讲了将应用程序封装入操作系统的一般方法 分为应用 程序的拷贝和修改系统配置文件两步 此项目最后要把开发的应用 程序monitor.exe 打包封装入操作系统这里重点介绍一下系统中几个配置文件的具体修改情况1) 在 Platform.bib 文 件 中 的 Files部分加入以下代码 ; Namey Type ; „„„ monitor.exe$ (_FLATRELEASEDIR)Path$(_FLATRELEASEDIR)monitor.exeNK UNK Umonitor.lnkMemormonitor.lnk制作方法很简单,#20windowsmonitor.exe。
其中, monitor.lnk 为 monitor.exe 的链接程序(快捷方式)可 以 通 过 一 个 ASCII 码 编 辑 器 编 写 , 格 式 为 : 此配置文件中的代码表示,将 monitor.exe 和 monitor.lnk加载到名为NK的内存区中(NK的定义在config.bib文件中的memory部分完成),文件的属 性为U (非压缩文件),这样就完成了把自己所开发的应用程序及其链接程序封装进操作系统 的 “ 声 明 ” (2) 在 Platform.dat 文 件 中 加 入 以 下 代 码: Directory('WindowsStartUp'):-File('monitor.lnk','windowsmonitor.lnk')由于Platform.bib做过声明,这两个文件在操作系统启动后会映射到Windows目录 下,这是默认的目录所以此处的代码表示在 Windows CE 启 动时会自动运行 monitor.exe 做完了以上工作,再对操作系统进行编译,把应用程序封装到了Windows CE操作系统中,而且系统启动后会运行此应用程序,完成自动安装无线网卡的功能。