驱动程序_驱动程序包 - CSDN
精华内容
参与话题
  • 1.驱动程序概念介绍

    2018-07-21 12:43:57
    引言 u-boot的任务是启动内核,内核的任务是启动应用...应用程序中需要打开led灯,就需要open函数,在内核中的驱动程序中也有对应的led_open函数,这个led_open函数就是用来负责初始化led的引脚功能, 应用程序中要...

    引言

    u-boot的任务是启动内核,内核的任务是启动应用程序,应用程序会涉及很多文件和硬件操作(当然不会直接操作硬件),比如读写文件,点灯、获取按键值。

    比如对于控制led灯的用户程序与驱动程序,最简单的实现方法是:

    • 应用程序中需要打开led灯,就需要open函数,在内核中的驱动程序中也有对应的led_open函数,这个led_open函数就是用来负责初始化led的引脚功能,
    • 应用程序中要调用read函数读取led灯的状态,内核中的驱动程序也有led_read函数。这是应用程序与内核中驱动程序一种最简单的对应方式.

    那么应用程序中的openread函数最终怎样调用到驱动程序中的led_openled_read呢,中间有哪些东西?


    Linux的分层

    在linux中共有4层软件,如下图:这里写图片描述

    应用程序:就是被调用的那些库函数,例如openreadwrite… …
    C库(系统调用):其中的其实就是实现openread这些函数来调用swi val指令进入内核(函数不同val值都会不同)
    内核: 内核根据swi后面不同的值去调用VFS中的system_open/system_read/ system_write等异常处理函数 找到相应的驱动程序(VFS:virtual file system 虚拟文件系统)

    例如:

    int main(){
     int fd1  fd2;
     int   val=1;
     fd1 = open(“/dev/led”,O_RDWR);    //打开led
     write(fd1, &val, 4);
     fd2 = open(“hello.txt”,O_RDWR);  //打开文本
     write(fd2, &val, 4);
    }
    

    上面的应用程序主要实现点灯与打开文本文件,都是用的同样的函数。但是点灯与打开文本文件的行为显然不一样。那么谁来实现这些不一样的行为呢?
    对于LED灯,有led_open驱动程序。对于文本文件存在于flash设备上,也有对于的驱动程序。system_opensystem_read最终会根据打开的不同文件,找到底层的不同驱动程序,然后调用驱动程序中的硬件操作函数,比如led_open来实现对具体硬件设备的操作。
    这就是整个的字符设备驱动程序框架
    例如LED如下:
    这里写图片描述

    在应用层应用程序中有openreadwrite
    同样,在驱动程序中也对应有led_openled_readled_write
    剩下的就是驱动框架了。
    下一节开始讲解驱动框架,然后写出led驱动程序

    展开全文
  • 驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”,它是一种特殊的程序。首先其作用是将硬件本身的功能告诉操作系统,接下来的主要功能就是完成硬件设备电子信号与操作系统及软件的高级编程语言之间的...

    驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”,它是一种特殊的程序。首先其作用是将硬件本身的功能告诉操作系统,接下来的主要功能就是完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。

    所以简单的说驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。


    展开全文
  • 理解驱动程序(个人理解)

    千次阅读 2018-08-30 18:31:47
    理解驱动程序最重要的一句话是,寄存器是软件控制硬件的唯一途径。所以如何控制显卡,答案就是靠读写显卡提供的寄存器。   通过什么读写呢?据我所知的目前的显卡驱动,基本没有用低效的端口 IO 的方式读写。现在...

    理解驱动程序最重要的一句话是,寄存器是软件控制硬件的唯一途径。所以如何控制显卡,答案就是靠读写显卡提供的寄存器。

     

    通过什么读写呢?据我所知的目前的显卡驱动,基本没有用低效的端口 IO 的方式读写。现在都是通过 MMIO 把寄存器映射的内核地址空间,然后用内存访问指令(也就是一般的 C 语言赋值语句)来访问。具体可以参考”内核内存映射,MMIO “的相关资料。

    展开全文
  • 驱动程序开发的步骤

    千次阅读 2016-03-01 09:04:44
    1、建立Linux驱动骨架(装载和卸载Linux驱动)  装载卸载 module_init和moudle_exit宏指定。  装载时进行初始化,如:建立设备文件,分配内存地址空间  卸载时进行释放驱动占用的资源,如:射出设备文件,释放...
    1、建立Linux驱动骨架(装载和卸载Linux驱动)
        装载卸载  module_init和moudle_exit宏指定。
        装载时进行初始化,如:建立设备文件,分配内存地址空间
        卸载时进行释放驱动占用的资源,如:射出设备文件,释放内存地址空间
    2、注册和注销设备文件
        建立设备文件一般在第一步编写的处理Linux初始化工作的函数中完成。
        删除设备文件一般在第一步编写的处理Linux退出工作的函数中完成。
        分别使用misc_register和misc_deregister函数创建和移除设备文件。
    实例代码(创建一个wordcount设备):
        设备文件和普通文件不同,不能使用IO函数简历,需要使用misc_register函数建立设备文件,使用misc_deregister函数注销设备。
    首先定义一些宏和变量

    #define DEVICE_NAME "wordcount"
    //描述与设备文件触发的时间对应的回调函数指针
    //owner:设备事件回调函数应用于哪些驱动模块,THIS_MODULE表示应用于当前驱动模块
    static struct file_operations dev_fops=
    {  .owner = THIS_MODULE  } ;
    //面熟设备文件的信息
    //minor:次设备号  MISC_DYNAMIC_MINOR, 动态生成次设备号  name:设备文件名称
    //fops file_operations 结构体指针
    static stuct miscdevive misc=
    { .minor = MISC_DYNAMIC_MINOR,
        .name= DEVICE_NAME,
        .fops =&dev_fops };
    //初始化Linux驱动
    static int word_count_init(void)
    {
        int ret;  ret=misc_register(&misc);  //建立设备文件
        printk("word_count_init_sucess\n");
        return ret;
    }
       //卸载Liunx驱动
    static void word_count_exit(void)
    {
        misc_deregister($misc);
        printk("word_init_exit_sucess\n");
    }



    注意:这里misc_register和misc_deregister函数是指创建字符设备,若要指定主设备和次设备号需要register_chrdev_region和alloc_chrdev_region函数进行注册和注销设备文件。
    ***这里函数声明使用static,是因为在C语言中声明函数、变量资源,将会一直驻留内存,直到程序完全退出。也就是说多次调用这些资源不用再进行压栈、出栈操作了,提高驱动效率。


    3、指定与驱动相关的信息
        驱动程序是自描述的,通过modinfo命令获取程序的一些基本信息,这些信息通过MODULE_AUTHOR、MODULE_LICENSE等宏磊指定。
    4、指定回调函数
        向设备文件写入数据时会触发“写”事件,Linux系统会调用对应驱动程序的write毁掉函数,其他情况以此类推。
    通过file_operations.read和file_operations.write成员变量可以分别指定读写设备文件要调用的回调函数指针。
    读函数是用户从内核空间拷贝缓存数据cpoy_to_user(buffer, paramter,count),写函数是从用户空间拷贝数据到内核空间copy_from_user(paramer,buffer,count),这个写入只能读出一次,
    echo "asdf" >/dev/wordcount    
    向设备中写字符串
    cat /dev/wordcount
    打印设备中的信息


    5、编写业务逻辑
        具体的业务逻辑与驱动的功能有关,业务逻辑可能由多个函数、多个文件甚至多个Linux驱动模块组成。
    6、编写Makefile文件
        Linux内核元代啊的编译通过Makefile文件定义的
    7、编写Linux驱动程序
        Linux驱动程序可以直接编译进内核,也可以作为模块单独编译。
    8、安装和卸载Linux驱动
        若将Linux驱动编译进内核,只要Linux使用该黑河,驱动程序就会自动装载。如驱动程序以模块单独存在,需要使用insmod或modprobe命令装载Linux驱动模块,使用rmmod命令卸载Linux驱动模块。
    modprobe和insmod的区别
    modprobe是可以加载依赖关系的驱动模块,而insmod只加载指定模块。在使用modprobe装载驱动模块之前,需要先使用depmod命令检测Linux驱动模块的依赖关系。*modprobe只需要写驱动名就好,不需要.ko。

    sudo depmod /demo/.../**.ko
    sudo modprobe **


    前5步编写Linux驱动,后3步运行Linux驱动。


    展开全文
  • 应用程序,操作系统,驱动程序的关系

    千次阅读 多人点赞 2018-07-18 15:39:17
    硬件和软件  计算机资源分为硬件资源和软件资源,硬件资源包括cpu,内存,显卡,网卡,声卡,硬盘等等。... 系统软件就是包各种硬件驱动程序,它们的任务就是用来驱动各种硬件,使硬件完成正常的功能。...
  • 字符设备驱动程序的三种写法

    千次阅读 2018-10-27 06:46:13
    驱动工程师如何去写驱动程序? 要看原理图。确定如何去操作硬件。 对于点亮led灯来说,确定引脚,查看芯片手册,确定如何去操作引脚,要设置哪些寄存器,如何设置这些寄存器才可以让这个引脚输出高电平或者低电平。 ...
  • 驱动程序学习

    2019-02-18 11:04:49
    驱动模型 驱动分类 字符设备驱动 网络设备驱动 块设备驱动 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 字符设备 字符设备是一种按照字节来访问的设备,字符设备则是负责驱动字符设备,这样的驱动...
  • 2014年5月26日 重新整理了文章,之前写的略乱,有些误导人…… 整理了下最近遇到的Intel核显对应的驱动名(型号),很多朋友都装错了 这里说的型号就是设备管理器的这个:
  • 驱动及驱动程序的作用

    千次阅读 2014-04-17 09:31:28
    驱动程序驱动程序是硬件厂商根据操作系统编写的配置文件,是添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。当你安装新硬件时,驱动程序是一项不可或缺的元件。可以说没有驱动程序,计算机中的硬件就...
  • 背景 近日,由于博主的笔记本电脑过于卡顿,升级了128GB的固态硬盘到512GB,重装系统后也需要重装生产力工具——Adobe系列全家桶。 2019年10月,Adobe发布了最新的Adobe Premiere Pro 2020以及其他系列的最新版本...
  • ODBC驱动程序ODBC驱动程序

    千次下载 热门讨论 2020-07-28 23:33:17
    在做软件安装包时,把MySQL ODBC 3.51驱动程序必要的文件一起打进安装包,让用户安装软件的时候,自动在系统ODBC 数据源管理器的连接池添加MySQL ODBC 3.51 Driver驱动程序。 InstallSheild添加MySQL ODBC驱动程序
  • 深入Linux设备驱动程序内核机制 你懂的 好书 今年新书 驱动
  • 自从我的电脑更新系统后,发现通知里总提示:win10显示器驱动程序无法启动改为使用Microsoft基本显示器驱动程序查了半天也没结果,虽然不是很影响平时使用,但电脑亮度调整完后只能再重启一遍才能应用还是让人很不爽...
  • 64位ODBC驱动程序 Access 及 Excel

    千次下载 热门讨论 2020-07-30 23:30:34
    64位windows平台默认不安装Access的64位ODBC驱动,此下载将安装一系列组件,帮助在现有的 Microsoft ... 此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。
  • 此Linux设备驱动程序教程将为您提供有关如何为Linux操作系统编写设备驱动程序的所有必要信息。 本文包含一个易于遵循的实用Linux驱动程序开发示例。 我们将讨论以下内容: 内核日志系统 如何使用角色设备 如何使用...
  • SM总线控制器驱动程序(万能)

    千次下载 热门讨论 2020-07-28 23:30:08
    Intel主板上的SM总线控制器驱动程序
  • 视频驱动
  • 深入Linux设备驱动程序内核机制

    千次阅读 2012-02-21 20:24:16
    深入Linux设备驱动程序内核机制 陈学松 著 ISBN978-7-121-15052-4 2012年1月出版 定价:98.00元 16开 540页 内 容 简 介 这是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在...
  • 如何正确安装驱动程序

    千次阅读 2015-03-25 17:20:37
     当你为你的电脑重新安装了操作系统之后,首先要做的一件事就是安装正确的驱动程序。刚装完操作系统之后,你会在Windows的设备管理器(右键点击“我的电脑”依次选择“属性”-“硬件”-“设备管理器”即可访问到)...
  • PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件) http://www.cnblogs.com/jacklu/p/4687325.html 本篇文章将对PCIe驱动程序的源文件代码作详细解释与说明。整个WDF驱动程序工程共包含4个头...
1 2 3 4 5 ... 20
收藏数 909,848
精华内容 363,939
关键字:

驱动程序