linux嵌入式驱动(ubuntu安装usb驱动安装)
如何在嵌入式LINUX中增加自己的设备驱动程序
Linux驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而这里只介绍将设备驱动程序静态编译进uClinux内核的方法。
下面以UCLINUX为例,介绍在一个以模块方式出现的驱动程序test.c基础之上,将其编译进内核的一系列步骤:
(1)改动test.c源带代码
第一步,将原来的:
#include
#include
char kernel_version[]=UTS_RELEASE;
改动为:
#ifdef MODULE
#include
#include
char kernel_version[]=UTS_RELEASE;
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
第二步,新建函数int init_test(void)
将设备注册写在此处:
result=register_chrdev(254,"test",&test_fops);
(2)将test.c复制到/uclinux/linux/drivers/char目录下,并且在/uclinux/linux/drivers/char目录下mem.c中,int chr_dev_init()函数中增加如下代码:
#ifdef CONFIG_TESTDRIVE
init_test();
#endif
(3)在/uclinux/linux/drivers/char目录下Makefile中增加如下代码:
ifeq($(CONFIG_TESTDRIVE),y)
L_OBJS+=test.o
Endif
(4)在/uclinux/linux/arch/m68knommu目录下config.in中字符设备段里增加如下代码:
bool'support for testdrive' CONFIG_TESTDRIVE y
(5)运行make menuconfig(在menuconfig的字符设备选项里你可以看见我们刚刚添加的'support for testdrive'选项,并且已经被选中);make dep;make linux;make linux.text;make linux.data;cat linux.text linux.data> linux.bin。
(6)在/uclinux/romdisk/romdisk/dev/目录下创建设备:
mknod test c 254 0
并且在/uclinux/appsrc/下运行make,生成新的Romdisk.s19文件。
到这里,在UCLINUX中增加设备驱动程序的工作可以说是完成了,只要将新的linux.bin与Romdisk
嵌入式Linux设备驱动开发详解的目录
第1章嵌入式系统与驱动程序1
本章目标1
1.1嵌入式系统概述1
1.1.1嵌入式系统的概念1
1.1.2嵌入式系统的特点2
1.1.3嵌入式系统的体系结构2
1.2嵌入式处理器介绍4
1.2.1嵌入式处理器分类4
1.2.2ARM概述5
1.2.3ARM系列芯片简介5
1.3嵌入式操作系统介绍7
1.3.1主流嵌入式操作系统7
1.3.2嵌入式系统的发展状况8
1.3.3嵌入式Linux介绍8
1.3.4嵌入式系统开发环境的建立9
1.3.5嵌入式软件开发10
1.4嵌入式Linux驱动程序12
1.4.1嵌入式Linux的内核空间和用户空间12
1.4.2嵌入式Linux的文件系统12
1.4.3嵌入式Linux的设备管理14
1.4.4嵌入式Linux的驱动程序16
1.5知识索引20
1.6思考与练习21
第2章简单的字符设备驱动程序23
本章目标23
2.1嵌入式Linux字符设备的驱动程序结构23
2.1.1嵌入式Linux驱动程序常用的头文件24
2.1.2File_operations结构体24
2.1.3字符设备驱动程序的入口25
2.1.4驱动程序的设备注册26
2.2设备驱动程序中的具体问题27
2.2.1I/O端口28
2.2.2内存操作29
2.2.3中断处理29
2.3LED的驱动程序实例及测试30
2.3.1LED I/O端口设置30
2.3.2LED硬件电路设计32
2.3.3LED驱动程序设计33
2.3.4LED测试程序设计36
2.4嵌入式Linux中断处理驱动程序及测试37
2.4.1中断处理过程37
2.4.2中断向量表39
2.4.3中断的处理模式39
2.4.4中断的优先级40
2.4.5中断的嵌套40
2.4.6中断源的扩展40
2.4.7中断控制寄存器的设置41
2.5按键中断的驱动程序实例45
2.5.1按键中断的电路设计45
2.5.2按键中断的驱动程序设计45
2.6知识索引48
2.7思考与练习49
第3章数字显示驱动程序50
本章目标50
3.1数字显示器50
3.1.1数码管简介50
3.1.2数码管的分类51
3.1.3数码管显示原理51
3.2数码管显示电路的硬件设计52
3.2.1译码器的使用52
3.2.2数码管的驱动方式53
3.2.3串/并变换的译码设计55
3.3数码管驱动程序实例56
3.3.1驱动程序的初始化和卸载模块56
3.3.2文件操作结构模块57
3.3.3数码管的打开模块57
3.3.4数码管的读写模块58
3.3.5数码管的I/O控制模块58
3.3.6数码管的退出模块58
3.3.7驱动程序的模块加载和卸载59
3.4数码管显示电路测试程序设计60
3.4.1数码管测试设计60
3.4.2数码管测试程序60
3.4.3数码管测试效果61
3.5知识索引61
3.6思考与练习62
第4章键盘驱动程序63
本章目标63
4.1键盘接口概述63
4.1.1键盘的分类63
4.1.2键盘的防抖65
4.1.3键盘的扫描65
4.1.4键盘的缓冲算法67
4.2键盘的驱动设计实例67
4.2.1锁存器和缓冲器扩展键盘67
4.2.2锁存器和缓冲器的接口68
4.2.3锁存器和缓冲器扩展键盘驱动程序设计69
4.2.4锁存器和缓冲器扩展键盘测试程序设计71
4.3智能控制芯片HD7279扩展键盘72
4.3.1HD7279的电路设计72
4.3.2HD7279的指令介绍73
4.3.3HD7279的串行接口74
4.3.4HD7279的驱动程序设计75
4.3.5HD7279的测试程序设计84
4.4知识索引85
4.5思考与练习85
第5章A/D驱动程序86
本章目标86
5.1A/D转换的过程86
5.1.1采样和保持86
5.1.2量化和编码88
5.1.3ADC的分类89
5.2A/D转换器的基本原理89
5.2.1逐次逼近型A/D转换器89
5.2.2双积分型A/D转换器90
5.2.3V/F和F/V型转换器93
5.2.4其他A/D转换器95
5.3A/D转换器接口技术97
5.3.1ADC的主要参数及意义97
5.3.2ADC的电路选择方法98
5.3.3ADC实际应用中的问题99
5.4S3C2410 A/D转换驱动设计实例99
5.4.1S3C2410的A/D转换电路99
5.4.2S3C2410X的A/D转换控制寄存器100
5.4.3S3C2410X的A/D转换数据寄存器101
5.4.4S3C2410X中A/D转换驱动程序的设计102
5.4.5S3C2410X中A/D转换测试程序的设计105
5.5知识索引106
5.6思考与练习107
第6章D/A驱动程序108
本章目标108
6.1D/A的原理介绍108
6.1.1D/A转换的概念及基本原理108
6.1.2电子模拟开关109
6.1.3D/A转换器的基本结构110
6.1.4D/A转换的静态参数114
6.1.5D/A转换的动态参数115
6.2D/A转换的硬件电路设计116
6.2.1D/A转换的接口技术116
6.2.2D/A转换芯片介绍117
6.2.3D/A转换的电路设计118
6.3D/A转换器的驱动程序实例118
6.3.1D/A驱动程序中的宏定义118
6.3.2D/A的模块加载118
6.3.3D/A转换器的文件操作模块119
6.3.4D/A转换器的读写控制模块120
6.3.5D/A转换器的打开、退出模块120
6.4测试程序的设计120
6.4.1D/A测试程序中的宏定义121
6.4.2D/A测试程序的主函数121
6.4.3D/A测试程序中的功能函数122
6.4.4D/A测试程序中的功能打印函数123
6.4.5D/A测试程序中的波形生成函数123
6.4.6D/A测试程序的效果124
6.5知识索引125
6.6思考与练习125
第7章LCD驱动程序126
本章目标126
7.1LCD显示器概述126
7.1.1液晶126
7.1.2LCD显示屏的背光127
7.1.3LCD显示器的分类127
7.1.4LCD的显示原理127
7.1.5LCD的驱动方式130
7.1.6LCD的常用指标131
7.2LCD的显示接口131
7.2.1灰度STN的时序132
7.2.2彩色STN的时序133
7.2.3TFT的时序134
7.3嵌入式处理器的LCD控制器136
7.3.1LCD控制器136
7.3.2LCD控制器的设置137
7.3.3LCD的字符显示缓存139
7.4LCD的驱动程序设计140
7.4.1LCD驱动程序相关的宏定义140
7.4.2LCD驱动程序的底层操作函数142
7.4.3LCD驱动程序提供的API145
7.4.4LCD驱动程序的模块化加载151
7.4.5LCD的测试程序152
7.5基于Framebuffer的LCD驱动程序实例155
7.5.1Framebuffer概述155
7.5.2LCD的电路连接155
7.5.3Framebuffer设备驱动程序的结构156
7.5.4Framebuffer设备驱动程序的设计159
7.5.5Framebuffer设备测试程序的设计164
7.5.6嵌入式Linux常用的GUI166
7.6知识索引166
7.7思考与练习167
第8章触摸屏驱动程序168
本章目标168
8.1触摸屏概述168
8.2触摸屏的分类168
8.2.1电阻技术触摸屏168
8.2.2表面声波技术触摸屏169
8.2.3电容电感技术触摸屏170
8.2.4红外线技术触摸屏170
8.3触摸屏的特性171
8.3.1透明度和色彩失真171
8.3.2反光性171
8.3.3清晰度171
8.3.4漂移172
8.3.5检测和定位172
8.4触摸屏的硬件电路设计172
8.4.1电阻式触摸屏的电路原理172
8.4.2电阻式触摸屏原点的定位173
8.4.3电阻式触摸屏的电路连接174
8.5触摸屏的驱动程序实例176
8.5.1触摸屏接口的模式176
8.5.2A/D转换和触摸屏寄存器的设置177
8.5.3触摸屏的坐标179
8.5.4触摸屏的电路连接180
8.5.5触摸屏的驱动程序接口181
8.6测试程序的设计182
8.6.1触摸屏的数据定义183
8.6.2触摸屏的数据处理183
8.6.3触摸屏的运行测试185
8.7知识索引186
8.8思考与练习187
第9章CAN总线驱动程序188
本章目标188
9.1CAN总线接口设计188
9.1.1CAN总线概述188
9.1.2CAN的工作特点及主要优点189
9.1.3CAN总线的电气特征和MAC帧结构189
9.2嵌入式处理器上CAN总线接口的扩展190
9.2.1SJA1000简介190
9.2.2SJA1000扩展191
9.3SJA1000扩展CAN总线接口的设计192
9.3.1CAN控制器SJA1000的操作模式192
9.3.2CAN控制器SJA1000的特征功能193
9.3.3CAN控制器SJA1000的Basic CAN模式设置194
9.4SJA1000扩展CAN总线接口的通信196
9.4.1通过CAN总线建立通信的步骤196
9.4.2SJA1000的初始化196
9.4.3驱动程序的结构设计198
9.4.4驱动程序init、exit、open、close函数的实现200
9.4.5驱动程序read、write函数的实现201
9.4.6驱动程序interrupt、ioctl函数实现202
9.4.7测试程序的编写202
9.5驱动程序的加载204
9.6知识索引204
9.7思考与练习205
第10章IIC总线驱动程序206
本章目标206
10.1IIC总线概述206
10.1.1IIC总线介绍206
10.1.2IIC总线引入的原因206
10.1.3IIC总线的特点206
10.1.4IIC总线的基本结构207
10.1.5IIC总线的术语207
10.1.6IIC总线的工作208
10.1.7IIC总线的竞争仲裁209
10.1.8IIC总线的工作流程210
10.2嵌入式处理器的IIC接口211
10.2.1IIC总线控制寄存器212
10.2.2IIC总线控制/状态寄存器213
10.2.3IIC总线地址寄存器214
10.2.4IIC总线移位数据寄存器214
10.2.5S3C2410中与IIC对应的I/O端口215
10.3基于IIC的键盘芯片应用216
10.3.1ZLG7290的功能217
10.3.2ZLG7290的控制方式218
10.3.3ZLG7290的寄存器218
10.3.4ZLG7290的通信接口219
10.3.5ZLG7290的指令介绍219
10.4IIC总线驱动程序实例221
10.4.1ZLG7290的电路连接221
10.4.2ZLG7290的通信流程223
10.4.3ZLG7290驱动中变量的定义225
10.4.4ZLG7290驱动中实时时钟的改变226
10.4.5ZLG7290和IIC寄存器的初始化227
10.4.6ZLG7290驱动程序的模块化228
10.4.7ZLG7290的文件操作结构228
10.5IIC总线的测试程序230
10.6知识索引231
10.7思考与练习231
第11章音频总线驱动程序232
本章目标232
11.1音频总线接口概述232
11.1.1音频的采样精度233
11.1.2音频编码233
11.2IIS音频总线接口233
11.2.1IIS总线的物理连接233
11.2.2IIS的总线协议234
11.2.3IIS总线的硬件设计235
11.2.4IIS总线的寄存器236
11.3AC97音频总线接口239
11.4IIS总线的驱动程序设计240
11.4.1音频设备基础知识240
11.4.2音频设备文件241
11.4.3WAV声音文件243
11.4.4音频设备和驱动程序的通信243
11.4.5设备的初始化和加载244
11.4.6DMA的操作和宏定义246
11.4.7audio设备文件的操作248
11.4.8mixer设备文件的操作260
11.5音频驱动程序的测试262
11.6知识索引262
11.7思考与练习263
第12章IDE接口驱动程序264
本章目标264
12.1IDE接口概述264
12.1.1硬盘知识介绍264
12.1.2IDE接口标准267
12.1.3IDE接口的传输模式269
12.1.4IDE接口寄存器269
12.2IDE接口驱动程序的移植271
12.2.1嵌入式Linux下IDE驱动程序接口271
12.2.2嵌入式Linux下IDE驱动程序272
12.2.3IDE硬盘的读/写操作274
12.3IDE驱动程序测试282
12.3.1磁盘文件系统简介283
12.3.2IDE分区测试283
12.4知识索引285
12.5思考与练习285
第13章闪存芯片的驱动程序286
本章目标286
13.1闪存芯片概述286
13.1.1闪存芯片的物理特性286
13.1.2嵌入式文件系统概述289
13.1.3MTD体系介绍289
13.1.4Flash专有名词291
13.2NAND Flash291
13.2.1NAND Flash的结构291
13.2.2NAND Flash的操作292
13.2.3NAND Flash控制器294
13.2.4NAND Flash的时序296
13.2.5NAND Flash的驱动程序实例297
13.3NOR Flash301
13.3.1NOR Flash的结构301
13.3.2NOR Flash的操作302
13.3.3NOR Flash的驱动程序实例303
13.4基于闪存的文件系统307
13.5知识索引309
13.6思考与练习310
第14章USB设备驱动程序311
本章目标311
14.1USB接口概述311
14.1.1USB系统311
14.1.2USB的电气特性312
14.1.3USB总线的拓扑结构313
14.1.4USB的通信协议313
14.2嵌入式系统中USB的使用315
14.2.1OHCI概述315
14.2.2Host接口硬件设计316
14.3嵌入式系统中USB设备的驱动程序设计316
14.3.1
嵌入式是先学习linux内核还是先学习驱动
先学习linux
嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,同时也是当今IT领域仅存的几个金领职位之一。当前的中国IT人才面临严重的“后继乏人”,而且这种缺口最大的,就是高级IT人才。如果你从事的IT培训不专业,面对竞争越来越激烈的职场,基本找不到工作。据专家预测,嵌入式每年人才缺口在30万左右。
嵌入式开发学习具体步骤如下:
基础学习期 I:·Linux基础操作、基本服务配置及使用
·Shell编程
基础学习期II:·C语言
·数据结构、(选修)C++、QT
基础进阶:·Linux高级编程、Socket网络编程
·TCP/IP
嵌入式:·嵌入式汇编
·嵌入式体系结构
嵌入式晋级提升:·Linux内核
·Linux驱动开发
经典学习案例:
GPIO驱动
RTC时钟驱动
WatchDog驱动
Udev移植
触摸屏输入设备驱动
LCD显示设备驱动
DMA驱动
音频设备驱动
Nand Flasha块设备驱动
网络设备驱动
现在,国内似乎在进行一个全民学习嵌入式的运动,但据了解,很多人在整个学习的过程中,由于某些技术领域的空白或者是技术尚未成熟,再加上个人学习方法不正确,给个人的学习造成了极大的阻碍,遇到这种情况该如何解决?根据本人有限的学习经验,给学习嵌入式的以下建议。
给学习嵌入式者10点建议:
遇到问题,首先进入baidu.com、www.google.com(或是其他搜索引擎)搜索一下,任何一个嵌入式工程师都不敢否认,这是学习嵌入式最好的老师!
尽可能多的论坛,遇到问题,及时发贴,情况紧急的时候,可以在不同的论坛同时发贴,这样,并行处理你的问题也许会解决得更快些。
尽可能多的结交嵌入式高手,最好是在公司上班的嵌入式工程师,他们有一个优势:了解市场,了解业界的发展动态.和他们多混混,对尚未上班的学习者来说,是非常有必要的。
要经常进入一些好的嵌入式网站,尤其是一些国外的网站,去看看嵌入式的发展动态,并且,要把这些网站都收集起来。
如果可能,我建议大家在网上订一下电子刊物,这些电子刊物是按时发到你邮箱的,那些资讯都是最新的,可以说是很前卫的了.....如果资金允许,建议报名参加嵌入式培训班,在培训公司可以很快的入门提高,这样可以更好的提高学习效率。
相信自己的选择,相信自己行业的发展前景,要对自己的选择和自己的行业有浓厚的兴趣,这一点做不到,你就很难学到很高深的层次!
追求要执着!刚开始学习嵌入式系统,肯定会遇到很多问题,我当时也是这样,学了三个多月,好像一点进展都没有,我在怀疑:难道我不适合搞嵌入式?当时我也想过放弃,但心里太不甘心了,脚都踏出了一只,我不能就这样屈了!于是就硬上,不断的琢磨....(现在,终于知道什么是嵌入式linux了,哈哈....)
不要对自己要求过高,只要你比昨天进步了一点,你就离成功又近了一步!学习嵌入式也忌浮气燥(其实这一点,我最有感触!),也就是要踏实。
万丈高楼平地起,不要忽略了低层的东西,你越是学习到高层的技术,越是发觉低层的东西有用,这些大家以后会有所体会的!我大一学习51单片机的时候,感觉它没什么用处,大二学习ARM处理器,才知道,没有51的基础,可能还不知道要多花多少时间才能搞懂ARM的硬件。
系统的选型的问题.现在的开源操作系统已经很多了,并且也做得非常成熟,初学者也会为此而烦恼.目前较为流行的嵌入式操作系统有:linux,winCE,VxWork,uC/OS2等等....主要区别在于实时性的问题.如果你是搞自控(像我学习的专业,不过我不玩控制的....),学习实时性高一点的操作系统更有帮助,如VxWork.如果你想以后搞民用产品,如手机,机顶盒,终端设备之类的,学习linux,winCE这些方便于多任务运行的操作系统较好!建议你在学习之前先了解该系统的市场占有率,学东西得看看学完它之后到底有没有作为啊,否则,你就一辈子只有自己玩系统啰...
来源: