Chinaunix首页 | 论坛 | 博客
  • 博客访问: 205098
  • 博文数量: 96
  • 博客积分: 1781
  • 博客等级: 上尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-07 12:31
文章分类

全部博文(96)

文章存档

2014年(1)

2013年(14)

2012年(44)

2011年(37)

分类: LINUX

2012-09-12 16:22:11

   公司定制了新的手写板,新手写板比以前的那个签字设备要复杂点,在拿到手写板后,我插上我们本来的设备,cat /proc/bus/input/device 显示多出两个设备一个event1 一个event2.我当时也没多考虑,直接用我们之前的读取笔迹程序,抓取event2端口,发现没有数据读出,然后我就联系厂商。咨询关于linux驱动下,上层软件如何读取笔迹信息,厂商说他们没有在linux下面开发过,故不知道如何获取信息,晕。然后又突然丢了一个驱动给我,我一看哪个驱动什么都不是,没有一般驱动的read什么函数,要了半天厂商给了写那个驱动的工程师联系方式,跟那个工程师联系后,他说系统通用驱动不支持,需要他们提高驱动,而且他需要对本来的驱动进行修改来适合我们的上层获取数据的方式。

   那个工程师说大概2周给我驱动,但突然第二天就丢给了我,我一看傻眼了,我跟不知道怎样编译,那个工程师也很不友好,不提供任何编译信息,一副很拽的样子,我以后只有在桌面PC编译hello.ko的经历,但交叉编译一直没成功过,问那个工程师,他说他是和系统一起编译的,不知道我们编译为模块的方式。我只能下载对应我们设备2.6.39.4的源码,上网查信息,然后修改Makefile,结果编译显示找不到源码下面什么文件信息,我又上网查,网上说需要先交叉编译内核代码,然后才能编译模块,所以我先交叉编译内核

 1)make mrproper 

 2)make ARCH=mips CROSS_COMPILE=mips-openwrt-linux- menuconfig

    然后进去按照设备里内核的选项选择下 

 3) make ARCH=mips CROSS_COMPILE=mips-openwrt-linux-

编译完成后,发现make时,显示什么32位不支持,kernel 没提供64,我晕,问那个工程师,那家伙也不回答,我只能自己再上网查,最后发现自己编译时,需要在$(make)时指定ARCH=mips这样才行,下面是正确的makefile

obj-m:=huiontablet_anzhengtong.o
#KERNELDIR:=/lib/modules/2.6.35.6-45.fc14.i686/build
#KERNELDIR:=/home/james/linux-2.6.39.4/
KERNELDIR:=/home/james/mybuildroot/trunk/build_dir/linux-ar71xx_nand/linux-2.6.39.2/
ARCH:=mips 
CROSS_COMPILE:=mips-openwrt-linux-
CC:=mips-openwrt-linux-gcc  --》这个不能少
PWD:=$(shell pwd)
modules:
 $(MAKE) ARCH=$(ARCH) -C $(KERNELDIR) M=$(PWD) modules  --》这里的ARCH也不能少 
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~core *.ko *.mod* *.order *.symvers

好不容易编译模块完成,放到设备上时,提示我没有unknow in modules unknow in parama,我又上网查,人家说编译时指定的内核最好是你平台里用的那个,我只能重新到半年前编译的openwrt里去找,结构发现里面只有2.6.39.2的内核,然后就指定2.6.39.2编译模块,然后放到设备上发现提示模块内核不匹配,这就为难我了,我想了下只能重新编译下openwrt系统,而且把usb hid驱动选为模块,不能直接编进内核里,那样会提前加载签字板,然后用2.6.39.2的重新烧录RB433,这样编译的模块终于可以加载了,不过插上设备后提示register fail,/dev下面有新的设备生成,用那个工程师提供的上层程序,发现读的都是0.

   然后我告诉他情况,他说在他那边是好的,但其实无论是否可以读出数据,他的这个驱动稳定性都很差,我立即重新用原来的驱动测试,发现event1是正确的端口,然后用原来的结构体去解析,发现是有数据的,只是数据的定义跟以前有差异,要稍微修改下,具体等后面总结。

  这次主要是借这个机会,锻炼了下交叉编译模块的方式,有时网上别人可以的,你自己不一定可以,一定要认真实践才行,特别是驱动编译,要很小心。


阅读(450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~