十个以上串口加载问题
时间:2013-04-16 阅读:1200
在Embedded CE系统开发过程中,一般设备驱动都只加载一次,偶尔有些需要重复加载。但针对串口,由于本身的通用性,蓝牙、IC、IrDA、无线Modem、RFID、……等等外设都可能用到串口。主板芯片本身往往自带有多个物理串口设备。而且,有可能存在多路复用的问题。所以在系统定制过程中,很容易的超过十个串口。
一般注册表中可以直接串口号,具体就是使用"Index" dword。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\XXX]
"Index"=dword:a
...
在通常的模式下,如果这样,在加载的时候会报参数错误。经过查证(具体在X:\WINCE600\PRIVATE\WINCEOS\COREOS\DEVICE\DEVCORE\devload.c),在驱动加载的时候,它会先判断Index是否超过9,如果超过,即判断为参数错误(当初在这折腾了半天,还以为参数真设置错了)。
重新修改其中的参数,将有关0~9的限制都去掉(不知道会不会死人,呵呵),再次编译,驱动已经能够成功加载,注册表信息能够查看到对应的Name值已经是COM10:了,但还是没法打开COM10:。
再次查看有关的论坛,在MSDN->Device File Names中,明确说了CreateFile的三种参数,亦即设备名称有三种表示方式:
"COMX:",
"\$device\COMX",
"\$bus\PCMCIA_0_0_0"。
其中*种方式只适合从0~9的设备名,亦即COM10:中10超出了设备命名规范,所以用CreateFile打开设备失败。
使用第二种方式\$device\COM10,作为参数传递给CreateFile,成功打开COM口,通讯正常,搞定。
第三种是用在总线驱动上的,暂时没涉及到,略过,后续补充。
经过整理,主要是在调用方式上,需要注意,正常的COMX:参数,X只从0~9,超过就会出错。而对于修改内核代码,使其加载正常的操作,目前还没发现有问题,暂时就这么放着吧,等哪天莫名的挂掉了再改回来