精华内容
下载资源
问答
  • Linux安装NVIDIA显卡驱动的正确姿势

    万次阅读 多人点赞 2018-08-20 21:05:58
    Linux安装NVIDIA显卡驱动的正确姿势 什么是nouveau驱动? 检测NVIDIA驱动是否成功安装 集显与独显的切换 ...可能想玩Linux系统的童鞋,往往死在安装NVIDIA显卡驱动上,所以这篇文章帮助大家以正常的方式安装NVI...

    Linux安装NVIDIA显卡驱动的正确姿势

    可能想玩Linux系统的童鞋,往往死在安装NVIDIA显卡驱动上,所以这篇文章帮助大家以正常的方式安装NVIDIA驱动。

    本文将介绍四种NVIDIA驱动安装方式。具体选择需要根据你的情况而定。

    • 使用标准Ubuntu仓库进行自动化安装
    • 使用PPA仓库进行自动化安装
    • 使用官方的NVIDIA驱动进行手动安装

    什么是nouveau驱动?

    nouveau,是一个自由及开放源代码显卡驱动程序,是为Nvidia的显示卡所编写,也可用于属于系统芯片的NVIDIA Tegra系列,此驱动程序是由一群独立的软件工程师所编写,Nvidia的员工也提供了少许帮助。

    该项目的目标为利用逆向工程Nvidia的专有Linux驱动程序来创造一个开放源代码的驱动程序。

    所以nouveau开源驱动基本上是不能正常使用的,性能极低,所以网上有很多人都在骂:干死黄仁勋!!

    这里写图片描述

    想了解历史的可以去看看这篇知乎,腾讯和AMD是linux的罪人吗?

    好了不扯了,正式开始讲安装把!

    检测NVIDIA驱动是否成功安装

    1. 使用nvidia-settings命令
    nvidia-settings
    

    终端执行这个命令会调出NVIDIA的驱动管理程序,如下:

    这里写图片描述

    如果出现这个界面可以看到 NVIDIA Driver Version:390.48,这就代表nvidia-setting安装正常。

    1. 使用nvidia-smi命令测试

    英伟达系统管理接口(NVIDIA System Management Interface, 简称 nvidia-smi)是基于NVIDIA Management Library (NVML) 的命令行管理组件,旨在(intened to )帮助管理和监控NVIDIA GPU设备。

    nvidia-smi
    

    执行这条命令将会打印出当前系统安装的NVIDIA驱动信息,如下:

    这里写图片描述

    我们可以看到我们显卡的型号,我的是GTX 960M,包括显存大小都可以看见。

    1. 系统信息查看

    这一步不重要,因为有时候系统信息里面显示的可能会有误,只显示集显不显示独显的情况。

    比如我的就没有显示出独显,如下:

    这里写图片描述

    这里面不显示没有关系,可以略过。

    1. 命令行搜索集显和独显

    打开终端执行以下命令:

    lspci | grep VGA     # 查看集成显卡
    lspci | grep NVIDIA  # 查看NVIDIA显卡
    

    这里写图片描述

    如果都能搜索到说明正常。

    查看nouveau是否启动运行可以执行下面命令:

    lsmod | grep nouveau
    

    没有返回代表没有运行。

    集显与独显的切换

    当我们需要切换独显与集显的时候,一般就是外出的时候,想节省电量,增长待机时间。下面讲解两种切换方式。

    1. 使用nvidia-setting切换

    终端执行nvidia-setting,在弹的界面中选择独显与集显:

    这里写图片描述

    1. 命令行切换

    NVIDIA提供了一个切换显卡的命令:

    sudo prime-select nvidia # 切换nvidia显卡
    sudo prime-select intel  # 切换intel显卡
    sudo prime-select query  # 查看当前使用的显卡
    

    这里写图片描述

    注意: 每一次切换显卡都需要重新启动电脑才能生效

    使用标准仓库进行自动化安装

    在安装的发行版中,如 ubuntu, Linux Mint等,找到附加驱动管理软件,下面是Linux Mint界面:

    这里写图片描述

    选择推荐的驱动安装,点击应用更改,等待下载然后重启即可。

    这种安装方式有如下缺点

    1. 如果你的显卡比较新可能会出现安装低版本的NVIDIA驱动而造成即可安装完成,但是并没有真正安装成功,可能会出现循环登录,关机死机等等原因。

    2. 当你更换驱动的时候可能原有的NVIDIA驱动删除不干净。

    当然这种方式也是有优点的:

    1. 不需要手动禁止nouveau
    2. 操作方便

    可能有的童鞋还使用过命令行的方式安装:

    sudo apt-get install nvidia*
    

    如图:

    这里写图片描述

    这种方式安装同样也是使用ubuntu官方源的形式安装的,你可以选择不同的驱动版本来安装,但是本质上和标准仓库进行自动化安装是一样的。

    其实ubuntu自带命令行版本安装工具ubuntu-drivers,终端输入:

    ubuntu-drivers devices   # 查询所有ubuntu推荐的驱动
    

    这里写图片描述

    这路我是有一个推荐安装的驱动,那就是nvidia-driver-390,明显我已经安装完成了。

    然后就可以使用下面一条命令安装所有推荐的驱动程序:

    sudo ubuntu-drivers autoinstall
    

    安装完成后重启就可以了,这里要注意,这种安装方式和驱动管理器软件安装的效果是一样的,就是一个是UI版本,一个是命令行版本。

    使用PPA仓库进行自动化安装

    使用图形驱动程序PPA存储库允许我们安装NVIDIA beta驱动程序,这有可能会出现兼容性的问题,但是有些时候必须使用这种方式,比如显卡比较新,使用上面所讲的方式检测驱动的安装情况,如果不正常那么只能使用这种方式安装最新的NVIDIA驱动。

    1. 添加PPA到我们的系统:
    sudo add-apt-repository ppa:graphics-drivers/ppa
    

    更新系统源:

    sudo apt update
    

    此时我们就可以下载最新的NVIDIA驱动了:

    安装的方式有以下三种,其实前面已经讲过,这里总结一下:

    • 附加驱动管理软件
    • sudo apt-get install nvidia-xxx
    • ubuntu-drivers方式

    这三种都可以,选择一个版本安装,然后重启即可。

    使用官方的NVIDIA驱动进行手动安装

    这种安装方式我认为是比较野蛮的,也是最正规,最原始的的方式,当然难度最高的。你可以来挑战一下!!!!

    1. 查看当前电脑的显卡型号

    lshw -numeric -C display
    

    执行完毕后我的显卡型号为 GTX 960M,如下图:

    这里写图片描述

    2. 下载NVIDIA官方驱动

    到NVIDIA的官方驱动网站下载对应显卡的驱动程序,下载后的文件格式为run

    下载好之后放到用户目录下,等下后面会用到。

    3. 删除原有的NVIDIA驱动程序

    如果你没有安装过,或者已经卸载,可以忽略:

    sudo apt-get remove –purge nvidia*
    

    4. bios禁用禁用secure boot,也就是设置为disable

    如果没有禁用secure boot,会导致NVIDIA驱动安装失败,或者不正常。

    5. 禁用nouveau

    打开编辑配置文件:

    sudo gedit /etc/modprobe.d/blacklist.conf
    

    在最后一行添加:

    blacklist nouveau
    

    这一条的含义是禁用nouveau第三方驱动,之后也不需要改回来。

    由于nouveau是构建在内核中的,所以要执行下面命令生效:

    sudo update-initramfs -u
    

    6. 重启

    reboot
    

    重启之后,可以查看nouveau有没有运行:

    lsmod | grep nouveau  # 没输出代表禁用生效
    

    7. 停止可视化桌面:

    为了安装新的Nvidia驱动程序,我们需要停止当前的显示服务器。最简单的方法是使用telinit命令更改为运行级别3。执行以下linux命令后,显示服务器将停止,因此请确保在继续之前保存所有当前工作(如果有):

    sudo telinit 3
    

    之后会进入一个新的命令行会话,使用当前的用户名密码登录

    8. 安装驱动

    给驱动文件增加可执行权限:

    sudo chmod a+x NVIDIA-Linux-x86_64-390.48.run
    

    然后执行安装:

    sudo sh ./NVIDIA-Linux-x86_64-390.48.run --no-opengl-files
    

    安装完成后重启即可,记得验证是否安装成功,参考前面所讲。

    –no-opengl-files 参数必须加否则会循环登录,也就是loop login

    参数介绍:

    • –no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要
    • –no-x-check 安装驱动时不检查X服务
    • –no-nouveau-check 安装驱动时不检查nouveau
      后面两个参数可不加。

    关于使用此方式可以参照Ubuntu 18.04安装NVIDIA(英伟达) RTX2080Ti显卡 这篇文章。

    注意:

    • 安装CUDA时一定使用runfile文件,这样可以进行选择。不再选择安装驱动,以及在弹出xorg.conf时选择NO

    常见问题解决

    1. 安装完驱动后,HDMI扩展屏幕不能使用,现象表现为能识别扩展屏幕但是黑屏。
      这种情况需要确定以下内容是否已经设置:

      • bios内是否已经禁止安全启动、快速启动。
      • linux系统是否设置了禁止nouveau

      如果上面的都已经做了,但还是有问题,可以尝试下面的配置:

      sudo nano /usr/share/X11/xorg.conf.d/10-amdgpu.conf
      

      有可能不是这个文件,但是类似。

      修改为下面这样

      Section "OutputClass"
         Identifier "AMDgpu"
         MatchDriver "amdgpu"
         Driver "amdgpu"
         Option "PrimaryGPU" "no"
      EndSection
      

      下面修改nvidia的配置

      sudo nano /usr/share/X11/xorg.conf.d/10-nvidia.conf
      

      修改为下面这样:

      Section "OutputClass"
         Identifier "nvidia"
         MatchDriver "nvidia-drm"
         Driver "nvidia"
         Option "AllowEmptyInitialConfiguration"
         Option "PrimaryGPU" "yes"
         ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
      EndSection
      

      然后重新启动。

    到此NVIDIA的安装方式讲解完了。。。。

    END

    展开全文
  • Linux安装网卡驱动

    千次阅读 2018-02-01 14:38:22
    Linux安装网卡驱动 Linux安装腾达网卡驱动 Ubuntu安装网卡驱动 Ubuntu安装腾达网卡驱动 Ubuntu安装TP-LINK网卡驱动

    一、问题来源

    我的网卡是Tenda U1, 要在Ubuntu上做开发,官方提供的驱动始终编译不过,无奈上淘宝,搜到了一款支持Ubuntu的网卡,这才能上网,以后再也不买Tenda的产品了。

    同学和我的是同款网卡,也要装驱动,这才重新开始百度,看看能不能找到解决方案。

    由于网卡驱动是一类相似的问题,所以我告诉大家该怎么搜索网卡对应的驱动。

    二、如何搜索网卡对应的驱动

    1、首先找到你的网卡的芯片型号,我是在官方的驱动包中找到'**rtl8192eu**'这样的压缩包,从而确定网卡芯片型号;另外一种方法是,打开WIndows的设备管理器-->网络适配器:

    "Realtek"是制造商,紧跟着的就是芯片型号“RTL8192eu”。不知道哪一项是无线网卡时,插拔一下就知道了。

    2、找到芯片型号以后,搜索“芯片型号+linux”, 就能找到相应的解决方案。我是直接去github上搜索芯片型号,比如“RTL8192eu”,然后就能找到对应的驱动,安装过程和下面的类似。

    TP-LINK的TL-WN821N Ver:5.0的芯片型号也是RTL8192eu。

    二、针对Tenda U1 , 网卡芯片型号为rtl8192eu的解决方案

    参考博客:Linux无线驱动安装历程

    驱动下载地址:Github驱动网址

    1、安装方法1

    我是先看了第一篇博客,找到可github驱动网址,然后按照github上面的方法编译的网卡驱动,能用,但是网卡的灯不亮。附上命令记录:

    sudo apt-get install git linux-headers-generic build-essential dkms
    sudo make clean
    sudo make
    sudo make install
    sudo modprobe -a 8192eu

    8192eu是我的网卡的芯片对应的驱动名,不同的网卡可能不一样。注意看sudo make install的结果就能看到对应的名字。

    然后将8192eu添加到/etc/modules。

    sudo gedit /etc/modules

    在弹出的编辑器里面, 新加一行8192eu

    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.
    
    8192eu
    

    退出保存,重启就可以自动加载驱动。

    注意:每次更新内核之后可能需要按照上述步骤重新编译安装驱动。

    2、安装方法2

    进入驱动目录,输入以下命令

    sudo apt-get install git linux-headers-generic build-essential dkms
    sudo dkms add .
    sudo dkms install rtl8192eu/1.0

    这种安装方法,即使在内核更新时,也会自动重新编译驱动。

    然后将8192eu添加到/etc/modules。

    sudo gedit /etc/modules

    在弹出的编辑器里面, 新加一行8192eu

    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.
    
    8192eu
    

    退出保存,重启就可以自动加载驱动。

    展开全文
  • LINUX安装ODBC驱动

    万次阅读 2017-01-19 15:05:37
    LINUX安装ODBC驱动

    1、先下载最新的unixODBC源码包( http://www.unixodbc.org/unixODBC-2.3.1.tar.gz)放到/usr/local下

          解压:

    tar -zxvf unixODBC-2.3.1.tar.gz
    2、安装unixODBC-2.3.1.tar.gz

    #cd usr/local/unixODBC-2.3.1/
    #./configure --prefix=/usr/local/unixODBC-2.3.1 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
    #make
    #make install


    3、测试查看unixODBC安装情况

    #odbcinst -j
    unixODBC 2.3.1  
    DRIVERS............: /etc/odbcinst.ini  
    SYSTEM DATA SOURCES: /etc/odbc.ini  
    FILE DATA SOURCES..: /etc/ODBCDataSources  
    USER DATA SOURCES..: /root/.odbc.ini  
    SQLULEN Size.......: 8  
    SQLLEN Size........: 8  
    SQLSETPOSIROW Size.: 8 

    PS:安装完成后,查看unixODBC安装情况,可能会报如下错误:

    #odbcinst -j
    odbcinst: error while loading shared libraries: libodbcinst.so.2: cannot open shared object file: No such file or directory


    解决办法:
    安装共享库后要注意共享库路径设置问题, 如下:
    A、如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
    ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 
    缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表. 
    B、如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

    # cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    # echo "/usr/local/lib" >> /etc/ld.so.conf
    # cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /usr/local/lib
    # ldconfig


    C、如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,  但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找共享库. 
    LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 
    则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
    export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH    
    一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用

    展开全文
  • Linux安装驱动的两种方法

    万次阅读 2018-06-09 11:03:12
    linux 编译安装驱动有两种,动态加载与静态加载 动态加载 一,编译,指点内核树下编译,生成.o文件或.ko文件 二,将生成的.o或.ko文件拷到相应目录,一般是/lib/module/kernel下面 三,用insmod命令加载,用...

    linux 编译安装驱动有两种,动态加载与静态加载 
    动态加载 
    一,编译,在指点内核树下编译,生成.o文件或.ko文件 
    二,将生成的.o或.ko文件拷到相应目录,一般是/lib/module/kernel下面 
    三,用insmod命令加载,用rmmod命令卸载 
    静态加载 
    静态加载主要就是编译内核。就是将编写好的驱动放进内核相应的目录下面。然后编译内核。然后运行编译好的内核。

    静态加载就是把驱动程序直接编译到内核里,系统启动后可以直接调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译下载内核,效率较低。 
    动态加载利用了LINUX的module特性,可以在系统启动后用insmod命令把驱动程序(.o文件)添加上去,在不需要的时候用rmmod命令来卸载。在台式机上一般采用动态加载的方式。 
    在嵌入式产品里可以先用动态加载的方式来调试,调试完毕后再编译到内核里。下面以我们的nHD板卡为例讲述一下加载驱动程序的方法。

    假设我们需要添加一个名为mydrv的字符型设备驱动,主设备号为254,次设备号为0(只有一个从设备),静态加载的步骤如下:

    1、编写自己的驱动程序源文件mydrv.c,并放在firmware\uClinux-Samsung-2500\linux-2.4.x\drivers\char下面。一个典型的字符型驱动的最后一般包括如下内容:

    static int mydrv_init(void) 

    int ret; 
    ret = register_chrdev(mydrv_major, ” mydrv “, &my_fops); 
    if(ret == 0) printk(“register_chrdev succeed!\n”); 
    else printk(“register_chrdev fail!\n”); 
    return 0; 
    }

    static __exit void mydrv _cleanup(void) 

    unregister_chrdev(mydrv _major, ” mydrv “); 
    printk(“register_chrdev succeed!\n”); 
    return ; 

    module_init(mydrv _init); 
    module_exit (mydrv _cleanup);

    函数mydrv_init的任务是注册设备,mydrv_cleanup的任务是取消注册。 Module_init和module_exit的作用后面会讲到。

    2.在firmware\uClinux-Samsung-2500\vendors\Samsung\2500\Makefile中添加如下语句(以刚才的设备为例,实际添加时当然要根据你自己的设备名称和设备号来添加):

    mknod $(ROMFSDIR) /dev/mydrv c 254 0

    这句话的目的是在内核中创建一个与你的驱动程序对应的设备节点。

    3.在firmware\uClinux-Samsung-2500\linux-2.4.x\drivers\char\Makefile

    中添加如下语句: 
    obj-$(CONFIG_CHAR_MYDRV) +=mydrv.o

    这句话的目的是根据编译选项$(CONFIG_CHAR_MYDRV)来决定是否要添加该设备驱动。

    4.在firmware\uClinux-Samsung-2500\linux-2.4.x\drivers\char\config.in

    中添加: 
    if [“$CONFIG_ARCH_SAMSUNG”=”y”]; then 
    tristate ’ ,MYDRV driver module ’ CONFIG_CHAR_MYDRV

    这句话的目的是在运行make menuconfig时产生与你的设备对应的编译选项。

    5.运行make menuconfgi,应该能看到你自己的设备的选项,选中就可以了。

    6.编译内核,下载,运行自己的测试程序。

    如果你觉得上述步骤比较麻烦,可以把4、5两条都省去,把第3条中的

    obj-$(CONFIG_CHAR_MYDRV) +=mydrv.o 
    改为 
    obj-y +=mydrv.o

    这样在menuconfig就没有与你的设备对应的选项了,编译内核时直接会把你的驱动编译进去。

    还有一个问题需要说明一下。在…/drivers/char下有一个mem.c文件,其中最后有一个int __init chr_dev_init(void)函数。大家可以看到,所有字符设备的初始化函数(IDE_INT_init之类)都要添加在这里,而我们刚才的驱动程序的初始化函数并没有添加到这里。这个问题涉及到系统启动时的do_initcall函数,详细讲述起来比较烦琐,大家有兴趣可以看一下《情景分析》下册P726~P729。这里简单介绍一下。如果对一个函数(通常都是一些初始化函数)作如下处理(仍以我们的mydrv_init函数为例):

    __initcall(mydrv_init)

    那么在编译内核时会生成一个指向mydrv_init的函数指针__initcall_mydrv_int,系统启动时,在运行do_initcall函数时,会依次执行这些初始化函数,并且会在初始化结束后把这些函数所占用的内存释放掉。

    回到mem.c文件,在最后有一行: 
    __initcall(chr_dev_init)

    这句话的作用就显而易见了,在系统启动时自动执行chr_dev_init函数。所以我们完全可以不用在mem.c/chr_dev_init中添加我们自己的初始化函数,而是在我们自己的设备文件中(mydrv.c)添加如下一行: 
    __initcall(mydrv_init).

    在我们前面说到的我们自己的设备文件mydrv.c中,最后有一句:

    module_init(mydrv _init);

    大家可以看一下module_init的定义,在…linux.-2.4.x\include\linux\init.h中。如果定义了宏MODULE时,module_init是作为模块初始化函数,如果没有定义MODULE,则 
    module_init(fn)就被定义为__initcall(fn)。静态编译时是不定义MODULE的,所以我们的驱动中的module_init就等于是:

    __initcall(mydrv_init).

    这样我们的初始化函数就会在启动时被执行了。

    至于究竟是在mem.c/chr_dev_init中添加你的设备初始化函数,还是在设备文件中通过module_init来完成,完全取决于你的喜好,没有任何差别。如果你的初始化函数只是注册一个设备(没有申请内存等操作),那即使你在两个地方都加上(等于初始化了两次)也没关系,不会出错(有兴趣可以看一下内核里注册设备的函数实现, 
    …linux-2.4.x\fs\devices.c\register_chrdev)。不过为了规范起见,还是不建议这样作。

    最后一个问题。在静态加载驱动的时候,我们那个mydrv_cleanup和module_exit函数永远不会被执行,所以去掉是完全可以的,不过为了程序看起来结构清晰,也为了与动态加载的程序兼容,还是建议保留着。

    下面讲一下动态加载驱动的方法。 
    1、运行make menuconfgi,在内核配置中进入Loadable module support,选择Enable loadable module support和Kernel module loader(NEW)两个选项。在应用程序配置中进入busybox,选择insmod, rmmod, lsmod三个选项。

    2、在…vendors\Samsung\2500\Makefile中添加相应的设备节点,方法与静态加载时完全一样。

    3、编写自己的驱动程序文件,在文件开始处加一句:

    define MODULE

    文件最后的 
    mydrv_init 
    mydrv_cleanup 
    module_init(mydrv _init) 
    module_exit (mydrv _cleanup) 
    这四项必须保留。

    4、仿照如下的格式写自己的Makefile文件:

    KERNELDIR= /home/hexf/hardware/nHD/Design/firmware/uClinux-Samsung-2500/linux-2.4.x 
    CFLAGS = -D__KERNEL__ -I$(KERNELDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fno-common -pipe -fno-builtin -D__linux__ -DNO_MM -mapcs-32 -mshort-load-bytes -msoft-float 
    CC = arm-elf-gcc

    all: mydrv.o 
    clean: 
    rm -f *.o

    5、编译自己的驱动程序文件。注意在动态加载时只编译不连接,所以得到的是.o文件。

    6、把编译后的驱动程序的.o 文件,连同自己的测试程序(假设叫mytest,注意这个是可执行文件)一起放在编译服务器的/exports/自己的目录下。测试程序就是一个普通的应用程序,其编写和编译的步骤这里就不讲了。

    7、启动nHD板卡,用nfs的方法把编译服务器上/exports/自己的目录mount上来(假设mount 到 /mnt下)。Nfs的使用大家都很熟悉了,这里就不再说。

    8、 
    cd /mnt 
    /bin/insmod mydrv.o 
    现在你的设备就已经被动态加载到系统里了。可以用lsmod命令查看当前已挂接的模块。

    9、运行你的测试程序

    10、调试完毕后用 rmmod mydrv把你的设备卸载掉。

    补充几点: 
    1、关于建立设备节点的问题,因为大家所使用的系统不太一样,所以不需要按照我说的方法。总之只要在你自己的系统的dev目录下建立了自己的驱动程序的设备节点就可以了。

    2、没有考虑动态分配主设备号的问题。所以注册设备那个地方稍微有点不严密。

    3、模块加载时要把自己的.c文件编译成.o文件,CFLAGS后面那一串编译选项有时可能有点烦人,如果你没搞定,最简单的办法就是重新编译一遍内核并重定向到一个文件中(别忘了先make clean一下):make > out。

    然后在out文件里随便找一个字符驱动程序的编译过程,把它的编译选项找出来,拷贝到你自己的Makefile里就可以了。我就是这么作的。

    下面是一个最简单的字符设备驱动的例子。实际的驱动千差万别,但其实也就是“填充”自己的open,close,read,write,ioctl几个函数而已。

    ifndef KERNEL

    define KERNEL

    endif

    define MODULE

    define drvtest_major 254

    include

    include

    include

    include

    include // printk()

    include // kmalloc()

    include // error codes

    include // size_t

    include // mark_bh

    include

    include

    include

    include

    include

    include

    include

    static int mytest_open(struct inode *inode,struct file *filp) 
    {

    MOD_INC_USE_COUNT;

    printk(“mytest open!\n”);

    return 0;

    }

    static ssize_t mytest_read(struct file flip,char buff,size_t count, 
    loff_t * f_pos) 

    char buf[10] ={0x1,0x2,0x3,0x4,0x5};

    memcpy(buff,buf,5);

    return 5; 
    }

    static int mytest_close(struct inode *inode,struct file *filp)

    { MOD_DEC_USE_COUNT;

    printk(“mytest close!\n”);

    return 0;

    }

    static struct file_operations my_fops = { 
    read: mytest_read, 
    // write: mytest_write, 
    open: mytest_open, 
    release: mytest_close, 
    // ioctl: mytest_ioctl,

    };

    static int mytest_init(void)


    int ret; 
    ret = register_chrdev(drvtest_major, “drvtest”, &my_fops);

    if(ret == 0) printk(“register_chrdev succeed!\n”); 
    else printk(“register_chrdev fail!\n”); 
    return 0;

    }

    static __exit void mytest_cleanup(void) 
    {

    unregister_chrdev(drvtest_major, “drvtest”); 
    printk(“register_chrdev succeed!\n”); 
    printk(“bye!\n”);

    return ; 

    module_init(mytest_init); 
    module_exit(mytest_cleanup);

    展开全文
  • linux驱动安装

    千次阅读 2018-07-05 11:03:52
    在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载。静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率...
  • Linux Nvidia显卡驱动安装

    千次阅读 2020-10-17 03:11:20
    因为某些需要需要在Linux安装显卡驱动,这里记录一下安装过程。 2 环境 Manjaro RTX 2060 3 下载驱动安装包 到官网上搜索下载即可,可以戳这里: 选择自己的显卡型号即可,笔者选择参考如下: 搜索下载即可,...
  • Linux安装网卡驱动程序详解

    万次阅读 2017-12-08 10:59:03
    Linux安装网卡驱动程序详解
  • linux安装网卡驱动程序

    千次阅读 2019-01-13 12:27:35
    linux安装网卡驱动程序
  • Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法 问题描述 Ubuntu上使用CP210x USB转UART设备时需要安装驱动程序(CP210x USB to UART Bridge VCP Drivers),安装驱动过程中cp...
  • linux安装无线网卡驱动

    千次阅读 2019-03-09 18:29:31
    安装manjaro 不能上无线 查了一下没驱动 下载了个驱动安装上了 1查看自己网卡的版本 命令行:lspic 最后那个 network controller 后面就是无线网卡型号 2下载对应版本型号源码 git原地址:...
  • 在Linux安装ALSA声卡驱动

    千次阅读 2011-01-07 15:58:00
    刚装好了显卡这回轮到安声卡了,安装声卡比安装显卡简单多,主要原因网上的资料比较全自然省心不少 。好了言归正转。 1.下载驱动 你可以到这里下载ALSA的驱动: 你需要下载以下几个包: alsa-driver-1.0.10.tar....
  • 自从进入了KaliLinux的坑后,GeForce GTX 1060显卡驱动一直没有安装成功过,网上的一堆安装nvidia显卡驱动的教程,但是没有成功过。现在本文是通过实际操作后记录下安装1060显卡驱动。编者的电脑是笔记本。 其他不...
  • linux 显卡驱动 安装

    千次阅读 2010-01-16 16:11:00
    目录:(1)硬件配置问题:(2)最简单的ATI或Nvidia显卡最新官方驱动安装方法:(3)如果显卡安装后,重启电脑黑屏怎么办?(4)装了新显卡驱动,都黑屏了,怎么回图形界面?难道只能用回XP不成?(5)如果一切顺利...
  • Ubuntu 14.04 16.04 nvidia 驱动安装最简单直观的方式是如下的对话框中直接选择驱动安装即可但是有时候,驱动不够新,比如14.04用的是340.98版本,如果手动安装驱动可以参考官网指南。这个网址下载驱动:...
  • title: 如何在Linux安装最新NVIDIA驱动–转载+跳坑经验 copyright: true tags: ubuntu abbrlink: 18e77cfa date: 2019-01-03 20:24:43 好久没更blog了,忙一些项目啥的,之前从Ubuntu16.04更新到Ubuntu18.04,N...
  • Linux下编译安装驱动的两种方式

    千次阅读 2016-02-18 11:10:44
    linux 编译安装驱动有两种,动态加载与静态加载 动态加载 一,编译,指点内核树下编译,生成.o文件或.ko文件 二,将生成的.o或.ko文件拷到相应目录,一般是/lib/module/kernel下面 三,用insmod命令加载,用...
  • Linux安装USB网卡驱动

    万次阅读 2010-09-02 00:11:00
    第一次在Linux平台上安装USB网卡驱动并配置USB网卡
  • 在linux安装了nvidia 显卡驱动之后,遇到过开机一直是循环登录的状态,或者双屏模式只有一个主显示屏能正常启动的情况。于是决定卸载显卡驱动。如果是循环登录的时候: 1. 进入循环登录的界面后,按住Ctrl+Alt+...
  • linux如何安装声卡驱动

    千次阅读 2009-08-10 03:54:00
    Linux系统对硬件设备的支持特性而言,对声卡的支持是很糟糕的。不过现在好了,有两种驱动程序可以弥补Linux系统的不足。一种是OSS(开放声音系统),一种是ALSA... 一、安装OSS声卡驱动程序 1.从http://www.open...
  • Linux系统安装,教你安装一个属于自己的Linux系统

    万次阅读 多人点赞 2018-03-04 00:50:43
    一、Linux的简介 1.Linux抽象解释 肯定有人和我一样,很早就听说过Linux的这个词,但是又没接触过。然后随手百度一下看着满满的命令惊呆了,不知道从哪里开始学习。这种状况一直维持到我面试的时候,我不怕跟...
  • Linux其实在安装时大多数预装了nouveau驱动可支持英伟达显卡,但是该驱动性能较差。所以如何安装最新版英伟达驱动呢?下面我将来逐一介绍。 一、禁用nouveau驱动并清除英伟达驱动残留 电脑自带的nouveau需要禁用...
  • IntelLinux显卡驱动安装指南

    千次阅读 2015-01-19 15:05:25
    通常情况下,Intel显卡驱动已经被集成在Linux发行包里面了,用户无需单独安装。 这篇指导是为那些自己从头开始编译最新版本驱动的人而写的。当你想订制显卡驱动或者了解更多的时候,这篇文章就会管用。  本篇第3...
  • Linux】万兆网卡82599驱动安装

    万次阅读 2018-08-01 23:26:38
    Debian系的Linux中编译并安装ixgbe驱动的教程 遇到bug 实测可以使用的: failed to load because an unsupported SFP+ module type was detected.的解决 warning信息 Debian系的Linux中编译并...
  • debian linux 下面安装摄像头

    千次阅读 2007-10-08 21:38:00
    摄像头是天敏的minicom,硬件像素30万,插值像素48万。最大分辨率640x480.参考文档:http://www.knowsky.com/340088.html 安装驱动的过程如下: 软件包...apt-get 安装以后,/usr/src/下面驱动的源码包。解压后 
  • Linux安装USB无线网卡驱动安装小记

    千次阅读 2015-04-28 22:48:17
    第一种:下载跟你网卡芯片适配的驱动源码,自己编译,安装,事实证明此方法较为复杂; 第二种:直接下载跟网卡芯片适配的rpm包(除ubuntu之外都可以用)、deb安装包(ubuntu),然后rpm或者dpkg安装即可,这种方法简单...
  • 编译Linux 驱动有两种方法,一种是使用petalinux直接编译进入内核中,第二种是外部通过arm内核编译之后,insmod加载进入内核。 我使用的是ZYNQ芯片,芯片中跑Linux系统,我想解决的目标是通过DMA驱动从PS端传输...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 213,206
精华内容 85,282
关键字:

在linux下面怎么安装驱动

linux 订阅