⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 first_report.html

📁 USB驱动使用比较详细的一个例子
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>  <meta http-equiv="content-type" content="text/html; charset=GB2312">  <title>First Report</title></head><body><pre></pre><div style="text-align: center;"><big><big style="color: rgb(255, 0, 0); font-weight: bold;"><big><big>开 题 报 告</big></big></big></big><br> </div><pre>	<big><big style="font-weight: bold; color: rgb(102, 102, 204);">毕业设计课题:</big>		实现一个事实上的USB设备及其GNU/Linux驱动程序 并相关内核代码的分析		<big style="font-weight: bold; color: rgb(102, 102, 204);">关键词:</big>		1 USB设备		2 Linux驱动程序		3 内核		<big style="color: rgb(102, 102, 204);"><span style="font-weight: bold;">破题分析:</span></big>		1 USB虽然在技术上并没有什么太令人激动的地方,但其设计者显然借鉴了计算机网络所使用的某些设计原则。比如分层。然而这也使得设计一个USB外围设备不再能够仅仅应用接口电路级的知识——为了处理复杂的USB协议,任何一个USB外设必须也是“智能”的		  		  在这个项目中,可能采用Cypress公司提供的CY7C63xxx系列单片机,该片支持USB接口及包括有专为USB优化的指令,同时提供两组通用的I/O端口。需要完成的工作是:按芯片手册设计好电路并完成使用汇编语言的固件代码,理解USB关键协议。基于USB1.1,并且不打算使用USB2.0			*对“事实上”一词的解释:也许就是一个可以软件控制的灯。但我希望“最终”产品会有一些通用的输入和输出模块,比如光/热探测头,比如小风扇/空调遥控等等,或许那时她的名字是“USB-Mini-Nurse”			*整个项目并没有工程/学术背景,但我以为毕业设计毋须过于功利,重要的是有意思并且能够提高水平				2 和USB相比,Linux带给我们更多心动。一个真正的黑客,掌握并灵活运用Linux内核是最基础但也是最能傲世的能力。希望能通过这个项目初步掌握编写核心代码的技术		  		  在这个项目中,会采用模块机制完成驱动程序。需要完成的工作有:学习基本的模块技术,学习驱动程序的概念,学习USB相关的核心调用,完成驱动程序的0.1版本。基于Kernel version 2.4.25,并可能向2.6移植		3 对内核的分析是大拿们的专利,因此除了尽力而为外,不能再说什么了			<big style="font-weight: bold; color: rgb(102, 102, 204);">可能遇到的问题:</big>		因为都是从头学起,所以几乎全是问题,否则我就不会选择此作为毕业设计了。择其要者:		1 对于硬件开发我一无所知,不知道如何下手/调试,甚至不知道如何购买所需要的零件		2 对于USB外设,似乎开发它比使用它要困难得多		3 对于软件方面,这是重点,至少想重点研究,但不知道对硬件问题的处理是否会影响它	<big style="font-weight: bold; color: rgb(102, 102, 204);">	细节:</big>		1 内核模块 .vs. 用户空间程序			*从名字上就可以看到第一个不同:前者运行在内核空间,而后者运行在受限的用户空间			*以Unix哲学的观点,前者通常提供机制而后者则部署策略,机制与策略的分离是隐藏在Unix设计后最好的思想之一(另一些可以参考《the Art of Unix Programming》)			*前者在从硬盘向内存转移后向操作系统链入某种机制(函数和变量)以便为其它程序服务,后者则在加载后顺着main()一直前行并在到达位部后退出,其间通过不同的系统调用顺序达到部署策略的目的			*在核心代码里不时使用一个人们已经忘却但还存在的C语言指令:goto!此常用于处理错误		2 作为驱动程序的Linux动态可加载内核模块			*提供机制(而非策略)正是驱动程序的全部			*编写一个模块并没有想象的那么困难,困难在于理解设备并优化其性能					3 一个真正的内核模块(还不能成为驱动,它的功能仅仅是在被加载和移除时叫唤一声):			#define MODULE			#include &lt;linux/module.h&gt;			int init_module(void)				{printk(&quot;&lt;1&gt;Hi! This is kernel talk to you.\n&quot;);return 0;}			void cleanup_module(void)				{printk(&quot;&lt;1&gt;Bey! Welcome to be a Hacker.\n&quot;);}		与用户空间程序的又一个不同是,模块在载入时才被连接(至内核而非libc),因此最终的编译指令一定含参数-c		4 设备号:			对计算机而言,更擅长的是整数而非字符串。传统的Unix为每一类经典设备文件分配了一个固定的整数,用来			钩上相应的驱动程序。次设备号只是由那些主设备号已经确定的驱动程序使用,内核的其他部分不会用到它,			而只是把它传递给驱动程序:一个驱动程序控制多个设备是常有的事情,而次设备号为驱动程序提供了一个区			分设备的方法。					5 第一个重要的数据结构:file_struct			*Unix中,everything is file			*设备也不例外			*设备驱动程序实现了系统可能对该设备的所有操作			*file_struct中的每个元素正是指向这些操作的函数指针			*最终调用这些操作的系统调用函数被命名为open/read/write...			*对不同的字符设备文件进行某种同名操作(比如对MODEM和TTY分别进行open),操作系统根据register_chrdev的定义和file_operations的实现来作出具体执行何代码的判断		6 第二个重要的数据结构:file			*不是ANSI C中的FILE,file存在于内核空间并由内核自行维护			*file结构代表一个Unix广义文件			*当执行open系统调用时,系统创建该结构实例,并在close时刷新或释放该结构实例			*驱动程序毋须填写file结构,readonly		7 关于USB协议及设备在开题报告中的体现,将另附一文(Cypress芯片手册的翻译)	<big style="color: rgb(102, 102, 204);"><span style="font-weight: bold;">	参考文献:</span></big>		1 Alessandro Rubini和Jonathan Corbet著 魏永明/骆刚和姜君译 《Linux设备驱动程序》第二版 中国电力出版社 2002		2 Peter Jay Salzman和Ori Pomerantz著 《Linux Kernel Module Programming Guide》2.4.0 LDP 2003		3 Detlef Fliegl著 《Programming Guide for Linux USB Device Drivers》  http://usb.cs.tum.edu 2000		4 Eric Steven Raymond著 《The Art oh Unix Programming》  Internet FAQ Archives  2003		5 毛德操和胡希明著 《Linux内核源代码情景分析》  浙江大学出版社 2002				6 》http://www.cypress.com《		7 》the documents and sources of Linux Kernel《		8 》http://www.ibm.com/developerwork/cn《											<span style="color: rgb(51, 204, 0); font-style: italic;">.end</span></big></pre></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -