如今越来越多的朋友都有了自己的电脑,不同之前集成显卡的时期,现在基本上是一台电脑就要配一块独立显卡,方便玩游戏。
显卡固然重要,但是没有驱动的话就像没有灵魂。
下面,我来告诉大家怎么下载适合显卡的驱动。
第一步:看显卡型号
1打开开始菜单,找到控制面板
2接着进入“系统和安全”
3点击“系统”
4进入“设备管理器”
5双击“显示适配器”,看到自己的显卡型号
第二步:去官网下载驱动
1打开浏览器,搜索“英伟达”
2进入官网
3找到右上角的“驱动程序”
4在驱动程序里找到“GeForce 驱动程序”
5看到“手动搜索驱动程序”栏目
6填好相应的信息,点击“开始搜索”
7翻到下面,看到搜索结果
8一般下载最新的版本,点击“获取下载”
9立即下载即可
如何编写Linux设备驱动程序
回想学习Linux *** 作系统已经有近一年的时间了,前前后后,零零碎碎的一路学习过来,也该试着写的东西了。也算是给自己能留下一点记忆和回忆吧!由于完全是自学的,以下内容若有不当之处,还请大家多指教。
Linux是Unix *** 作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁, *** 作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的 *** 作要自己来编写,而且调试也不方便。
以下的一些文字主要来源于khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux A-Z,还有清华BBS上的有关device driver的一些资料。
一、Linux device driver 的概念
系统调用是 *** 作系统内核和应用程序之间的接口,设备驱动程序是 *** 作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象 *** 作普通文件一样对硬件设备进行 *** 作。设备驱动程序是内核的一部分,它完成以下的功能:
1、对设备初始化和释放。
2、把数据从内核传送到硬件和从硬件读取数据。
3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据。
4、检测和处理设备出现的错误。
在Linux *** 作系统下有三类主要的设备文件类型,一是字符设备,二是块设备,三是网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O *** 作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。
最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck。
读/写时,它首先察看缓冲区的内容,如果缓冲区的数据未被处理,则先处理其中的内容。
如何编写Linux *** 作系统下的设备驱动程序
二、实例剖析
我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理。把下面的C代码输入机器,你就会获得一个真正的设备驱动程序。
#define __NO_VERSION__
#include modulesh>
#include versionh>
char kernel_version [] = UTS_RELEASE;
这一段定义了一些版本信息,虽然用处不是很大,但也必不可少。Johnsonm说所有的驱动程序的开头都要包含configh>,一般来讲最好使用。
由于用户进程是通过设备文件同硬件打交道,对设备文件的 *** 作方式不外乎就是一些系统调用,如 open,read,write,close…, 注意,不是fopen, fread,但是如何把系统调用和驱动程序关联起来呢这需要了解一个非常关键的数据结构:
struct file_operations
{
int (seek) (struct inode ,struct file , off_t ,int);
int (read) (struct inode ,struct file , char ,int);
int (write) (struct inode ,struct file , off_t ,int);
int (readdir) (struct inode ,struct file , struct dirent ,int);
int (select) (struct inode ,struct file , int ,select_table );
int (ioctl) (struct inode ,struct file , unsined int ,unsigned long);
int (mmap) (struct inode ,struct file , struct vm_area_struct );
int (open) (struct inode ,struct file );
int (release) (struct inode ,struct file );
int (fsync) (struct inode ,struct file );
int (fasync) (struct inode ,struct file ,int);
int (check_media_change) (struct inode ,struct file );
int (revalidate) (dev_t dev);
}
这个结构的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write *** 作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。既然是这样,则编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。
下面就开始写子程序。
#include typesh>
#include fsh>
#include mmh>
#includeconfigh>
#include errnoh>
#include segmenth>
unsigned int test_major = 0;
static int read_test(struct inode node,struct file file,char buf,int count)
{
int left;
if (verify_area(VERIFY_WRITE,buf,count) == -EFAULT )
return -EFAULT;
for(left = count ; left > 0 ; left--)
{
__put_user(1,buf,1);
buf++;
}
return count;
}
这个函数是为read调用准备的。当调用read时,read_test()被调用,它把用户的缓冲区全部写1。buf 是read调用的一个参数。它是用户进程空间的一个地址。但是在read_test被调用时,系统进入核心态。所以不能使用buf这个地址,必须用__put_user(),这是kernel提供的一个函数,用于向用户传送数据。另外还有很多类似功能的函数。请参考Robert著的《Linux内核设计与实现》(第二版)。然而,在向用户空间拷贝数据之前,必须验证buf是否可用。这就用到函数verify_area。
static int write_tibet(struct inode inode,struct file file,const char buf,int count)
{
return count;
}
static int open_tibet(struct inode inode,struct file file )
{
MOD_INC_USE_COUNT;
return 0;
}
static void release_tibet(struct inode inode,struct file file )
{
MOD_DEC_USE_COUNT;
}
这几个函数都是空 *** 作。实际调用发生时什么也不做,他们仅仅为下面的结构提供函数指针。
struct file_operations test_fops = {
NULL,
read_test,
write_test,
NULL, / test_readdir /
NULL,
NULL, / test_ioctl /
NULL, / test_mmap /
open_test,
release_test,
NULL, / test_fsync /
NULL, / test_fasync /
/ nothing more, fill with NULLs /
};
这样,设备驱动程序的主体可以说是写好了。现在要把驱动程序嵌入内核。驱动程序可以按照两种方式编译。一种是编译进kernel,另一种是编译成模块(modules),如果编译进内核的话,会增加内核的大小,还要改动内核的源文件,而且不能动态的卸载,不利于调试,所以推荐使用模块方式。
int init_module(void)
{
int result;
result = register_chrdev(0, "test", &test_fops);
if (result < 0) {
printk(KERN_INFO "test: can't get major number\n");
return result;
}
if (test_major == 0) test_major = result; / dynamic /
return 0;
}
在用insmod命令将编译好的模块调入内存时,init_module 函数被调用。在这里,init_module只做了一件事,就是向系统的字符设备表登记了一个字符设备。register_chrdev需要三个参数,参数一是希望获得的设备号,如果是零的话,系统将选择一个没有被占用的设备号返回。参数二是设备文件名,参数三用来登记驱动程序实际执行 *** 作的函数的指针。
如果登记成功,返回设备的主设备号,不成功,返回一个负值。
void cleanup_module(void)
{
unregister_chrdev(test_major,"test");
}
在用rmmod卸载模块时,cleanup_module函数被调用,它释放字符设备test在系统字符设备表中占有的表项。
一个极其简单的字符设备可以说写好了,文件名就叫testc吧。
下面编译 :
$ gcc -O2 -DMODULE -D__KERNEL__ -c testc
得到文件testo就是一个设备驱动程序。
如果设备驱动程序有多个文件,把每个文件按上面的命令行编译,然后
ld -r file1o file2o -o modulename。
驱动程序已经编译好了,现在把它安装到系统中去。
$ insmod –f testo
如果安装成功,在/proc/devices文件中就可以看到设备test,并可以看到它的主设备号。要卸载的话,运行 :
$ rmmod test
下一步要创建设备文件。
mknod /dev/test c major minor
c 是指字符设备,major是主设备号,就是在/proc/devices里看到的。
用shell命令
$ cat /proc/devices
就可以获得主设备号,可以把上面的命令行加入你的shell script中去。
minor是从设备号,设置成0就可以了。
我们现在可以通过设备文件来访问我们的驱动程序。写一个小小的测试程序。
#include
#include typesh>
#include stath>
#include
main()
{
int testdev;
int i;
char buf[10];
testdev = open("/dev/test",O_RDWR);
if ( testdev == -1 )
{
printf("Cann't open file \n");
exit(0);
}
read(testdev,buf,10);
for (i = 0; i < 10;i++)
printf("%d\n",buf[i]);
close(testdev);
}
编译运行,看看是不是打印出全1 ?
以上只是一个简单的演示。真正实用的驱动程序要复杂的多,要处理如中断,DMA,I/O port等问题。这些才是真正的难点。请看下节,实际情况的处理。
如何编写Linux *** 作系统下的设备驱动程序
三、设备驱动程序中的一些具体问题
1。 I/O Port。
和硬件打交道离不开I/O Port,老的ISA设备经常是占用实际的I/O端口,在linux下, *** 作系统没有对I/O口屏蔽,也就是说,任何驱动程序都可对任意的I/O口 *** 作,这样就很容易引起混乱。每个驱动程序应该自己避免误用端口。
有两个重要的kernel函数可以保证驱动程序做到这一点。
1)check_region(int io_port, int off_set)
这个函数察看系统的I/O表,看是否有别的驱动程序占用某一段I/O口。
参数1:I/O端口的基地址,
参数2:I/O端口占用的范围。
返回值:0 没有占用, 非0,已经被占用。
2)request_region(int io_port, int off_set,char devname)
如果这段I/O端口没有被占用,在我们的驱动程序中就可以使用它。在使用之前,必须向系统登记,以防止被其他程序占用。登记后,在/proc/ioports文件中可以看到你登记的I/O口。
参数1:io端口的基地址。
参数2:io端口占用的范围。
参数3:使用这段io地址的设备名。
在对I/O口登记后,就可以放心地用inb(), outb()之类的函来访问了。
在一些pci设备中,I/O端口被映射到一段内存中去,要访问这些端口就相当于访问一段内存。经常性的,我们要获得一块内存的物理地址。
2。内存 *** 作
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages。 请注意,kmalloc等函数返回的是物理地址!
注意,kmalloc最大只能开辟128k-16,16个字节是被页描述符结构占用了。
内存映射的I/O口,寄存器或者是硬件设备的RAM(如显存)一般占用F0000000以上的地址空间。在驱动程序中不能直接访问,要通过kernel函数vremap获得重新映射以后的地址。
另外,很多硬件需要一块比较大的连续内存用作DMA传送。这块程序需要一直驻留在内存,不能被交换到文件中去。但是kmalloc最多只能开辟128k的内存。
这可以通过牺牲一些系统内存的方法来解决。
3。中断处理
同处理I/O端口一样,要使用一个中断,必须先向系统登记。
int request_irq(unsigned int irq ,void(handle)(int,void ,struct pt_regs ),
unsigned int long flags, const char device);
irq: 是要申请的中断。
handle:中断处理函数指针。
flags:SA_INTERRUPT 请求一个快速中断,0 正常中断。
device:设备名。
如果登记成功,返回0,这时在/proc/interrupts文件中可以看你请求的中断。
4。一些常见的问题。
对硬件 *** 作,有时时序很重要(关于时序的具体问题就要参考具体的设备芯片手册啦!比如网卡芯片RTL8139)。但是如果用C语言写一些低级的硬件 *** 作的话,gcc往往会对你的程序进行优化,这样时序会发生错误。如果用汇编写呢,gcc同样会对汇编代码进行优化,除非用volatile关键字修饰。最保险的办法是禁止优化。这当然只能对一部分你自己编写的代码。如果对所有的代码都不优化,你会发现驱动程序根本无法装载。这是因为在编译驱动程序时要用到gcc的一些扩展特性,而这些扩展特性必须在加了优化选项之后才能体现出来。
写在后面:学习Linux确实不是一件容易的事情,因为要付出很多精力,也必须具备很好的C语言基础;但是,学习Linux也是一件非常有趣的事情,它里面包含了许多高手的智慧和“幽默”,这些都需要自己亲自动手才能体会到,O(∩_∩)O~哈哈!
计算机中的重要数据需要备份,驱动程序也不例外。下面,我们就开从驱动程序的概念谈起,依次介绍如何提取驱动、备份驱动、恢复驱动、删除驱动、安装新驱动以及如何在互联网上找驱动。
一、 什么是驱动程序、备份驱动的重要性
设备驱动程序(简称:驱动程序、驱动,英文为:device driver)可谓是计算机硬件的软“神经中枢”。设备驱动程序通常为某种设备提供I/O接口。设备驱动程序接收I/O管理器传送供来的指令,并将这些指令翻译成具体的命令,控制它所管理的设备。设备完成这些命令后,再通过驱动程序通知I/O管理器。一般,一个驱动程序只为一种特定的设备提供服务。
驱动程序有16位、32位之分,大部分16位的驱动用于Windows 3x和Windows 95系统,文件的扩展名通常为DRV、VXD、DLL;Windows 2000、Windows XP系统的驱动都是32位的,扩展名通常为SYS、DLL等;而Windows 98/98SE、Windows ME的驱动是16位和32位兼有之。CAT文件一般是微软对驱动程序的数字签名文件。微软对硬件厂商开发的驱动程序进行兼容性、稳定性测试(这个认证是比较严格的),能通过测试的驱动程序被授予数字签名(一个CAT文件),并颁发Designed for Windows徽标,而且加入HCL列表(Hardware Compability List),将驱动添加进Windows安装光盘的DriversCAB文件。安装到用户计算机中的驱动程序,对于Windows 9x/Me系统,一般存放在C:\WINDOWS\SYSTEM文件夹里;对于Windows NT/2000/XP,驱动程序一般在C:\WINNT\system32\drivers文件夹里。但这不是绝对的。
当我们重装或升级Windows系统时,我们最先想到的问题就是我们的显卡、声卡、Modem、网卡等硬件设备的随机驱动盘是否能够找到。然而,我们中的很多人,可能找不全所有的驱动盘。那我们能否将所有的安装过的驱动程序都一次性提取出来并备份到CDRW、活动硬盘、ZIP、MO或硬盘的其它分区呢?当我们重装Windows系统后,能否将所有驱动都一次性安装回去呢? 答案是肯定的
二、 如何提取驱动
下面,就介绍一款软件——《驱动精灵202》,它能帮助大家简化驱动提取的繁琐步骤。即便是初学者,也能通过点点鼠标,完成驱动备份工作。
这款软件的前身是一个免费软件《驱动程序备份专家170》,200版本正式更名为《驱动精灵》。新版本的驱动精灵202个人版采用驱动程序三遍扫描提取算法,支持驱动提取、驱动打包备份、生成EXE格式的驱动程序自动安装包。当然,免费的190版和收费的202版的最大的差别就是最后两个功能。不过,单就提取、备份而言,两者本质上没什么区别。
对于有一定驱动知识的朋友,可以选择“驱动提取”方式,也就是说,提取出的驱动文件都将存放在一个以硬件设备名为命名的文件夹中,并包含一个INF文件(安装驱动时,需要这个安装信息文件)。
对于熟悉WinZip或WinRar软件的朋友,可以选择第二种方式“驱动打包备份”,也就是说,所有提取出的驱动文件将被放入一个CAB格式(微软从Windows 95起,就开始支持这种格式,WinZip、WinRar均支持CAB格式)的压缩包,以节省磁盘空间 。当然,INF文件也包含在压缩包中;对于电脑初学者,那就选择第三种方式吧。所有的驱动文件和安装信息将经过WinDriver Ghost软件编译,生成一个EXE格式的可执行文件。以后恢复时,只需双击。
点击“收集全部”按钮,可以在两秒之内得到计算机中所有的硬件设备的驱动详细信息,包括:驱动的官方名称、驱动的版本、驱动发布的日期、发布公司、驱动支持的 *** 作系统、驱动包中的文件的个数、驱动是否含有微软硬件兼容性测试实验室的数字签名等信息。点击“快速收集”按钮,可以得到所有的非微软公司出品的驱动程序。这个按钮的实质是过滤掉了微软公司的驱动,因为微软出品的驱动一般是随Windows产品一同发布的,当我们安装Windows时,Windows会自动安装并配置它能识别得硬件,所以我们没有必要去备份这些驱动。
三、 如何备份驱动
如果要备份某个硬件设备的驱动,可以先在驱动列表中选中它,然后再点击右边的“备份驱动”,软件将开始搜索需要的文件,待搜索完毕后出现了一个提示,询问用户备份到哪一个文件夹,缺省的文件夹为C:\My Drivers,不过,最好改为D:\My Drivers,因为重装Windows后C盘的内容经常要发生改变。点击“开始”按钮,软件就开始提取并备份驱动了。备份后有提示,可以知道提取过程是否成功以及有多少个文件已经复制了。
如果用户希望只点击一个按钮就能备份所有的驱动,试试“备份全部”吧。笔者计算机上需要备份的驱动,2秒内就能提取、备份完成。所有驱动都被备份到了D:\My Drivers文件夹。有一点要注意的是:每个提取备份的驱动中都包含一个名为SetupDIY的文件,不要一看DIY就删除呀,因为这个文件中有安装驱动时需要的重要信息。
如何通过控制面版恢复单个驱动
Windows XP的驱动还原功能可以帮助用户在错安装驱动程序或安装了降低系统性能的驱动后,根据用户的需要,自动还原用户系统中的上一个好的驱动(Last Good Known Driver),从而简化了用户删除错误的驱动,安装正确驱动的步骤。如果用户希望提取某一个、多个或全部硬件的驱动程序,那么Windows XP就无能为力了。我们下面就向Windows 95/98/98SE/ME/2000的用户和Windows XP的用户介绍如何使用《驱动精灵》恢复旧的驱动和安装新硬件的驱动。
无论是恢复经备份后的驱动,还是安装新硬件设备的驱动,都可以通过Windows控制面版中的硬件向导来实现。具体方法是:打开“控制面版”,双击“添加/删除硬件(A)”。选择 [下一步]->[添加/排除设备故障(A)]->[添加新设备]->[是,搜索新硬件(Y)]->[下一步]->[选择相应的设备类型]->[从磁盘安装(H)],输入一个正确的安装信息INF文件和相关路径。
如何使用《驱动精灵》恢复单个驱动
对于采用第一种备份方式的用户,恢复驱动的通常做法有两个:1、如果是即插即用(Plug And Play)型设备,Windows自动检测到并提示插入驱动盘,系统需要一个安装信息文件(扩展名为INF);2、如果设备不是即插即用的或不能被Windows自动检测到,需要从控制面版安装。然而,《驱动精灵》中的“安装驱动”按钮大大简化了后者,用户只要选择一个安装信息INF文件,稍等几秒,软件就可以自动完成安装的繁琐步骤。对于采用第二种备份方式的用户,需要先将CAB压缩包解压到一个临时目录,然后再按上面的步骤恢复。对于采用第三种备份方式的用户,双击生成的EXE文件,进入恢复向导,点击“开始”后,等待系统重启后即可。
如何使用《驱动精灵》恢复全部设备的驱动
点击圆圈圈住的Arrow箭头,可以看到另一些新的功能按钮。点击其中的“恢复全部”按钮,软件提示要选择已经存放驱动的文件夹。缺省的文件夹是C:\My Drivers,但是由于C盘需要经常重装,我将我的所有驱动备份到了D:\My Drivers。选中D:\My Drivers,点击“开始恢复”按钮。待系统重启后即可完成恢复。对于采用第二种备份方式的用户,需要先将CAB压缩包解压到一个临时目录,选中开始恢复。对于采用第三种备份方式的用户,双击生成的“全部驱动EXE”文件,等待系统重启后即可。
NVIDIA GeForce Experience下载的驱动文件放在C:\NVIDIA\DisplayDriver,是EXE可运行程序格式。
GeForce Experience 是 NVIDIA 的一款全新应用程序,是优化自己的游戏、保持驱动程序始终为最新版本的最简单方法。
GeForce Experience 能够以两种主要方式优化你的 PC。
首先,GeForce Experience 可自动提醒新的 NVIDIA 驱动程序并进行下载。 NVIDIA 不断改进其驱动程序。 新的驱动程序可改善游戏性能、增加新特性以及修正 Bug。
其次,GeForce Experience 可根据硬件配置来优化游戏中的图形设置。 NVIDIA 针对 GPU、CPU 以及显示器分辨率的各种组合而进行广泛的游戏测试,将这些信息存储于 NVIDIA 云端。 GeForce Experience 可连接至 NVIDIA 云端,下载专为自己 PC 而量身定制的优化游戏设置。
以上就是关于笔记本显卡驱动怎么下载全部的内容,包括:笔记本显卡驱动怎么下载、如何编写驱动程序、怎样删除驱动程序 我电脑里有一个文件 后缀是驱动 我想把他删除掉 请教高手等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)