既然知道了怎么编写一个模块,那么编写设备驱动程序自然也就不难了.我相信,每一个会写模块的人都不会觉得写设备驱动有困难.对自己行不行不确定的话,可以去问一下葛优,他准说:"(神州行),我看行."

真的,我没说假话.写驱动不是什么难事,你完全可以很自信的说,你已经可以写Device Driver了.对,没错,飘柔,就这么自信.

前面说了每一个模块都是以module_init开始,以module_exit结束,那么我们就来看一下U盘的驱动的这个模块.在茫茫人海中,我们很容易找到这个文件:drivers/usb/storage/usb.c,在这个文件中又不难发现下面这段:

/***********************************************************************
   1056  * Initialization and registration
   1057  ***********************************************************************/
   1058
   1059 static int __init usb_stor_init(void)
   1060 {
   1061         int retval;
   1062         printk(KERN_INFO "Initializing USB Mass Storage driver.../n");
   1063
   1064         /* register the driver, return usb_register return code if error */
   1065         retval = usb_register(&usb_storage_driver);
   1066         if (retval == 0)
   1067                 printk(KERN_INFO "USB Mass Storage support registered./n");
   1068
   1069         return retval;
   1070 }
   1071
   1072 static void __exit usb_stor_exit(void)
   1073 {
   1074         US_DEBUGP("usb_stor_exit() called/n");
   1075
   1076         /* Deregister the driver
   1077          * This will cause disconnect() to be called for each
   1078          * attached unit
   1079          */
   1080         US_DEBUGP("-- calling usb_deregister()/n");
   1081         usb_deregister(&usb_storage_driver) ;
   1082 }
   1083
   1084 module_init(usb_stor_init);
   1085 module_exit(usb_stor_exit);

其实,module_init/module_exit只是一个宏,通常写模块的人为了彰显自己的个性,会给自己的初始化函数和注销函数另外起个名字,比如这里module_init(usb_stor_init)以及module_exit(usb_stor_exit)实际上就是告诉这个世界,真正的函数是usb_stor_init和usb_stor_exit.这种伎俩在Linux内核代码中屡见不鲜.见多了也就不必大惊小怪了,天要下雨娘要嫁人,随她去吧.我们下面当然就从usb_stor_init正式开始我们的探索之旅.

Linux那些事儿之我是U盘(4)想到达明天,现在就要启程相关推荐

  1. 【转】Linux那些事儿之我是U盘(4)想到达明天,现在就要启程

    既然知道了怎么编写一个模块,那么编写设备驱动程序自然也就不难了.我相信,每一个会写模块的人都不会觉得写设备驱动有困难.对自己行不行不确定的话,可以去问一下葛优,他准说:"(神州行),我看行. ...

  2. 《Linux那些事儿之我是USB》我是U盘(4)想到达明天现在就要启程

    既然知道了编写模块的方法,那么编写设备驱动程序自然也就不难了.我相信,每一个会写模块的人都不会觉得写设备驱动有困难. 真的,我没说假话,写驱动不是什么难事,你完全可以很自信地说,你已经可以写 设备驱动 ...

  3. linux 那些事儿之我是 u 盘,《Linux那些事儿之我是USB》.PDF

    <Linux 那些事儿之我是 USB> 作者:华清远见 第 1 章 Linux 那些事儿之我是 USB Core 专业始于专注 卓识源于远见 1 .引子 老夫子们痛心疾首地总结说,现代青年 ...

  4. Linux那些事儿之我是U盘(5)外面的世界很精彩

    看代码之前,我曾经认真的思考过这么一个问题,我需要关注的仅仅是drivers/usb/storage/目录下面那相关的3000多行代码吗?就是这样几个文件就能让一个个不同的U盘在Linux下面工作起来 ...

  5. 转载本论坛 (fudan_abc ) :linux那些事儿之我是u盘(16)冰冻三尺非一日之寒

    不是一天建成的 . 在让 U 盘工作之前 , 其实我们的驱动作了很多准备工作 . 我们继续跟着感觉走,storage_probe(),943行至948行,一系列的以init_*命名的函数在此刻被调用, ...

  6. Linux那些事儿之我是U盘(1)小城故事

    这个故事中使用的是2.6.10的内核代码.Linux内核代码目录中, 所有去设备驱动程序有关的代码都在drivers/目录下面,在这个目录中我们用ls命令可以看到很多子目录. localhost:/u ...

  7. Linux那些事儿之我是U盘--引子

    也许是在复旦养成了昼伏夜出的坏习惯,工作之后也总是很晚也不愿意睡.来到北京之后,开始听广播听都市之声的北京不眠夜.这个节目是从23点直到第二天凌晨一点,我常常是听完了才会睡觉.无论是北京还是上海,对我 ...

  8. Linux那些事儿之我是U盘(50)跟着感觉走(二)

    回到usb_stor_invoke_transport()中来,540行,还是老套路,又问是不是命令被放弃了,放弃了当然下面的就别执行了.goto Handle_Abort去. 546行,如果有错误, ...

  9. Linux那些事儿之我是U盘(51)光荣属于苹果,属于诺基亚,属于摩托罗拉,属于索尼爱立信

    这一节我们来分析一个在很多企业的产品中都存在的bug.写设备驱动是一件很实在的事情,你得根据实实在在的硬件来编写你的代码,如果你的硬件存在某种bug,那么你就要去fix它.如果你希望成为通用的驱动程序 ...

最新文章

  1. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件
  2. 【 C 】翻译与执行
  3. android入门程序源代码,安卓程序开发入门
  4. Go学习笔记—标准库Context
  5. 前端基础3-1——JavaScript
  6. 计算差分方程的收敛点_数值计算(五十九)热传导方程组的差分数值求解
  7. 设置防火墙规则,防止因为TCP第三次握手,系统自动返回包
  8. 灰鸽子门徒自曝抓肉鸡内幕
  9. oracle10g 操作系统,各版本操作系统ORACLE 10g 下载(包括windows和linux)
  10. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解
  11. 海底捞张勇:谈钱,才是对员工最好的尊重
  12. 【高级检索】现在还有人不会用百度的搜索语法?
  13. 职工考勤表(vba工作日自动填充批量打印)---源码在最后
  14. .net core添加word水印
  15. 安装fcitx五笔拼音
  16. Linux性能监控命令_nmon 安装与使用
  17. 玉米社:SEM百度竞价推广转化成本过高要如何处理?
  18. 考取叉车证在线模拟考试题库以及2019最新操作叉车工笔试题
  19. MySQL事务——万字详解
  20. hive 按行打印出截止日期和开始日期之间的日期

热门文章

  1. python打开上层文件
  2. sitemap 在线生成
  3. 【感恩】为做运维的重病老同事李静波寻求帮助
  4. 看了《我的白大褂》才明白,原来平安是福
  5. [原创]服装鞋帽企业配送中心优化方案 WMS仓储管理系统
  6. python自动生成ppt报告_把时间还给洞察,且看PPT调研报告自动生成攻略
  7. Django企业开发实战--by胡阳,学习记录1127
  8. android从相册或拍照获取照片第三方开源库TakePhoto
  9. 对于刚毕业的学弟学妹对即将要就业产生迷茫,下面我来为大家揭晓该如何选择!
  10. 使用Ballerina构建API网关