none
写自已的流式驱动, 请问我有什么地方搞错了? RRS feed

  • 问题

  •  

    有二种方法加自已的驱动到操作系统.

    方法一:  略

                写dll.

                编辑相应的bib,reg文,将dll加入到操作系统

                写应用程序用标准函数调用驱动(dll).

                这种方法我可以调用驱动.

    方法二:

          1. 在platform/CPU's folder/drivers 下新建一个目录,然后在drivers目录中的dirs文件中加入以你刚新建的目录名.

           2. 在刚新建的目录下,新建你的C源代码文件,在其中实现下面所述的函数,及其功能。

          XXX_Init
          XXX_Deinit
          XXX_Open
          XXX_Close
          XXX_PowerOff
          XXX_Power_Down
          XXX_IOControl

              新建名称分别为sources, makefile, mydev.def的文件。

              (1)      
              makefile: 只需要这样一行
              !INCLUDE $(_MAKEENVROOT)\makefile.def

              (2)
              mydriver.def
              LIBRARY     MyDev(这个字符串要和将要生成的动态库的文件名一样)
             
              EXPORTS
              XXX_Init
              XXX_Deinit
              XXX_Open
              XXX_Close
              XXX_PowerOff
              XXX_Power_Down
              XXX_IOControl

              (3)
              Sources:
              TARGETNAME=MyDev  (指定要生成的动态库的名称)
              TARGETTYPE=DYNLINK (指定要生成的是一个动态库)
              (下面两项指定需要与哪些动态库链接, 一般要第一项就足够了)
              TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
                         $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

              DEFFILE=MyDev.def (指定def文件)

              DLLENTRY=DllEntry (指定动态库的入口函数)

              SOURCES= (请在这写上你所有源文件的名字,它们将会被编译)

     

     

     

             CEPB---->SYSGEN 后, 驱动没有加载.

     

              请问我有什么地方搞错了?


    2008年3月5日 10:23

答案

  • 可能的原因比较多:

    1. 先确认源代码是否被编译成dll

    2. 再确认dll被打包到nk.bin里面(可以通过viewbin工具或者在启动后的/windows目录里面查找)

    3. 最后确认注册表项是否已经被添加到系统中,可以用remote reg editor看

    2008年3月5日 11:41
    版主
  •  

    两种方法应该没有本质的区别,对你来说都是dll

    你可以察看PB的编译信息,就可以看到你的dll是否编译,不是一定要手动修改CEC文件的。

    2008年3月10日 2:36
  • 我认为“platform\CPU's folder”就应该是你的BSP的根目录,对吧??

     

    那么,你可以到“platform\CPU's folder\target\ARMV4I\retail\目录下看一下,有没有。

     

    看来你还要确认一下你的驱动是否被编译了??而且是否编译通过了??

     

    2008年3月10日 6:11

全部回复

  • 可能的原因比较多:

    1. 先确认源代码是否被编译成dll

    2. 再确认dll被打包到nk.bin里面(可以通过viewbin工具或者在启动后的/windows目录里面查找)

    3. 最后确认注册表项是否已经被添加到系统中,可以用remote reg editor看

    2008年3月5日 11:41
    版主
  • 何老师说的好像是针对第一种方法的, 第一种方法可以用.

     

    我问的是第二种方法.

     

    第二种方法的步骤对不对?

     

    第二种方法是不是只要编译成目标文件,PB会只已打包?如何编写CEC文件?

     

     

     

    2008年3月5日 23:52
  •  

    两种方法应该没有本质的区别,对你来说都是dll

    你可以察看PB的编译信息,就可以看到你的dll是否编译,不是一定要手动修改CEC文件的。

    2008年3月10日 2:36
  •  

    我是新手, 不懂就问,请不要见怪.

     

    上面回复的对我有一定的帮助,我正在查。请问按你们说的角度, 对我来说, LCD NANDFLASH 驱动和按我以上方法写的

    驱动有区别是吗?

     

    编译出来的lib库文件用viewbin工具看不到,是吗?如何看lib库文件的存在?

    2008年3月10日 3:28
  •  

    用viewbin工具看不到自已写的驱动dll文件, windows目录下也没有自已写的驱动dll文件, 我该如何入手?
    2008年3月10日 4:11
  • 看来,你写的驱动的dll没有被打包到NK.bin里面。

     

    你有没有检查你的platform.bib,看看里面是否添加了你的流设备驱动的dll。如果你没有在platform.bib文件中添加的话,那你的dll是不会被打包的。

     

     

    2008年3月10日 4:18
  •  

    方法二也要改platform.bib等文件吗? 那和方法一没区别呀?
    2008年3月10日 5:04
  • 你只要是在BSP里面添加新的驱动,不管是流设备的,还是WinCE下特定设备的驱动,你都需要在platform.bib文件中添加,也需要编辑platform.reg文件。

     

    2008年3月10日 5:20
  •  
    方法二(sources, makefile, mydev.def), 它编译出来的dll文件在什么目录下?


    (platform\CPU's folder\drivers\MyDevDrv\obj\ARMV4I\retail目录下没有相应的dll文件)

    2008年3月10日 6:03
  • 我认为“platform\CPU's folder”就应该是你的BSP的根目录,对吧??

     

    那么,你可以到“platform\CPU's folder\target\ARMV4I\retail\目录下看一下,有没有。

     

    看来你还要确认一下你的驱动是否被编译了??而且是否编译通过了??

     

    2008年3月10日 6:11
  •  

    现在可以了,我想生成lib 和生成dll应是一样吧?

    这二种方法还是有区别的,第二种方法用PB应该是好跟踪调试一些吧?

    2008年3月10日 8:08