大部分实验板的手册都有详细的HELLO程序过程,但很少有手册详细讲解流驱动的开发过程,下面以我的经历详细的写一写:
流驱动的基本介绍可以看看天嵌手册的第五章,脑子里起码要先有个基本概念!
1)打开以下目录:E:\WINCE500\PLATFORM\smdk2440\DRIVERS,并在该目录下新建一个文件夹,命名为GPIOdriver,并用记事本打开该目录下的dirs文件,按其格式添加\GPIOdriver,dirs没有扩展名,打开看看就懂,没什么特别的!
注:其中E盘是我的安装目录,smdk2440是GEC2440实验板提供的BSP,按要求拷贝到了E:\WINCE500\PLATFORM\ 目录。
2)打开刚刚新建的GPIOdriver文件夹,新建txt记事本文件,命名为makefile,打开加入以下内容:!INCLUDE $(_MAKEENVROOT)\makefile.def,然后将.txt扩展名去掉,使其变为无扩展名的文件。
3)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为GPIOdriver,加入以下内容后将其扩展名更改为.def文件:
LIBRARY GPIOdriver
EXPORTS
GIO_Close
GIO_Deinit
GIO_Init
GIO_IOControl
GIO_Open
GIO_PowerDown
GIO_PowerUp
GIO_Read
GIO_Seek
GIO_Write
4)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为sources,加入以下内容后将其扩展名删除,使其成为无扩展名文件:
RELEASETYPE=PLATFORM
TARGETNAME=GPIODriver
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS= \
$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX
INCLUDES= \
$(_TARGETPLATROOT)\src\inc; \
$(_COMMONOAKROOT)\inc; \
$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc; \
..\..\inc
SOURCES= \
GPIODriver.cpp
5)仍然在GPIOdriver文件夹内,建立GPIOdriver.cpp和GPIOdriver.h,这个大家找相关例子程序进行参考,我是参考的天嵌的例子,不过由与BSP不同,编译时总是出错,错误原因就是一些头文件不一样,有一点编程序经验应该都能查出来,这时最好的解决办法是把需要包含的内容直接写到GPIOdriver.h中去,这样就不会有编译错误了。至于如何编译,别急,请看后文!先这么做好,排查错误要慢慢来,先写好一个再说!
6)以上出现了多次GPIOdriver,这些地方要命名一致,在写def文件时,GIO只能是三个字母,这里注意!
7)以上工作完成后,GPIOdriver文件夹下的工作就完成了,然后打开E:\WINCE500\PLATFORM\smdk2440\FILES目录,以记事本打开platform.reg文件,添加如下代码:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LEDdriver]
"Prefix"="GIO"
"Dll"="GPIOdriver.dll"
注意GIO 与GPIOdriver.dll要与前面的命名一致!另外要注意,.reg文件中有很多IF与END的配套使用,添加代码时不要放在这些中间了!至于IF与END的作用,初学者先跳过!
8)同样在FILES目录下打开platform.bib文件,加入以下代码:
GPIOdriver.dll $(_FLATRELEASEDIR)\GPIOdriver.dll NK SH
同样须注意命名与IF、END的配对!
9)以上工作完成后基本工作就差不多了,这里再说明一点,关于目录各个实验板厂商的BSP包各不相同,比如说天嵌的目录应为TQ2440\Src\Drivers和TQ2440\Files,这个要灵活应变!
10)打开实验板商家所带的PB平台文件.pbxml文件,在PB的左侧选择FileView选项(我这里默认就是这个选项),这里有树形结构的文件夹目录,打开PLATFORM,smdk2440,drivers,然后会看到你刚刚建立的GPIOdriver文件,右击,选择Build Current Project,就会对刚刚建立的流驱动进行编译,如果有错误会有提示,修改后再编译,直到没有错误为止!
11)点击菜单栏Build OS---Build and Sysgen,对.pbxml文件进行编译,这个大概要花一个多小时,这里你可以去看会儿电影,编译完成后会有一些警告,不用管,只要没错误就行!
编译前要选中Build OS菜单下的Clean Before Building,Copy files to Release Directory afer build,Make Run-time Image After Build,至于为什么我也不是很明白,都是一些过来人提供的经验,这个等熟练后慢慢琢磨吧。
还有一种说法是添加一个驱动不用选择Build and Sysgen,这样耗时太长!究竟是怎么弄来着,我忘了,慢慢研究吧。
12)编译成功后找开与.pbxml文件同目录的RelDir\smdk2440_ARMV4I_Release目录,很发现有好多文件,可以找到NK.nb0和NK.bin文件。找这个文件的快速方法是将这些文件以“详细信息”方式显示,然后单击一下“大小”,会将所有文件以大小排序,最大的那个就是了,这样找起来会快些。到这里驱动编写完毕,NK.nb0暂时留用!
流驱动的基本介绍可以看看天嵌手册的第五章,脑子里起码要先有个基本概念!
1)打开以下目录:E:\WINCE500\PLATFORM\smdk2440\DRIVERS,并在该目录下新建一个文件夹,命名为GPIOdriver,并用记事本打开该目录下的dirs文件,按其格式添加\GPIOdriver,dirs没有扩展名,打开看看就懂,没什么特别的!
注:其中E盘是我的安装目录,smdk2440是GEC2440实验板提供的BSP,按要求拷贝到了E:\WINCE500\PLATFORM\ 目录。
2)打开刚刚新建的GPIOdriver文件夹,新建txt记事本文件,命名为makefile,打开加入以下内容:!INCLUDE $(_MAKEENVROOT)\makefile.def,然后将.txt扩展名去掉,使其变为无扩展名的文件。
3)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为GPIOdriver,加入以下内容后将其扩展名更改为.def文件:
LIBRARY GPIOdriver
EXPORTS
GIO_Close
GIO_Deinit
GIO_Init
GIO_IOControl
GIO_Open
GIO_PowerDown
GIO_PowerUp
GIO_Read
GIO_Seek
GIO_Write
4)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为sources,加入以下内容后将其扩展名删除,使其成为无扩展名文件:
RELEASETYPE=PLATFORM
TARGETNAME=GPIODriver
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS= \
$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX
INCLUDES= \
$(_TARGETPLATROOT)\src\inc; \
$(_COMMONOAKROOT)\inc; \
$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc; \
..\..\inc
SOURCES= \
GPIODriver.cpp
5)仍然在GPIOdriver文件夹内,建立GPIOdriver.cpp和GPIOdriver.h,这个大家找相关例子程序进行参考,我是参考的天嵌的例子,不过由与BSP不同,编译时总是出错,错误原因就是一些头文件不一样,有一点编程序经验应该都能查出来,这时最好的解决办法是把需要包含的内容直接写到GPIOdriver.h中去,这样就不会有编译错误了。至于如何编译,别急,请看后文!先这么做好,排查错误要慢慢来,先写好一个再说!
6)以上出现了多次GPIOdriver,这些地方要命名一致,在写def文件时,GIO只能是三个字母,这里注意!
7)以上工作完成后,GPIOdriver文件夹下的工作就完成了,然后打开E:\WINCE500\PLATFORM\smdk2440\FILES目录,以记事本打开platform.reg文件,添加如下代码:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LEDdriver]
"Prefix"="GIO"
"Dll"="GPIOdriver.dll"
注意GIO 与GPIOdriver.dll要与前面的命名一致!另外要注意,.reg文件中有很多IF与END的配套使用,添加代码时不要放在这些中间了!至于IF与END的作用,初学者先跳过!
8)同样在FILES目录下打开platform.bib文件,加入以下代码:
GPIOdriver.dll $(_FLATRELEASEDIR)\GPIOdriver.dll NK SH
同样须注意命名与IF、END的配对!
9)以上工作完成后基本工作就差不多了,这里再说明一点,关于目录各个实验板厂商的BSP包各不相同,比如说天嵌的目录应为TQ2440\Src\Drivers和TQ2440\Files,这个要灵活应变!
10)打开实验板商家所带的PB平台文件.pbxml文件,在PB的左侧选择FileView选项(我这里默认就是这个选项),这里有树形结构的文件夹目录,打开PLATFORM,smdk2440,drivers,然后会看到你刚刚建立的GPIOdriver文件,右击,选择Build Current Project,就会对刚刚建立的流驱动进行编译,如果有错误会有提示,修改后再编译,直到没有错误为止!
11)点击菜单栏Build OS---Build and Sysgen,对.pbxml文件进行编译,这个大概要花一个多小时,这里你可以去看会儿电影,编译完成后会有一些警告,不用管,只要没错误就行!
编译前要选中Build OS菜单下的Clean Before Building,Copy files to Release Directory afer build,Make Run-time Image After Build,至于为什么我也不是很明白,都是一些过来人提供的经验,这个等熟练后慢慢琢磨吧。
还有一种说法是添加一个驱动不用选择Build and Sysgen,这样耗时太长!究竟是怎么弄来着,我忘了,慢慢研究吧。
12)编译成功后找开与.pbxml文件同目录的RelDir\smdk2440_ARMV4I_Release目录,很发现有好多文件,可以找到NK.nb0和NK.bin文件。找这个文件的快速方法是将这些文件以“详细信息”方式显示,然后单击一下“大小”,会将所有文件以大小排序,最大的那个就是了,这样找起来会快些。到这里驱动编写完毕,NK.nb0暂时留用!
13)打开VS2008,新建项目,可以参考手册的第六章内容,至于添加的代码可现成的例程序,这个很简单的。这种小问题自已琢磨!