如何驱动一个硬件设备
❶ 简述设备驱动程序的功能
一、什么是驱动程序
驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”, 是一种可以使计算机和设备通信的特殊程序,可以 说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。
刚安装好的系统操作系统,很可能驱动程序安装得不完整。硬件越新,这种可能性越大。菜菜熊之前看到的“图标很大且颜色难看”就是没有安装好驱动的原因。
二、驱动程序的作用
硬件如果缺少了驱动程序的“驱动”,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武 之地。这时候,电脑就正如古人所说的“万事俱备,只欠东风”,这“东风”的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的 作用。
从理论上讲,所有的硬件设备都需要安装相应的驱动程序才能正常工作。但像CPU、内存、主板、软驱、键盘、显示器等设备却并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢?
这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就 可以被BIOS和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等 却必须要安装驱动程序,不然这些硬件就无法正常工作。
❷ 驱动程序如何定位硬件
这问题比较的理论高深啊,普通用户的话不需要考虑那么多,现在第三方驱动软件很多,都是自动的,比如360驱动大师或者驱动精灵都可以的
❸ 软件如何驱动硬件工作
软件如何控制硬件
软件在工作的时候也是实体,软件的实质就是电流信号,用电压的高低代表不同是信息,用这些电流信号去控制逻辑电路的通断,靠逻辑电路的通断来控制硬件的工作。
说到底软件就是起到一个开关信号的作用,开关要工作,必需保证硬件是加电的,没有接通电源的硬件是无法用软件来控制的。就好比没有插上电源的台灯,你怎么按开关都是不会亮的。
任何软件在运行前都要有一个将其转化为电流信号的实体化过程,你写在纸上的软件代码是永远也不能控制硬件的。早期电脑用人工接线输入程序,相当于用人体的力量将软件代码实体化为电信号;现在我们用的软盘、硬盘是通过磁头将程序代码转化为电信号,光盘需要通过光头将程序代码转化为电信号等等。
操作系统和驱动程序在其中起到什么作用?
操作系统:你进行的操作(例如QQ、音乐、视频、游戏等)都必须有操作系统的支持。所以说,操作系统是计算机里最接近计算机硬件的、最重要的软件!操作系统传统的定义是:操作系统是控制和管理计算机系统内各种硬件和软件资源、合理有效地组织计算机系统的工作,为用户提供一个使用方便可扩展的工作环境,从而起到连接计算机和用户的接口作用。
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱、键盘、鼠标等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。
❹ 如何编写驱动程序
代码:
#include<linux/mole.h>
#include<linux/kernel.h>
#include<asm/io.h>
#include<linux/miscdevice.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
//流水灯代码
#define GPM4CON 0x110002e0
#define GPM4DAT 0x110002e4
static unsigned long*ledcon=NULL;
static unsigned long*leddat=NULL;
//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)
static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)
{
int value=0;
int ret=0;
ret=_from_user(&value,buff,4);
//底层驱动只定义基本操作动作,不定义功能
if(value==1)
{
*leddat|=0x0f;
*leddat&=0xfe;
}
if(value==2)
{
*leddat|=0x0f;
*leddat&=0xfd;
}
if(value==3)
{
*leddat|=0x0f;
*leddat&=0xfb;
}
if(value==4)
{
*leddat|=0x0f;
*leddat&=0xf7;
}
return 0;
}
//文件操作结构体初始化
static struct file_operations g_tfops={
.owner=THIS_MODULE,
.write=test_write,
};
//杂设备信息结构体初始化
static struct miscdevice g_tmisc={
.minor=MISC_DYNAMIC_MINOR,
.name="test_led",
.fops=&g_tfops,
};
//驱动入口函数杂设备初始化
static int __init test_misc_init(void)
{
//IO地址空间映射到内核的虚拟地址空间
ledcon=ioremap(GPM4CON,4);
leddat=ioremap(GPM4DAT,4);
//初始化led
*ledcon&=0xffff0000;
*ledcon|=0x00001111;
*leddat|=0x0f;
//杂设备注册函数
misc_register(&g_tmisc);
return 0;
}
//驱动出口函数
static void __exit test_misc_exit(void)
{
//释放地址映射
iounmap(ledcon);
iounmap(leddat);
}
//指定模块的出入口函数
mole_init(test_misc_init);
mole_exit(test_misc_exit);
MODULE_LICENSE("GPL");

(4)如何驱动一个硬件设备扩展阅读:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏
你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。
❺ 一个硬件设备安装了多个驱动程序正常吗
这是完全正常的。
本来一个驱动程序就包含了很多不同的程序文件的。
这都是属于同一个驱动程序的文件,并不是安装了多个驱动程序。
你可以仔细看下,各个文件名都是不一样的。
❻ 驱动程序是怎么操作硬件设备的

这里以CreateFile API 为例,其自他操作设备的API类似。首先应用程序调用CreateFile Api,这个API是由Win32子系统的三大模块中的Kernel32.dll实现的。CreateFile函数会
调用Ntdll.dll中的NtCreateFile函数,其中NtCreateFile是未文档化的函数,最好不要直接调用
NtCreateFile 的作用是穿越用户模式的边界,进入到内核模式,这个步骤是通过软中断实现的。进入内核模式后,会调用系统服务函数,这里会调用同名的系统服务NtCreateFile。(同名函数,一个位于用户模式,一个位于内核模式)
NtCreateFile 系统函数调用通过I/O管理器,创建IRP并传输到设备的驱动程序中。IRP(I/O Request Package)即输入输出请求包,是驱动程序开发中重要的数据结构。驱动程序的运行,完全靠IRP驱动的。
驱动程序根据IRP,进行相应的操作。这些操作一般对设备的直接操作,例如对端口的读操作。对端口的读操作根据不同硬件平台实现方法有所不同,Windows 根据不同的硬件平台,会有不同的HAL(硬件抽象层).
来自网络。
❼ 驱动硬件设备的程序代码该如何写
不同配件的驱动编辑也不同,一般操作系统含有普通通用驱动,所以配版件的专用驱动也是按照权
上述通用驱动的框架重新进行详细编辑,比如:配件芯片的规格,各单元调用命令集,适用时
间等。详细方法可以到图书馆翻阅相关书籍。
❽ 怎么将硬件设为第一驱动
在图片显示的这个画面,就是现在反色选中的这个位置,回车,就会进入菜单。
进入后,找回boot选项,就可以看到Fist boot device、答Secend boot device、third boot device,依次进入选择对应启动顺序的设备就可以了。
有些BIOS设置中,启动顺序下面还有单独类型的具体选项,比如DVD BOOT、Hard Disk BOOT等,也需要进入设置,选择后此类设备的优先启动顺序。
设置好以后,按F10,有提示,选Yes,回车,保存重启,重启后设置生效。
❾ 系统,驱动,硬件是什么样的关系问题
我觉得这里起作用的是一些公开的规范,即一个操作系统能在基于某个cpu的主板上运行的基本规范。对于基于Intel cpu的主板或电脑厂商,包括设备商和操作系统商都遵循一个基本规范。
比如操作系统要跑起来需要的基本条件,有cpu、有内存、有外存、有显卡,这是一个操作系统能进入基本界面需要的条件,如果操作系统不能处理某种类型的上述硬件,那根本进不了桌面,怎么可能再去装其它驱动程序。这时就需要一个基本规范,上述硬件按这种规范设计(比如系统总线、接口等等),操作系统内置这些基本规范实现。
这样操作系统就能在这个主板上跑起来了,能够进入界面了。这个时候,可以允许不同硬件设备有自己的规范了,比如为了更好的显示效果,需要安装特定的显卡驱动。但前提是,这个显卡要遵循一个基本规范,操作系统默认才能进入基本界面。这时候的操作系统界面可能由于没有厂商特定驱动只能实现基本工作,比如显示的桌面字体很大,模糊等。
这时候,厂商需要根据操作系统操作硬件的接口规范,实现驱动程序,装到操作系统上。然后操作系统在需要该硬件时就告诉驱动做什么,具体由驱动程序实现怎么做,本质上是把一堆0和1指令转换为高低电平,驱动硬件电路工作。
对于基本的功能,如cd、usb等,这些设备也都有基本的规范,否则要从cd或usb安装操作系统是不现实的。对于额外的功能比如USB3.0、cd的刻盘功能等,这些不是启动操作系统必须的,所以可以允许在系统启动后再安装特定驱动实现特定功能。
对于硬盘这种块设备,也是遵循通用的规范的,比如基本的对硬盘的读写。否则操作系统根本不可能往硬盘上写数据,也就不可能装系统。
❿ 在安装一个硬件设备时为什么需要安装驱动程序
驱动程序是一种可以使计算机和设备通信的特殊程序,可以
说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作
