-
yzdai
2008-10-06
-
这么好的文笔,不出书可惜了.
-
goldmusic
2008-09-24
-
大侠! 受益匪浅啊!阅读你们的文章就是一个舒服, 恳请再有一个我是OHCI的专题,那么USB系列就够完美了!
-
戴新彦
2008-09-19
-
高手大哥你好 你的文章忒好了~~
-
mlist_client
2008-09-09
-
高手你好,最近我试图将linux 2.6的usbcore移植到ecos下,现在的主要问题是如何把kobject和sysfs等机制去处掉?
-
姜瑞豪
2008-07-23
-
Hi, fudan_abc您好, 看了這裡的文章, 真的省了我很多時間,不過我這有一些問題想要請教您<br />小弟最近正在修改bluez stack裡的hci_usb driver.<br />他針對bluetooth usb adapter的isoc interface做了下面的setup<br />(http://lxr.linux.no/linux+v2.6.22/drivers/bluetooth/hci_usb.c#L308 這是source的部份,但是我想post上來會有點混亂)<br />(1) create a urb <br />(2) fill in urb with usb_rcvisocpipe, and all other settings such as Interval<br />(3) submit it with a completion function<br />接下來, 他會在completition function, 再度submit這個urb<br />我想這個的目的,是要從usb device的isoc interface持續的拿取資料<br /><br />因為現在我必須要動態的使用usb_set_interface來改變isoc interface的alternative setting<br />可是一但我改變了, 上面這個urb 就會發生submission error<br />請問這個urb是要kill後重新submit一次?<br /><br />
-
jojopeli
2008-05-10
-
您好,看到您的文章感觉真的帮助挺大的,我在工作中遇到一些具体的问题,想请教您。我在做嵌入式linux下的U盘控制器的研发工作,说白了就是串口收数然后存U盘,使用的atmel公司的at91rm9200的arm9芯片,linux系统是2.4核。我遇到的问题是:我每200多个字节存一次U盘(用户层应用程序写u盘的物理地址,使用write+fsysn函数(为的是每次写入都能真正写进物理空间)),存U盘的时间大概都在几毫秒到几十毫秒,但有时存盘时间会突然升至200ms左右,不知这200ms的时间是从什么地方来的,我监测了usb_stor_bulk_transport和usb_stor_invoke_transport函数,没有异常或报错,检测cbw,数据传输以及csw的运行时间,也没有出现时间较长的现象。而且使用不同的U盘,出现200ms的频率也不一样,写入速度较快的sandiskU盘是平均每几十万字节出现一次200ms的情况,kinston的每两三万出现一次200ms的情况,写入速度最慢的台电U盘每几千个字节就会出现一次。<br/>每次出现存数时间较长的时候,都能检测到csw时间极长(200ms左右),具体查找到waite_for_completion()用去了时间,我理解的是主机让设备回复csw但设备没有及时回复,是不是可以断定是U盘那边耽误的时间,那为什么U盘会耽误这个时间呢,是不是数据的写入没有完成,所以没有回复csw,那为什么U盘的写入时间会时长时短呢?<br/>请大伙也受累帮着分析一下。
-
yzdai
回复于
2008-10-06
-
我来试一下: 这个是U盘的问题.只能用异步方式,或回调函数.大多数存储设备都只能保证一个平均数据率.
-
centermyjf
2008-03-21
-
<a href='Http://hi.csdn.net/fudan_abc/profile/notebook/1.html' target='_blank'>你好,fudan_abc,我通过网上了解了你们的大作,现在正拜读中,我是linux爱好者,通过阅读你们的文章,我学习了很多的知识.真的是非常的感恩.中国需要更多的像你们这样勇于奉献的人,你们的文章真的是写得很精彩,对初学者帮助非常大.要继续加油啊.<br/>对了,我看了一下你们的简历,里面空的,呵呵,你们是两个人在写作吧.<br/>若是还有什么好东西,继续写出来分享啊,这对初学者帮助非常大.呵呵,若是也能分析一下内核的其它部分也很好啊,比如文件系统,内核开机启动的初使化过程等.<br/>加油啊!!!</a>
-
epegasus
2008-01-10
-
各位的工作给我很大的帮助,非常感谢<br/>可不可以同时把相关的资料也以某种形式分享呢?毕竟找一些相关资料非常困难和费时
-
petsatan
2007-12-04
-
您好!在VFS层可以成功截获file_operations中read(or write)函数的指针,针对ext3文件系统的,但是对u盘怎么不行,只能打开某个具体的文件才可以截获。<br/>代码如下:<br/>#include <linux/sched.h> <br/>#include <linux/module.h> <br/>#include <linux/kernel.h> <br/>#include <linux/init.h> <br/>#include <linux/fs.h> <br/>#include <linux/file.h> <br/><br/>char *aim = "/mnt/usb/a"; ------> 我在u盘中建的文件a<br/><br/>MODULE_AUTHOR("petsatan@sohu");<br/>MODULE_DESCRIPTION("Get the kernel function address ");<br/>MODULE_LICENSE("GPL");<br/><br/>typedef ssize_t (*read_t)(struct file *, char *, size_t, loff_t *);<br/>read_t orig_aim_read = NULL;<br/><br/>ssize_t encry_read(struct file *fp , char *buf , size_t count , loff_t *ppos)<br/>{<br/> ssize_t encryfile;<br/> <br/> printk("<0> Congratulation! \n");<br/> encryfile = orig_aim_read(fp ,buf ,count ,ppos);<br/> <br/> return encryfile;<br/>}<br/><br/>int switch_read(const char *p , read_t *orig_read , read_t new_read)<br/>{<br/> struct file *filep;<br/> filep = filp_open(p , O_RDONLY , 0);<br/> if(IS_ERR(filep))<br/> return -1;<br/> if(orig_read)<br/> *orig_read = filep->f_op->read;<br/> printk("read operation address:------- %p ------\n", filep->f_op->read);<br/> <br/> filep->f_op->read = new_read; <br/> filp_close(filep,0);<br/> return 0;<br/>}<br/><br/>int unswitch_read(const char *p, read_t orig_read)<br/>{<br/> struct file *filep;<br/> filep = filp_open(p , O_RDONLY , 0);<br/> if(IS_ERR(filep))<br/> return -1;<br/> filep->f_op->read = orig_read;<br/> filp_close(filep,0);<br/> return 0;<br/>}<br/><br/>static int encryfile_init(void)<br/>{<br/> switch_read(aim , &orig_aim_read , encry_read);<br/> printk(" <1>read() has switch!\n");<br/> return 0;<br/>}<br/> <br/>static void encryfile_cleanup(void)<br/>{<br/> unswitch_read(aim, orig_aim_read);<br/> printk("<2>read() has unswitch! \n");<br/>}<br/><br/>module_init(encryfile_init);<br/>module_exit(encryfile_cleanup);<br/><br/>期待您的回信!!! 急!!!