Linux输入设备多驱动处理 (linux输入设备有多个驱动)

一、简介

随着计算机技术的不断发展,人们在使用计算机处理各种任务时需要不断地与计算机进行交互。输入设备作为与计算机交互的重要方式之一,在计算机系统中担任着重要的角色。Linux作为一款自由、开放源码的操作系统,存在着许多不同的输入设备驱动程序,针对输入设备的多样性,Linux输入设备的多驱动处理是非常重要的。

二、基础知识

输入设备是指人们通过键盘、鼠标、触摸屏等设备向计算机发送信息和指令的设备。输入设备的使用需要有对应的驱动程序来实现设备与计算机的交互。Linux输入设备驱动可以简单分为两种类型:字符设备驱动和输入设备驱动。

字符设备驱动是一种读写数据的设备驱动,字符设备驱动会将输入设备上的按键值转换为简单的文本型字符,并通过与驱动程序通讯的接口将该字符传递给用户空间。

输入设备驱动则是一种特殊的字符设备驱动,专门用于与输入设备进行交互。输入设备驱动将输入设备的数据转换为具有特定格式的内核事件,并通过内核事件接口传递给用户空间。

输入设备驱动包含了下面的概念:

– 输入设备的描述:输入设备驱动程序需要对输入设备进行描述,包括设备名称、设备类型和设备的详细信息。

– 输入设备主动事件:输入事件是输入设备传送给系统的事件。

– 中断处理:当输入设备生成事件时,在系统中断,中断处理程序将事件从输入设备中读出。

– 内核事件接口:内核事件接口用于将事件传递给用户空间。

– 用户态事件处理:用户态应用程序通过读取内核事件接口获得内核事件,并执行需要的操作。

三、多驱动处理

在现代的Linux系统中,存在着越来越多不同类型的输入设备,例如鼠标、键盘、触摸屏等。因此,对于各种输入设备的多驱动处理显得尤为重要。

多驱动处理的实现需要做到以下点:

– 驱动程序的自动加载:对于不同的输入设备,我们需要不同的驱动程序来实现对它们的交互。因此,在使用输入设备时,需要自动加载相应的驱动程序。

– 输入设备的统一管理:输入设备可以有多种不同的驱动程序,它们可以同时对同一设备进行操作。因此,需要对输入设备进行统一管理,使其能够正确地与多个驱动程序进行交互。

– 驱动程序的共享:多个应用程序可能需要同时使用同一个输入设备的多个不同事件,因此,需要实现驱动程序之间的信息共享。

Linux内核提供了一种多驱动处理机制来实现对输入设备的统一管理和驱动程序的共享。这种机制基于输入设备的总线,每个输入设备都会被挂在相应的总线上。

对于输入设备的自动加载,Linux内核提供了一个称为”驱动模块自动加载”(Automatic Module Loading)的机制。当检测到新设备时,内核会自动检查它所连接的总线和设备类型,并自动加载相应的设备驱动。

对于输入设备的统一管理和驱动程序的共享,Linux内核提供了一种事件接口来实现。用户空间应用程序使用事件接口读取输入设备产生的事件,不同的输入设备驱动程序通过事件接口注册回调函数,实现不同事件的处理。

四、

在现代计算机系统中,输入设备作为一种重要的交互方式,在系统设计中占据着很重要的地位。Linux系统作为一款成熟的操作系统,对于不同类型的输入设备提供了多种驱动程序。对于多种不同类型的驱动程序,Linux内核提供了一种多驱动处理机制来实现对输入设备的统一管理和驱动程序的共享。这种机制的实现,使得使用输入设备的操作更加方便和高效。

相关问题拓展阅读:

如何在嵌入式LINUX中增加自己的设备驱动程序

您好,这样的情况建议您下载最新版本的驱动精灵,或是直接在线升级一下驱动精灵。希望可以帮到您。

Linux驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另李指一种是编译成模块以供动态加载。由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用inod/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_OB+=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

并且在/uclinux/appsrc/下运行make,生成新的Romdisk.s19文件。

到这里,在UCLINUX中增加设备驱动程序的工作可以说是完成了,只要将新的linux.bin与Romdisk

嵌入式linux技术

嵌入式Linux是按照嵌入式操作系统的要求而设计的一滚轮种小型操作系统,它由一个Kernel(内核)及一些根据需要进行定制的系统模块组成。Kernel一般只有几百kB左右,即使加上其它必须的模块和应用程序,所需的存储空间也很小。它具有多任务、多进程的系统特征,有些还具有实时性。一个小型的嵌入式Linux系统只需要引导程序、Linux微内核、初始化进程3个基本元素。运行嵌入式Linux的CPU可以是x86、Alpha、Sparc、MIPS、PPC等。与这些芯片搭配的主板都很小,通常只有一张PCI卡大小,有的甚至更小。嵌入式Linux所需的存储器不是软磁盘、硬盘、Zip盘、CD-ROM、DVD这些众所周知的常规存储器,它主要使用Rom、CompactFlash、M-Systems的DiskOnChip、Sony的MemoryStick、IBM的MicroDrive等体积极小(与主板上的BIOS大小相近),且存储容量不太大的存储器。它的内存可以使用普通的内存,也可以使用专用的RAM。

与其它嵌入式操作系统相比,Linux的源代码是开放的,不存在黑箱技术。Linux作为一种可裁剪的软件平台系统,很可能发展成为未来嵌入式设备产品的绝佳资源。Linux与生俱来的优秀网络血统更为今后的发悉坦展铺平了一条宽广平坦的大路。因此,在保持Linux内核系统更小、更稳定、更具价格竞争力等优势的同时,对系统内核进行实时性优化,更加使之能够适应对工业控制领域高实时性的要求。这也正是嵌入式linux操作系统在嵌入式工控系统中的发展所在。同时也使Linux成为嵌入式操作系统中的新贵。

标准的Linux内核通常驻留在内存中,每一个应用程序都是从磁盘运到内存上执行。当程序结束后,它所占用的内存就被释放,程序就被下载了。而在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,一是在一个简单的系统里,当系统启动后,内核和所有的应用程序都存在内存里。这是大多数传统的嵌入式系统的工作模式,同样Linux。第二种就是linux所特有的功能,因为Linux已经大陆信有能力“加载”和“卸载”程序,因此,一个嵌入式系统就可以利用它来节省内存。一个比较典型的系统有大约8MB到16MB的闪存和8MBRAM�而闪存可以被用作文件系统。用闪存驱动程序作为从闪存到文件系统的界面就是一种选择。当然,也可以用一个闪存磁盘。用闪存来摆脱系统对一个磁盘的需求(依赖)具有DiskOnChip技术以及CmopactFlash卡等方式。

用来连接FlashMemory和文件系统的程序都以文件形式存储在Flash文件中,需要时可以装入内存,这种动态的、根据需要加载的能力是支持其它一系列功能的重要特征。它能使初始化代码在系统引导后被释放。实际上,Linux同样还有很多内核外运行的公用程序,这些程序通常在初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式一个接一个地按顺序运行。这样,相同内存空间可以被反复使用以“召入”每一个程序,就象系统引导一样。这样可以节省内存,特别是那些配置一次以后就不再更改的网络堆栈。如果将Linux可加载模块的功能包括在内核里,驱动程序和应用程序就都可以被加载。由于它可以检查硬件环境并且为硬件装上相应的软件,从而消除了用一个程序占用许多FlashMemory来处理多种硬件的复杂性。另外,软件的升级更加模块化,可以在系统运行时在Flash上升级应用程序和加载驱动程序,其配置信息和运行时间参数可以作为数据文件储存在Flash中。

嵌入式工业控制网络的实现方案

基于嵌入式linux的工控系统以嵌入式微处理器为核心来运行嵌入式Linux操作系统。应用程序可通过网络进行更新,并可通过键盘进行人机对话,数据可通过LCD现场显示,重要数据可用文件形式保存在Flash等闪存存储器中;数据和报警信息可通过串口向上位机传输,也可以通过以太网向工业以太网或Inernet发布,用户还可通过网络实现远程监控和远程维护。更为关键的是,可充分利用Internet上已有的软件和协议(如:ftp,http以及Apache�PHP�MySQL等应用程序)迅速搭建前台数据采集系统,以实现测控系统和后台管理系统的通讯。图1所示是这种实现方案的系统框图。这种方式的优点有:

(1)不需专用的通信线路即可用现成的INTER-NET网络将数据传送到任何地方。

(2)不仅能够传递数据信号,也可以传递音频和图像信号。

(3) 由于目前的INTERNET协议是现成和公开的,因此,利用大到几十兆的 Microsoft IE浏览器,或小到只有600kB的Mosaic浏览器都可以对网络数据进行读取。

11 根文件渣含系统并添或梁察加自己的程序衫茄

关于linux输入设备有多个驱动的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux输入设备多驱动处理 (linux输入设备有多个驱动)