• «
  • 1
  • 2
  • »
  • Pages: 2/2     Go
主题 : 求教:android 下USB设备驱动的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 79057
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-09-29
最后登录: 2012-10-23
10楼  发表于: 2012-10-09 16:59
驱动代码发出来了,求大神指教


stigreader.c.zip (4 K) 下载次数:10
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
11楼  发表于: 2012-10-09 22:55
从驱动源文件看
复制代码
  1.     // 注册usb设备
  2.     retval = usb_register_dev(interface, &stigreader_class);


驱动应该是注册了一个名字叫STIGREADER_DEVICE_CLASS_NAME的字符设备,主设备号是USB_MAJOR(定义为180),次设备号是USB_SKEL_MINOR_BASE(定义为192)加上一个索引值。具体值可以通过把源代码里的
复制代码
  1. //info("%s 链接成功-%d", STIGREADER_DESCRIPTION, interface->minor);

这句打印语句的注释去掉(当然你需要把中文改成英文)来获得。
如果在/dev目录下找不到相应主次设备号的设备文件,你试试可以通过手动"mknod /dev/stigreader c 180 <程序里打印出来的minor值>"来生成。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 79057
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-09-29
最后登录: 2012-10-23
12楼  发表于: 2012-10-10 15:49
多些版主的悉心指导
级别: 新手上路
UID: 79057
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-09-29
最后登录: 2012-10-23
13楼  发表于: 2012-10-10 15:52
用mknod可以手动生成设备的字符几点

但是在驱动中能不能编写代码来执行mknod呢
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
14楼  发表于: 2012-10-10 16:44

 回 13楼(hatherlea) 的帖子

通常我们不会在驱动里用mknod去生成节点。在Android上的ueventd就是负责从内核接收新设备的信息并且生成设备节点的。从源代码()看,它应该会创建一个/dev/bus/usb/<bus id>/<device id>的相应的设备节点。如果是那样的话,我想作为HAL程序,应该去遍历/dev/bus/usb下的设备节点文件(或者/sys/bus/usb下的设备属性节点文件?)找出匹配读卡器的节点来操作。
[ 此帖被kasim在2012-10-10 17:08重新编辑 ]
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 79057
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-09-29
最后登录: 2012-10-23
15楼  发表于: 2012-10-10 18:44
灰常感谢版主

在我执行ls /sys/class/usb/stigreader/ 后
显示
uevent
dev
subsystem
device
power

cat uevent 结果如下
MAJOR=180
MINOR=192
DEVNAME=stigreader
正好是我的设备

那这里的dev是不是我的设备节点,如果是的话,就省去了很多遍历过程了
不知道我说的对不对
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
16楼  发表于: 2012-10-11 10:34
我不觉得这里的dev是设备节点文件,它应该只是一个包含了<major>:<minor>字符串的一个文本文件。不过我想你可以利用这里获得的major和minor号,在HAL程序中调用mknod()这个系统调用来创建设备节点。关于mknod()系统调用的用法,参考man 2 mknod的输出。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
  • «
  • 1
  • 2
  • »
  • Pages: 2/2     Go