`
dato0123
  • 浏览: 970286 次
文章分类
社区版块
存档分类
最新评论

Linux那些事儿 之 戏说USB(13)面纱

 
阅读更多
在爱情、背叛与死亡的漩涡中挣扎的凯蒂,亲历了幻想破灭与生死离别之后,终将生活的面纱从她的眼前渐渐揭去,从此踏上了不悔的精神成长之路。
向大家推荐这部片子《面纱》,没有那些小电影精彩,但是绝对值得一看。为什么会想到它,只在乎于现在的心情。前面说了那么多,才接触到usb_init,有点一窥usb面纱下神秘容颜的味道。当然,我们并不需要去经历爱情、被判与死亡,所需要经历的只是忍受前面大段大段的唠叨。
人往往可以被高尚感动,但始终不能因为高尚而爱上。因为被__init给盯上,usb_init在做牛做马的辛勤劳作之后便不得不灰飞烟灭,不可谓不高尚,但它始终只能是我们了解面纱后面内容的跳板,是起点,却不是终点,我们不会为它停留太久,有太多的精彩和苦恼在等着我们。
865 int retval;
866 if (nousb) {
867 pr_info("%s: USB support disabled/n", usbcore_name);
868 return 0;
869 }
866行,知道C语言的人都会知道nousb是一个标志,只是不同的标志有不一样的精彩,这里的nousb是用来让我们在启动内核的时候通过内核参数去掉USB子系统的,linux社会是一个很人性化的世界,它不会去逼迫我们接受USB,一切都只关乎我们自己的需要。不过我想我们一般来说是不会去指定nousb的吧,毕竟它那么的讨人可爱。如果你真的定义了nousb,那它就只会幽怨的说一句“USB support disabled”,然后退出usb_init。
867行,pr_info只是一个打印信息的宏,printk的变体,在include/linux/kernel.h里定义:
242 #define pr_info(fmt,arg...) /
这个可变参数宏要不要说一下?地球人都知道了,不过还是聊一下吧,我有多话症。99年的ISO C标准里规定了可变参数宏,和函数语法类似,给个例子
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
里面的“…”就表示可变参数,调用时,它们就会替代宏体里的__VA_ARGS__。GCC总是会显得特立独行一些,它支持更复杂的形式,可以给可变参数取个名字,再给个这种形式的例子
#define debug(format, args...) fprintf (stderr, format, args)
是不是显得更容易读了些?有了名字总是会容易交流一些。是不是与咱们的pr_info比较接近了?除了‘##’,它主要是针对空参数的情况。既然说是可变参数,那传递空参数也总是可以的,空即是多,多即是空,股市里的哲理这里同样也是适合的。如果没有‘##’,传递空参数的时候,比如
debug ("A message")
宏展开后,里面的字符串后面会多个多余的逗号。这个逗号你应该不会喜欢,它是表错情了,而‘##’则会使预处理器去掉这个多余的逗号。
872 if (retval)
873 goto out;
875 if (retval)
876 goto bus_register_failed;
877 retval = usb_host_init();
878 if (retval)
879 goto host_init_failed;
880 retval = usb_major_init();
881 if (retval)
882 goto major_init_failed;
884 if (retval)
885 goto driver_register_failed;
886 retval = usb_devio_init();
887 if (retval)
888 goto usb_devio_init_failed;
889 retval = usbfs_init();
890 if (retval)
891 goto fs_init_failed;
892 retval = usb_hub_init();
893 if (retval)
894 goto hub_init_failed;
896 if (!retval)
897 goto out;
871到897这些行是代码里的排比句,相似的init不相似的内容,很显然都是在完成一些初始化,也是usb_init任劳任怨所付出的全部。这里先简单的说一下。
871行,电源管理方面的。如果在编译内核时没有打开电源管理,也就是说没有定义CONFIG_PM,它就什么也不做。
874行,注册USB总线,只有成功的将USB总线子系统注册到系统中,我们才可以向这个总线添加USB设备。基于它显要的江湖地位,就拿它做为日后突破的方向了,擒贼先擒王,这个越老越青春的道理在linux中也是同样适用的。
877行,执行host controller相关的初始化。
880行,一个实际的总线也是一个设备,必须单独注册,因为USB是通过快速串行通信来读写数据,这里把它当作了字符设备来注册。
883~891行,都是usbfs相关的初始化。
892行,hub的初始化,这个复旦人甲正在讲。
895行,注册USB device driver,戴好眼镜看清楚了,是USB device driver而不是USB driver,前面说过,一个设备可以有多个接口,每个接口对应不同的驱动程序,这里所谓的device driver对应的是整个设备,而不是某个接口。内核里结构到处有,只是USB这儿格外多。
剩下的几行代码都是有关资源清除的,usb_init这个短短的函数在承载着我们的希望的时候嘎然而止了,你的感觉是什么?我的感觉是:这哪是我能说的清楚的啊。它的每个分叉都更像是一个陷阱,黑黝黝看不到底,但是已经没有回头的路。
分享到:
评论

相关推荐

    Linux 那些事儿系列之我是U盘

    《Linux那些事儿系列之我是U盘》是一篇深入讲解Linux内核中USB驱动技术的文章,由复旦大学的fudan_abc撰写。该系列文章通过风趣的语言和通俗易懂的方式,阐述了Linux内核从2.6.10到2.6.22.1版本中关于USB驱动模块、...

    LINUX那些事儿 linux经典之作

    然后是usb core(也就是戏说USB),这一阶段是个承上启下的角色,承的是U盘/HUB,启的是UHCI/EHCI,主要描述一个usb设备连接到hub上之后,在HUB和UHCI/EHCI之间也就是usb core里发生的故事. 再然后可以开始看UHCI/EHCI.这...

    兄弟连Linux基础知识与系统管理课件

    Linux是世界上最受欢迎的开源操作系统之一,它被广泛应用于服务器、超级计算机、移动设备以及嵌入式系统中。"兄弟连Linux基础知识与系统管理课件"是一份深入学习Linux操作系统的资源,适合初学者和希望提升技能的...

    戏说面向对象程序设计

    第一章面试受挫——代码无错就是好? 第二章代码规范、重构 第三章复制 VS复用 第四章业务的封装 第五章体会简单工厂模式的美妙 第六章工厂不好用了?...第十三章设计模式不能戏说!设计模式怎就不能戏说?

    戏说面向对象编程oop

    在《戏说面向对象程序设计C#版.pdf》这本书中,作者可能会以轻松幽默的方式讲解这些概念,通过实际示例帮助读者理解和掌握面向对象编程的思想和技巧。无论是Java还是C#开发者,深入理解OOP都能提升编程能力和代码...

    大班音乐:戏说脸谱.ppt

    特别是在幼儿教育阶段,如何将传统文化与现代科技相结合,激发儿童的学习兴趣和创造力,成为教育工作者面临的挑战之一。"大班音乐:戏说脸谱.ppt"这一课题,就为我们提供了一个将传统艺术与数字媒体巧妙结合的创新...

    戏说指针 作者 李志勇 是word文档

    《戏说指针》这篇文档由李志勇撰写,旨在帮助读者理解和掌握C/C++中的指针概念。指针在编程中扮演着重要的角色,它允许我们直接操作内存地址,提高程序的灵活性和效率。以下是关于指针的详细解析: 一、如何分析...

    戏说C#面向对象。。

    C#是一种广泛应用于Windows平台和跨平台开发的强大编程语言,尤其以其面向对象的特性而闻名。面向对象编程(Object-Oriented Programming,OOP)是C#的核心设计理念,它允许开发者通过模拟现实世界中的概念来组织和...

    幼儿园大班歌唱教案:戏说脸谱.doc

    幼儿园大班歌唱教案:戏说脸谱.doc

    戏说指针认知,心测有效

    指针的本质、指针的三要素、类型与变量名

    戏说面向对象程序设计C#版

    **四大发明之活字印刷——面向对象思想的胜利** - **可维护性**:面向对象的设计允许我们轻松地修改现有代码,类似于活字印刷中只需要更换需要更改的部分。这种能力对于软件开发至关重要,尤其是在需求变更频繁的...

    戏说23种设计模式 基于GOF的设计模式

    #### 13. 责任链模式(Chain of Responsibility) 责任链模式允许多个处理者处理请求。请求沿着处理者链传递,直到其中一个处理者处理它为止。这种模式通常用于处理事务流程或消息传递。例如,在处理用户请求时,...

    戏说国学.doc

    戏说国学.doc

    幼儿园教案2021-幼儿园大班歌唱教案:戏说脸谱.doc

    幼儿园教案2021-幼儿园大班歌唱教案:戏说脸谱.doc 本教案旨在通过京剧《戏说脸谱》的唱歌活动,培养幼儿对中国国粹的认识和喜爱,提高幼儿的音乐能力和艺术鉴赏力。通过活动,幼儿可以初步学习京剧《戏说脸谱》的...

    戏说绩效工资.doc

    戏说绩效工资.doc

    持续集成之戏说Check-inDance

    管Thoughtworks的首席科学家Martionfolwer为“持续集成”下了定义,但由于自身背景与经历的不同,每个人对其都有不同的理解。从狭义上讲,持续集成可以认为是一种基于某种或者某些变化对软件系统进行的经常性的构建...

    戏说TCP网络编程.doc

    戏说TCP网络编程.doc

    kangle反向代理linux安装包

    它在Linux操作系统上运行,能够帮助用户实现高效的数据传输和负载均衡。本安装包"Kangle-3.5.8"提供了在Linux系统上部署Kangle反向代理的所需文件。 在了解如何使用这个安装包之前,我们先来深入理解反向代理的基本...

    戏说地沟油学习教案.pptx

    戏说地沟油学习教案.pptx

Global site tag (gtag.js) - Google Analytics