生活得有多么艰难
前两天回通化,见了初中刘同学和高中于同学,听他们讲了一些同学目前的状况。我妈还给我讲了一些亲戚的现状。总得来看,我的初中同学过得普遍比较惨淡,高中同学回到或留在通化的都是一方牛人,小康生活,离开通化的都老牛了。留在通化的,牛到我大致提提他们是干啥的,就非常容易人肉出来;在外的牛到,遍布世界各大城市和北大广。亲戚们的状态普遍不咋地,过得比较咋地的亲戚,早在我上小学以前就基本断联系了。
想同学们过得好的好坏的坏,从通化到长春以后,抑郁了几天。然后大学郭同学从四川来长,大家一聚再聚,他们喝酒我看着。大学同学普遍过得不错,像小建早在好几年前已经达到很多人心中的人生巅峰,不过,他本人的巅峰可能还远没有达到。当时学习最好的男生和女生两两结合,现在都过得非常不错。学习其次好的那些散在各研究所和高校,还有的在中学或者教育局成为骨干或领导了。当时的牛人还是牛人,当时像我这样排在最后的还是排在最后。
我突然就明白了思考了十来年的一个问题,为什么成年人要求孩子们好好学习,而自己成天就打麻将,甚至也不是为了应酬,就只是享受。因为在学业告一段落以后,社会阶级就定了型(至少大家这样以为),无论如何努力,再无希望。现在,甚至有不少人认为,一旦出生,社会阶级就已经定型了。这样的时代,以前也有过,倒是不稀奇,比如魏晋南北朝。不过,咱们还是别在这里讨论了,有些人甚至相信中国不存在阶级呢。说起来伤心。
今天下午跟李同学和小牛同学聊天。李同学特意穿了我们结题电化学工作站时的半袖,我们的左袖口上有个循环伏安的图,好像是铂电极扫描铁氰化钾的,我记得。但是当时我神情恍忽,竟然没有注意到李同学用心良苦,虽然我也恰巧穿了这件。不过后来晚上我和李同学在西兰花雕塑喷泉下面遇到了,合了影,算是补了遗憾。下午,我们谈到各种未来和计划。小牛同学说,有些人在很多年里逐渐就忘掉了自己的理想。一叹。
希望我们都能记得自己最初的理想。希望李同学也能够完美实施他的计划。
另一个体会。到长春,开网页,看看新闻和douban,觉得通化的现实与小资们的生活体系,是完全隔离的两个世界。先前在通化的时候,电视的新闻正重复着大约一周前网上的消息,我还以为自己穿越了呢。后来在长春的时候,看到douban上小资们依然故我,又继续推出各种新鲜消息,保持着对他们自己的情怀,也顺便对广大受苦受难的劳苦大众充满了同情的态度。这么伟大的同情,却在这么久的时间里没看到产生什么值得一提的效果,也是奇迹。
我又回到了小资们中间,喝咖啡写代码,提心吊胆怕下岗。生活真是艰难。
--------------------
博客会手工同步到以下地址:
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
20130531
20130518
与建一的讨论
建一:
>老师,我因为工作原因又出差来集中开发了…
你总是集中开发,可真得注意身体了。岁数一大,就不如年轻的时候扛造了。
你对于技术的思考和总结,已经越来越有高度,令我欣慰。有你这样的讨论,即
使我在小山村里也不孤独。
>简述的是在2006年到2013年我接触的web开发技术路线变化。
你提到的几种技术,我的体会是这样的:
1.J2EE SSH 与 orm/sessionbean 它们都不矛盾,算是不同的方面吧。它们不能
比较,互相作为补充吧。
2.在你所讨论的角度上,web service 与 SSH 一样,都是一种框架 (或架构) 手
段,它们在软件工程上的原则是相通的,比如倾向于你提到的封装、抽象、约
定,只不过是在这些方面的实现机制和强调的程度不同。就像XP和RUP其实并无本
质不同。
3.no sql 和 mongodb又是与orm/sessionbean类似的技术方向,数据留存。
我的感想:1.框架(和数据留存)都有不少技术,它们无所谓好坏,而是有各自不
同的优缺点 (包括学习曲线的陡峭程度、现有人员的技术程度也算特点,要作为
采用时的考量);工程师的责任,是针对具体项目,根据这些特点优缺点选择合适
合的技术。 2.如果不建立更全局和高度的观点来看待这些技术,是危险的。
4. 框架一直在试图解决一个问题,就是如何"约束"使用者的行为,而不是增加他
们的自由,以保证他们能够以更"正确"的行为使用框架所规范的底层机制,比如
语言。在一定程度上,框架的创造者们成功了。但是同时,使用框架真正的方
法,是理解和构造它们,而不是单纯被动地被约束。理解和构造框架,需要更深
层次的理论知识,更多地探索这些成型的框架的构造原则和动机。
5. nosql一类的数据留存技术,一直在试图解决两个问题。一是提高性能,降低
负载,采用的技术手段包括分布式 (集群、云,全算分布吧) ,二是与现有技术
的结合 (动机是方便程序员使用),比如与OO的结合,比如脱离sql。性能和负载
方面,似乎卓有成效,而与现有技术结合的方向,一部分技术似乎有这样的目
的,即能让傻瓜程序员 (我指的不是那种KISS的S,而是受到培训很少,不希望投
入时间和精力、智力)也编程序。后面这个目的,早在COBOL时代就已经有了,无
论他们取得了多少成果,我仍深感怀疑。我怀疑的原因是,创造性的工作是所有
智力活动之所以有价值的特性,而创造性工作需要严格精确地描述--没有适当的
工具和训练,我不相信正常人类可以使用正常人类语言精确描述任何意图。计算
机又不是神仙,焉能知道你想得是啥,甚至很多人自己都不明确自己想的是啥。
如果自己也不清楚,就变成了希望计算机代为决定,这涉及人是否要放弃自由意
志了。
> 曾经以为走在软件开发的路上,必须不断地在自己身上增加各种砝码,针对于具
> 体技术的砝码。然后你的重量就大了,力量就强了。结果一边走一边发现有些东
> 西慢慢变成负担,又开始甩脱直到轻松,留下的是对于负重的承受力和感知。"在
> 任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,
> 却是次要的。"
确实,增加的东西,一部分只是暂时的奇技淫巧、眩目的名词,短期可能效果不
错;应该减少的东西,也正是这些。应该留下来的,是基础理论。而所有的新知
识,都应该建立在自己的现有知识结构之上,是现有知识结构的一个演绎结果。
如果突然来了些新名词,却无法用我们现有的知识解释,要么,那就是我们要变
更知识结构了,要么就是这些新名词是骗人的。变更知识结构的,我遇到过的情
况是读《计算机程序的构造和解释》, (1) lamda运算与图灵机等价,所以,这
是一套不同的思考方法; (2)这很接近于Johan Linus以前对我说的,物理或电子
出身的人难以理解"模型",可能正是因为物理和电子工程师构造出的不是数据而
是物理模型,不是对问题的认识,然后建模,而是太早套用到了似乎唯一的既定
的解决方案上。这种什么跟什么是"同构"的,在《GEB》这本大书里有深刻讨论。
确认或猜想某个问题与某个模型同构,非常重要,因为我们可以选择一个更容易
解和对条件依赖更不那么苛刻的模型。
新名词骗人的,那就太多了,大多数新名词我都先归到这一类,如果不是一眼就
能看出来好的,等它著名了再说吧。
> 集大成的东西内部未必单一。平台级的产品,就应当能兼容并包多种形式、各尽
> 其能的模块或子系统,朴素的脚本是利器。这部分是联想到你设计的仪器软件平
> 台,以前没觉得是因为眼界小。
你这一段总结,让我想起了linux内核。这两天我配置linux内核,哗哗失败,一
次又一次。解决不了的困难,如同跟高手过招,屡屡被缠住,不要说攻击,连自
守都困难得很。不过,与高手同行,毕竟收获也很大--如果能幸存下来。linux内
核的结构,我看到的只是make的配置,正有点你说的这个意思。
我的另一个体会,针对你提到的"眼界"。这几天哪位同学来着,重提到一个问
题,研究了一六十三招以后,发现别人早就实现了。前几年Johan Lilius来长春
的时候,我请教他关于整个体系性能的问题,他给我篇论文,198X的。我看了以
后拍大腿,正是我想要的。另一个问题,我当时请教的,他从理认上否定了解决
的可能性。对198X年的论文,我当时提到,这多么令人沮丧,我们头疼很久的问
题,不仅有人解决了,而且解决了三十多年,而且,我们还不知道它已经解决了。
他说,你在博士阶段 (或者做科学研究) 所受到的训练,正是为了提高这种能力。
我们经常看到我们过去的不足,甚至憎恨过去的技术选择,那正是成长的结果。
当然同时,也说明我们那个时候多么幼稚。幼稚,我并不是指经验少,而是指理
论太差。我们一般所说的知识,要么来自基本理论的演绎,要么来自经验的归
纳,别无他途。也正因为别无他途,所以一切新名词都是唬人的。而靠从经验中
归纳,你得活多少年才能有结果啊。所以,基本理论的修养,和从基本理论中经
过漫长的过程推导出结论来的能力,都尤其重要。
本来这只是回复你一个人的邮件,写着写着,痛感我们为幼稚啊什么的所付出的
代价,想着很多别人也可能有同样的经历,或者会有同感。所以,我把回信发到
博客里了。
>以上。保重身体!
请在集中开发中保重,这样过不了多久,你身体就会不如我了。
重申,一切不利于人类繁衍的规章都是扯淡的。
>老师,我因为工作原因又出差来集中开发了…
你总是集中开发,可真得注意身体了。岁数一大,就不如年轻的时候扛造了。
你对于技术的思考和总结,已经越来越有高度,令我欣慰。有你这样的讨论,即
使我在小山村里也不孤独。
>简述的是在2006年到2013年我接触的web开发技术路线变化。
你提到的几种技术,我的体会是这样的:
1.J2EE SSH 与 orm/sessionbean 它们都不矛盾,算是不同的方面吧。它们不能
比较,互相作为补充吧。
2.在你所讨论的角度上,web service 与 SSH 一样,都是一种框架 (或架构) 手
段,它们在软件工程上的原则是相通的,比如倾向于你提到的封装、抽象、约
定,只不过是在这些方面的实现机制和强调的程度不同。就像XP和RUP其实并无本
质不同。
3.no sql 和 mongodb又是与orm/sessionbean类似的技术方向,数据留存。
我的感想:1.框架(和数据留存)都有不少技术,它们无所谓好坏,而是有各自不
同的优缺点 (包括学习曲线的陡峭程度、现有人员的技术程度也算特点,要作为
采用时的考量);工程师的责任,是针对具体项目,根据这些特点优缺点选择合适
合的技术。 2.如果不建立更全局和高度的观点来看待这些技术,是危险的。
4. 框架一直在试图解决一个问题,就是如何"约束"使用者的行为,而不是增加他
们的自由,以保证他们能够以更"正确"的行为使用框架所规范的底层机制,比如
语言。在一定程度上,框架的创造者们成功了。但是同时,使用框架真正的方
法,是理解和构造它们,而不是单纯被动地被约束。理解和构造框架,需要更深
层次的理论知识,更多地探索这些成型的框架的构造原则和动机。
5. nosql一类的数据留存技术,一直在试图解决两个问题。一是提高性能,降低
负载,采用的技术手段包括分布式 (集群、云,全算分布吧) ,二是与现有技术
的结合 (动机是方便程序员使用),比如与OO的结合,比如脱离sql。性能和负载
方面,似乎卓有成效,而与现有技术结合的方向,一部分技术似乎有这样的目
的,即能让傻瓜程序员 (我指的不是那种KISS的S,而是受到培训很少,不希望投
入时间和精力、智力)也编程序。后面这个目的,早在COBOL时代就已经有了,无
论他们取得了多少成果,我仍深感怀疑。我怀疑的原因是,创造性的工作是所有
智力活动之所以有价值的特性,而创造性工作需要严格精确地描述--没有适当的
工具和训练,我不相信正常人类可以使用正常人类语言精确描述任何意图。计算
机又不是神仙,焉能知道你想得是啥,甚至很多人自己都不明确自己想的是啥。
如果自己也不清楚,就变成了希望计算机代为决定,这涉及人是否要放弃自由意
志了。
> 曾经以为走在软件开发的路上,必须不断地在自己身上增加各种砝码,针对于具
> 体技术的砝码。然后你的重量就大了,力量就强了。结果一边走一边发现有些东
> 西慢慢变成负担,又开始甩脱直到轻松,留下的是对于负重的承受力和感知。"在
> 任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,
> 却是次要的。"
确实,增加的东西,一部分只是暂时的奇技淫巧、眩目的名词,短期可能效果不
错;应该减少的东西,也正是这些。应该留下来的,是基础理论。而所有的新知
识,都应该建立在自己的现有知识结构之上,是现有知识结构的一个演绎结果。
如果突然来了些新名词,却无法用我们现有的知识解释,要么,那就是我们要变
更知识结构了,要么就是这些新名词是骗人的。变更知识结构的,我遇到过的情
况是读《计算机程序的构造和解释》, (1) lamda运算与图灵机等价,所以,这
是一套不同的思考方法; (2)这很接近于Johan Linus以前对我说的,物理或电子
出身的人难以理解"模型",可能正是因为物理和电子工程师构造出的不是数据而
是物理模型,不是对问题的认识,然后建模,而是太早套用到了似乎唯一的既定
的解决方案上。这种什么跟什么是"同构"的,在《GEB》这本大书里有深刻讨论。
确认或猜想某个问题与某个模型同构,非常重要,因为我们可以选择一个更容易
解和对条件依赖更不那么苛刻的模型。
新名词骗人的,那就太多了,大多数新名词我都先归到这一类,如果不是一眼就
能看出来好的,等它著名了再说吧。
> 集大成的东西内部未必单一。平台级的产品,就应当能兼容并包多种形式、各尽
> 其能的模块或子系统,朴素的脚本是利器。这部分是联想到你设计的仪器软件平
> 台,以前没觉得是因为眼界小。
你这一段总结,让我想起了linux内核。这两天我配置linux内核,哗哗失败,一
次又一次。解决不了的困难,如同跟高手过招,屡屡被缠住,不要说攻击,连自
守都困难得很。不过,与高手同行,毕竟收获也很大--如果能幸存下来。linux内
核的结构,我看到的只是make的配置,正有点你说的这个意思。
我的另一个体会,针对你提到的"眼界"。这几天哪位同学来着,重提到一个问
题,研究了一六十三招以后,发现别人早就实现了。前几年Johan Lilius来长春
的时候,我请教他关于整个体系性能的问题,他给我篇论文,198X的。我看了以
后拍大腿,正是我想要的。另一个问题,我当时请教的,他从理认上否定了解决
的可能性。对198X年的论文,我当时提到,这多么令人沮丧,我们头疼很久的问
题,不仅有人解决了,而且解决了三十多年,而且,我们还不知道它已经解决了。
他说,你在博士阶段 (或者做科学研究) 所受到的训练,正是为了提高这种能力。
我们经常看到我们过去的不足,甚至憎恨过去的技术选择,那正是成长的结果。
当然同时,也说明我们那个时候多么幼稚。幼稚,我并不是指经验少,而是指理
论太差。我们一般所说的知识,要么来自基本理论的演绎,要么来自经验的归
纳,别无他途。也正因为别无他途,所以一切新名词都是唬人的。而靠从经验中
归纳,你得活多少年才能有结果啊。所以,基本理论的修养,和从基本理论中经
过漫长的过程推导出结论来的能力,都尤其重要。
本来这只是回复你一个人的邮件,写着写着,痛感我们为幼稚啊什么的所付出的
代价,想着很多别人也可能有同样的经历,或者会有同感。所以,我把回信发到
博客里了。
>以上。保重身体!
请在集中开发中保重,这样过不了多久,你身体就会不如我了。
重申,一切不利于人类繁衍的规章都是扯淡的。
20130513
请教:tiny210 linux,尝试s3c-udc与gadgetfs一起使用,失败
请教各位专家。
- 问题:tiny210 linux,尝试s3c-udc与gadgetfs一起使用,失败。
- 错误现象:
1.把usb.c(gadgetfs官方测试程序,我修改过)编译为可执行程序 usb。执行usb时,到向文
件描述符write后死机.
我对usb.c的修改,是为了使之识别 s3c-ucd。按s3c-hsudc.c注释,
The S3C24XX USB 2.0 high-speed USB controller supports upto 9 endpoints.
Each endpoint can be configured as either in or out endpoint. Endpoints
can be configured for Bulk or Interrupt transfer mode.
我试着进行了几种配置,均导致死机。
2. 执行前usb运行前,执行了下述操作,控制台均无报错。
mkdir /dev/gadget
insmod gadgetfs.ko
mount -t gadgetfs none /dev/gadget
此时,
[root@FriendlyARM plg]# ls /dev/gadget
ls /dev/gadget
s3c-udc
3. dmesg的出错信息:
[ 299.539226] gadgetfs: USB Gadget filesystem, version 24 Aug 2004
[ 353.895836] s3c-udc: bind to driver nop --> error -120
其中第二行是mount操作后出现的。
我猜测,usb.c死机的原因在这里,即gadgetfs加载失败。
请教原因何在?
- 操作系统:
[root@FriendlyARM plg]# uname -a
uname -a
Linux FriendlyARM 3.0.8-FriendlyARM #9 PREEMPT Tue May 7 22:56:46 CST 2013 armv7l GNU/Linux
- 内核配置:
│ │ --- USB Gadget Support │ │
│ │ [*] Debugging messages (DEVELOPMENT) │ │
│ │ [*] Debugging information files (DEVELOPMENT) │ │
│ │ (500) Maximum VBUS Power usage (2-500 mA) │ │
│ │ USB Peripheral Controller (S3C HS USB OTG Device) ---> │ │
│ │ *** NOTE: S3C OTG device role enables the controller driver below *** │ │
│ │ <*> S3C high speed(2.0, dual-speed) USB OTG device (NEW) │ │
│ │ S3C OTGD transfer mode (enabled DMA MODE) ---> │ │
│ │ <M> USB Gadget Drivers │ │
│ │ <M> Gadget Zero (DEVELOPMENT) │ │
│ │ < > Audio Gadget (EXPERIMENTAL) │ │
│ │ < > Ethernet Gadget (with CDC Ethernet support) │ │
│ │ < > Network Control Model (NCM) support │ │
│ │ <M> Gadget Filesystem (EXPERIMENTAL) │ │
│ │ < > Function Filesystem (EXPERIMENTAL) │ │
│ │ < > File-backed Storage Gadget │ │
│ │ <M> Mass Storage Gadget │ │
│ │ <M> Serial Gadget (with CDC ACM and CDC OBEX support) │ │
│ │ < > MIDI Gadget (EXPERIMENTAL) │ │
│ │ < > Printer Gadget │ │
│ │ < > CDC Composite Device (Ethernet and ACM) │ │
│ │ < > Nokia composite gadget │ │
│ │ < > Multifunction Composite Gadget (EXPERIMENTAL) │ │
│ │ < > HID Gadget │ │
│ │ < > EHCI Debug Device Gadget │ │
│ │ < > USB Webcam Gadget │ │
- 其他信息:
1. g_serial.ko与s3c-udc配合,可以与PC的HOST端通信;
我的理解,这表明 tiny210的ucd 确实是 s3c-udc.
2. gadgetfs.ko载入内核(with dummy_hcd + usb.c),dmesg无错误信息。
我的理解,这表明gadgetfs.ko与dummy_hcd可以配合工作。
# lsusb -v
lsusb -v
Bus 3 Device 7 ID 0525a4a4 Netchip Technology, Inc. Linux-USB user-mode bulk source/sink
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0525 Netchip Technology, Inc.
idProduct 0xa4a4 Linux-USB user-mode bulk source/sink
bcdDevice 1.00
iManufacturer 1 Licensed to Code, LLC
iProduct 2 My Source/Sink Product
iSerial 3 1.3
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 3
iConfiguration 4 The Configuration
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 5 Source/Sink
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x87 EP 7 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x8b EP 11 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 6
Device Qualifier (for other device speed)
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Device Status 0x0000
(Bus Powered)
Bus 3 Device 1 ID 1d6b0002 Linux Foundation 2.0 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM dummy_hcd
iProduct 2 Dummy host controller
iSerial 1 dummy_hcd
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0001
Per-port power switching
Ganged overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 0 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0xff
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0503 highspeed power enable connect
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
Bus 2 Device 1 ID 1d6b0001 Linux Foundation 1.1 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0001 1.1 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM ohci_hcd
iProduct 2 EXYNOS OHCI Host Controller
iSerial 1 s5p-ohci
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 255
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0002
No power switching (usb 1.0)
Ganged overcurrent protection
bPwrOn2PwrGood 2 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0100 power
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
Bus 1 Device 1 ID 1d6b0002 Linux Foundation 2.0 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM ehci_hcd
iProduct 2 S5P EHCI Host Controller
iSerial 1 s5p-ehci
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0100 power
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
[root@FriendlyARM plg]#
3. g_zero.ko载入内核,dmesg无错误信息,如下:
[ 495.979552] zero gadget: adding config #3 'source/sink'/bf1fad28
[ 495.979569] zero gadget: adding 'source/sink'/d9c30080 to config 'source/sink'/bf1fad28
[ 495.979586] zero gadget: dual speed source/sink: IN/ep2-bulk, OUT/ep1-bulk
[ 495.979596] zero gadget: cfg 3/bf1fad28 speeds: high full
[ 495.979605] zero gadget: interface 0 = source/sink/d9c30080
[ 495.979615] zero gadget: adding config #2 'loopback'/bf1fada8
[ 495.979625] zero gadget: adding 'loopback'/d9c30880 to config 'loopback'/bf1fada8
[ 495.979637] zero gadget: dual speed loopback: IN/ep2-bulk, OUT/ep1-bulk
[ 495.979646] zero gadget: cfg 2/bf1fada8 speeds: high full
[ 495.979655] zero gadget: interface 0 = loopback/d9c30880
[ 495.979664] zero gadget: Gadget Zero, version: Cinco de Mayo 2008
[ 495.979724] zero gadget: zero ready
[ 495.998990] Registered gadget driver 'zero'
4. usb.c我修改的那一段,某个版本如下:
/* s3c-udc, high speed. by Young */
} else if
(stat (DEVNAME = "s3c-udc", &statb) == 0) {
HIGHSPEED = 1;
device_desc.bcdDevice = __constant_cpu_to_le16 (0x0100);
fs_source_desc.bEndpointAddress
= hs_source_desc.bEndpointAddress
= USB_DIR_IN | 2;
EP_IN_NAME = "ep2-bulk";
fs_sink_desc.bEndpointAddress
= hs_sink_desc.bEndpointAddress
=USB_DIR_OUT | 1;
EP_OUT_NAME = "ep1-bulk";
source_sink_intf.bNumEndpoints = 3;
fs_status_desc.bEndpointAddress
= hs_status_desc.bEndpointAddress
= USB_DIR_IN | 3;
EP_STATUS_NAME = "ep3-int";
}
- 问题:tiny210 linux,尝试s3c-udc与gadgetfs一起使用,失败。
- 错误现象:
1.把usb.c(gadgetfs官方测试程序,我修改过)编译为可执行程序 usb。执行usb时,到向文
件描述符write后死机.
我对usb.c的修改,是为了使之识别 s3c-ucd。按s3c-hsudc.c注释,
The S3C24XX USB 2.0 high-speed USB controller supports upto 9 endpoints.
Each endpoint can be configured as either in or out endpoint. Endpoints
can be configured for Bulk or Interrupt transfer mode.
我试着进行了几种配置,均导致死机。
2. 执行前usb运行前,执行了下述操作,控制台均无报错。
mkdir /dev/gadget
insmod gadgetfs.ko
mount -t gadgetfs none /dev/gadget
此时,
[root@FriendlyARM plg]# ls /dev/gadget
ls /dev/gadget
s3c-udc
3. dmesg的出错信息:
[ 299.539226] gadgetfs: USB Gadget filesystem, version 24 Aug 2004
[ 353.895836] s3c-udc: bind to driver nop --> error -120
其中第二行是mount操作后出现的。
我猜测,usb.c死机的原因在这里,即gadgetfs加载失败。
请教原因何在?
- 操作系统:
[root@FriendlyARM plg]# uname -a
uname -a
Linux FriendlyARM 3.0.8-FriendlyARM #9 PREEMPT Tue May 7 22:56:46 CST 2013 armv7l GNU/Linux
- 内核配置:
│ │ --- USB Gadget Support │ │
│ │ [*] Debugging messages (DEVELOPMENT) │ │
│ │ [*] Debugging information files (DEVELOPMENT) │ │
│ │ (500) Maximum VBUS Power usage (2-500 mA) │ │
│ │ USB Peripheral Controller (S3C HS USB OTG Device) ---> │ │
│ │ *** NOTE: S3C OTG device role enables the controller driver below *** │ │
│ │ <*> S3C high speed(2.0, dual-speed) USB OTG device (NEW) │ │
│ │ S3C OTGD transfer mode (enabled DMA MODE) ---> │ │
│ │ <M> USB Gadget Drivers │ │
│ │ <M> Gadget Zero (DEVELOPMENT) │ │
│ │ < > Audio Gadget (EXPERIMENTAL) │ │
│ │ < > Ethernet Gadget (with CDC Ethernet support) │ │
│ │ < > Network Control Model (NCM) support │ │
│ │ <M> Gadget Filesystem (EXPERIMENTAL) │ │
│ │ < > Function Filesystem (EXPERIMENTAL) │ │
│ │ < > File-backed Storage Gadget │ │
│ │ <M> Mass Storage Gadget │ │
│ │ <M> Serial Gadget (with CDC ACM and CDC OBEX support) │ │
│ │ < > MIDI Gadget (EXPERIMENTAL) │ │
│ │ < > Printer Gadget │ │
│ │ < > CDC Composite Device (Ethernet and ACM) │ │
│ │ < > Nokia composite gadget │ │
│ │ < > Multifunction Composite Gadget (EXPERIMENTAL) │ │
│ │ < > HID Gadget │ │
│ │ < > EHCI Debug Device Gadget │ │
│ │ < > USB Webcam Gadget │ │
- 其他信息:
1. g_serial.ko与s3c-udc配合,可以与PC的HOST端通信;
我的理解,这表明 tiny210的ucd 确实是 s3c-udc.
2. gadgetfs.ko载入内核(with dummy_hcd + usb.c),dmesg无错误信息。
我的理解,这表明gadgetfs.ko与dummy_hcd可以配合工作。
# lsusb -v
lsusb -v
Bus 3 Device 7 ID 0525a4a4 Netchip Technology, Inc. Linux-USB user-mode bulk source/sink
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0525 Netchip Technology, Inc.
idProduct 0xa4a4 Linux-USB user-mode bulk source/sink
bcdDevice 1.00
iManufacturer 1 Licensed to Code, LLC
iProduct 2 My Source/Sink Product
iSerial 3 1.3
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 3
iConfiguration 4 The Configuration
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 5 Source/Sink
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x87 EP 7 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x8b EP 11 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 6
Device Qualifier (for other device speed)
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Device Status 0x0000
(Bus Powered)
Bus 3 Device 1 ID 1d6b0002 Linux Foundation 2.0 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM dummy_hcd
iProduct 2 Dummy host controller
iSerial 1 dummy_hcd
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0001
Per-port power switching
Ganged overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 0 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0xff
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0503 highspeed power enable connect
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
Bus 2 Device 1 ID 1d6b0001 Linux Foundation 1.1 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0001 1.1 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM ohci_hcd
iProduct 2 EXYNOS OHCI Host Controller
iSerial 1 s5p-ohci
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 255
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0002
No power switching (usb 1.0)
Ganged overcurrent protection
bPwrOn2PwrGood 2 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0100 power
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
Bus 1 Device 1 ID 1d6b0002 Linux Foundation 2.0 root hub
Device Descriptor
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.00
iManufacturer 3 Linux 3.0.8-FriendlyARM ehci_hcd
iProduct 2 S5P EHCI Host Controller
iSerial 1 s5p-ehci
bNumConfigurations 1
Configuration Descriptor
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status
Port 1 0000.0100 power
Device Status 0x0003
Self Powered
Remote Wakeup Enabled
[root@FriendlyARM plg]#
3. g_zero.ko载入内核,dmesg无错误信息,如下:
[ 495.979552] zero gadget: adding config #3 'source/sink'/bf1fad28
[ 495.979569] zero gadget: adding 'source/sink'/d9c30080 to config 'source/sink'/bf1fad28
[ 495.979586] zero gadget: dual speed source/sink: IN/ep2-bulk, OUT/ep1-bulk
[ 495.979596] zero gadget: cfg 3/bf1fad28 speeds: high full
[ 495.979605] zero gadget: interface 0 = source/sink/d9c30080
[ 495.979615] zero gadget: adding config #2 'loopback'/bf1fada8
[ 495.979625] zero gadget: adding 'loopback'/d9c30880 to config 'loopback'/bf1fada8
[ 495.979637] zero gadget: dual speed loopback: IN/ep2-bulk, OUT/ep1-bulk
[ 495.979646] zero gadget: cfg 2/bf1fada8 speeds: high full
[ 495.979655] zero gadget: interface 0 = loopback/d9c30880
[ 495.979664] zero gadget: Gadget Zero, version: Cinco de Mayo 2008
[ 495.979724] zero gadget: zero ready
[ 495.998990] Registered gadget driver 'zero'
4. usb.c我修改的那一段,某个版本如下:
/* s3c-udc, high speed. by Young */
} else if
(stat (DEVNAME = "s3c-udc", &statb) == 0) {
HIGHSPEED = 1;
device_desc.bcdDevice = __constant_cpu_to_le16 (0x0100);
fs_source_desc.bEndpointAddress
= hs_source_desc.bEndpointAddress
= USB_DIR_IN | 2;
EP_IN_NAME = "ep2-bulk";
fs_sink_desc.bEndpointAddress
= hs_sink_desc.bEndpointAddress
=USB_DIR_OUT | 1;
EP_OUT_NAME = "ep1-bulk";
source_sink_intf.bNumEndpoints = 3;
fs_status_desc.bEndpointAddress
= hs_status_desc.bEndpointAddress
= USB_DIR_IN | 3;
EP_STATUS_NAME = "ep3-int";
}
Subscribe to:
Posts (Atom)