fudan_abc的留言



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您好, 看了這裡的文章, 真的省了我很多時間,不過我這有一些問題想要請教您小弟最近正在修改bluez stack裡的hci_usb driver.他針對bluetooth usb adapter的isoc interface做了下面的setup(http://lxr.linux.no/linux+v2.6.22/drivers/bluetooth/hci_usb.c#L308 這是source的部份,但是我想post上來會有點混亂)(1) create a urb (2) fill in urb with usb_rcvisocpipe, and all other settings such as Interval(3) submit it with a completion function接下來, 他會在completition function, 再度submit這個urb我想這個的目的,是要從usb device的isoc interface持續的拿取資料因為現在我必須要動態的使用usb_set_interface來改變isoc interface的alternative setting可是一但我改變了, 上面這個urb 就會發生submission error請問這個urb是要kill後重新submit一次?

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盘每几千个字节就会出现一次。
每次出现存数时间较长的时候,都能检测到csw时间极长(200ms左右),具体查找到waite_for_completion()用去了时间,我理解的是主机让设备回复csw但设备没有及时回复,是不是可以断定是U盘那边耽误的时间,那为什么U盘会耽误这个时间呢,是不是数据的写入没有完成,所以没有回复csw,那为什么U盘的写入时间会时长时短呢?
请大伙也受累帮着分析一下。

yzdai 回复于:2008-10-06

我来试一下: 这个是U盘的问题.只能用异步方式,或回调函数.大多数存储设备都只能保证一个平均数据率.

centermyjf发表于:2008-03-21

你好,fudan_abc,我通过网上了解了你们的大作,现在正拜读中,我是linux爱好者,通过阅读你们的文章,我学习了很多的知识.真的是非常的感恩.中国需要更多的像你们这样勇于奉献的人,你们的文章真的是写得很精彩,对初学者帮助非常大.要继续加油啊.
对了,我看了一下你们的简历,里面空的,呵呵,你们是两个人在写作吧.
若是还有什么好东西,继续写出来分享啊,这对初学者帮助非常大.呵呵,若是也能分析一下内核的其它部分也很好啊,比如文件系统,内核开机启动的初使化过程等.
加油啊!!!

epegasus发表于:2008-01-10

各位的工作给我很大的帮助,非常感谢
可不可以同时把相关的资料也以某种形式分享呢?毕竟找一些相关资料非常困难和费时

petsatan发表于:2007-12-04

您好!在VFS层可以成功截获file_operations中read(or write)函数的指针,针对ext3文件系统的,但是对u盘怎么不行,只能打开某个具体的文件才可以截获。
代码如下:
#include  
#include  
#include  
#include  
#include  
#include  

char *aim = "/mnt/usb/a";         ------>  我在u盘中建的文件a

MODULE_AUTHOR("petsatan@sohu");
MODULE_DESCRIPTION("Get the kernel function address ");
MODULE_LICENSE("GPL");

typedef ssize_t (*read_t)(struct file *, char *, size_t, loff_t *);
read_t orig_aim_read = NULL;

ssize_t encry_read(struct file *fp , char *buf , size_t count , loff_t *ppos)
{
ssize_t encryfile;

printk("<0> Congratulation! \n");
encryfile = orig_aim_read(fp ,buf ,count ,ppos);

return encryfile;
}

int switch_read(const char *p , read_t *orig_read , read_t new_read)
{
struct file *filep;
filep = filp_open(p , O_RDONLY , 0);
if(IS_ERR(filep))
return -1;
if(orig_read)
*orig_read = filep->f_op->read;
printk("read operation address:------- %p ------\n", filep->f_op->read);

filep->f_op->read = new_read;
filp_close(filep,0);
return 0;
}

int unswitch_read(const char *p, read_t orig_read)
{
struct file *filep;
filep = filp_open(p , O_RDONLY , 0);
if(IS_ERR(filep))
return -1;
filep->f_op->read = orig_read;
filp_close(filep,0);
return 0;
}

static int encryfile_init(void)
{
switch_read(aim , &orig_aim_read , encry_read);
printk(" <1>read() has switch!\n");
return 0;
}

static void encryfile_cleanup(void)
{
unswitch_read(aim, orig_aim_read);
printk("<2>read() has unswitch! \n");
}

module_init(encryfile_init);
module_exit(encryfile_cleanup);

期待您的回信!!! 急!!!