首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux驱动开发: USB驱动开发

四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似...和I2C 总线设备驱动编写一样,所有的USB驱动程序都必须创建的主要结构体是 struct usb_driver,它们向USB 核心代码描述了USB 驱动程序。...struct usb_device_id 设备ID结构原型如下: struct usb_device_id { /* 确定设备信息去和结构体中哪几个字段匹配来判断驱动的适用性,比如是否是HID协议等*...(中断传输方式) 5.1 USB驱动注册框架代码 #include linux/init.h> #include linux/module.h> #include linux/usb.h> /*...在驱动层里先定义光谱仪设备的设备ID和厂商ID,当设备插入时,ID匹配成功,就会调用probe函数,在probe函数里完成设备信息探测,比如: 端点数据传输方向,数据传输大小,传输方式等等。

70.2K20

Linux驱动开发: 块设备驱动开发

块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....Deadline I/O scheduler试图把每次请求的延迟降到最低,同时也会对BIO重新排序,特别适用于读取较多的场合,比如数据库 4....如果需要访问外部硬件,比如: 光盘、磁盘等外部物理设备时,要设置默认的调度器,可以调用blk_init_queue函数分配请求队列。

32.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux驱动开发概述

    字符设备是指必须以串行顺序访问的设备,比如触屏;块设备是指可以以任意顺序访问的设备,即以块为单位进行操作,比如键盘; 字符设备不经过Cache,块设备数据经过Cache。两者的驱动程序设计差异较大。...下图是一个Linux下不同驱动种类的结构关系图: ? 驱动开发所需知识储备 做好驱动程序开发,需要开发者有良好的硬件基础、C语言基础、Linux内核基础以及多任务并发和控制的基础。...,Linux下的驱动程序代码复杂很多。...Linux设备驱动开发的硬件基础 RISC和CISC计算机的区别:RISC指令周期短,代码量大;CISC指令复杂,指令周期长,代码量小。...参考资料: 《Linux设备驱动开发详解》 宋宝华

    2.7K20

    Linux驱动开发-安装驱动参数传递

    一、简介 在Linux下进行C语言开发时,经常在命令行传递参数给C程序,常见的Linux命令也是需要传参的,这样用起来就很灵活,根据不同的参数可以执行不同的效果。...Linux驱动安装时也支持传递参数,和命令行上运行的命令原理类似。 只不过在编写驱动的时候,需要在驱动代码里提前将相关信息声明好才可以使用。...这篇文章就介绍如果在命令安装驱动时,传递参数给驱动代码,演示各种类型的参数传输情况。 在驱动代码里声明传入参数的类型、权限,接收的变量名称。.../kernel.h> #include linux/module.h> #include linux/miscdevice.h> #include linux/fs.h> #include <asm...author: wbyq depends: vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8

    15.5K40

    Linux驱动开发入门 demo

    驱动开发时候,尽量选择对应操作系统内核的Linux系统作为上位机平台 下载源码与编译 源码的下载可以从网站:https://mirrors.edge.kernel.org/pub/linux/kernel...没有编译过的内核,驱动开发过程中进行编译可能有错误,找不到文件等。 编写一个最简单的驱动 如下是hello.c文件的驱动程序。其中声明了证书,和模块加载后与退出时应该执行的函数。...#includelinux/module.h> #includelinux/kernel.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init...卸载命令为rmmod xxx 模块之间的依赖通信 以下为add_sub.c #includelinux/kernel.h> #includelinux/module.h> #include"add_sub.h...然后修改上层的Makefile文件,添加如下内容: obj-$(ADD_SUB) += add_sub_Kconfig/ 就可以在主目录下执行make menuconfig后,在驱动下找到对应的驱动和编译信息了

    4.3K10

    Linux下驱动开发_块设备驱动开发(内存模拟存储)

    一、前言 块设备驱动块是Linux下3大设备驱动框架之一,块设备主要是针对存储类型的设备设计的驱动,配合文件系统完成数据存储。...所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。 二、编写块设备驱动的思路 既然学到了驱动开发,了解到块设备开发。...在Linux下完成块设备驱动编写,主要是要完成来至文件系统的存储请求,文件系统让你把数据存到那个扇区,你驱动就去存,文件系统让你从那个扇区读取输出来,驱动就去读取。...那么为了方便介绍块设备的驱动开发,我这里会先用malloc在驱动申请一块内存来当做FLASH设备,这样就不需要接任何硬件,降低了难度,纯软件的方式理解驱动框架运作流程。...2.​ 加入SD卡的驱动,配合块设备框架,完成完整的块设备驱动编写。

    4.7K30

    Linux驱动开发-编写OLED显示屏驱动

    本篇文章就介绍,在Linux系统里如何使用OLED显示屏,要使用OLED显示屏,大致分为两步: (1) 针对OLED显示屏编写一个驱动 (2) 编写应用层程序进行测试。...测试开发板采用友善之臂Tiny4412,三星的EXYNOS-4412芯片,4核1.5GHZ,板载8G-EMMC,2G-DDR。 2. 硬件接线效果 3....驱动代码 Linux内核提供了标准SPI子系统框架,和前面介绍的IIC子系统框架使用类似,代码分为设备端和驱动端,Linux内核提供子系统的目的就是为了统一驱动编写标准,提高驱动代码的移植性。...3.1 oled.c 驱动示例代码 #include linux/kernel.h> #include linux/module.h> #include linux/miscdevice.h>...\n"); return -1; } else { printk("提示: lcd驱动卸载成功!\n"); } /*2.

    5.5K20

    Linux驱动开发-proc接口介绍

    当前的实验平台是嵌入式Linux开发板,根文件系统挂载成功后,进入命令就能看到proc目录,这个目录里正常情况下已经生成了很多文件。通过cat命令读取这些文件,可以得到很多内核的信息。...比如:查看中断有哪些注册了,中断从上电到现在响应了多少次,杂项设备注册了哪些,帧缓冲节点有哪些,RTC时间查看,等等。...编写proc接口测试驱动 4.1 案例1 下面驱动代码注册之后,会在proc目录下创建一个tiny4412_proc文件,通过cat读取这个文件,可以打印驱动代码里设置好的信息。...驱动卸载时会删除这个tiny4412_proc文件。...#include linux/kernel.h> #include linux/module.h> #include linux/miscdevice.h> #include linux/fs.h

    4.4K40

    linux misc设备驱动《Rice linux 学习开发》

    misc驱动框架分析 linux中,misc驱动框架的源码:driver/char/misc.c,那么我们来看看这个这个框架是怎么样的。 《1》 misc驱动框架初始化函数:如图1-1。...② 通过函数register_chrdev()注册misc字符设备,其中参数: MISC_MAJOR:主设备号(图1-2),在linux中规定了misc设备的这设备号为10。...图1-1 图1-2 图1-3 《2》 我们来看看open函数究竟做什么事情,如图2-1所示: ① iminor(inode):获取misc设备的次设备号。...图3-1 图3-2 《4》 misc设备框架同样提供了注销misc设备接口,图4-1。 图4-1 misc驱动实现 有了misc驱动框架,一些不知道如何归类的设备,也有了统一。...那么一个简单的led驱动是如何实现的呢? misc驱动必须包含头文件:#includelinux/miscdevice.h> open函数:配置一些GPIO口,然后初始化GPIO的初始值。

    2.1K10

    linux驱动开发之Hello程序

    linux驱动开发之Hello程序 0.说在前面 1.HelloWord 驱动模块组成 驱动模块组成 头文件(必选) 模块参数(可选) 模块功能函数(可选) 其他(可选) 模块加载函数(必选) 模块卸载函数...(必选) 模块许可声明(必选) 引入头文件 #include linux/init.h> /* 定义了一些相关的宏 */ #include linux/module.h> /* 定义了模块需要的...); //GPL版本2许可权 MODULE_LICENSE("GPL and additional rights"); //GPL及其附加许可权 MODULE_LICENSE("Proprietary"...); //专有许可权 helloworld模块编写 #include linux/init.h> /* 定义了一些相关的宏 */ #include linux/module.h> /...*/ } module_init(hello_init); /* 指定模块加载函数 */ module_exit(hello_exit); /* 指定模块卸载函数 */ 2.

    2.6K20

    Linux驱动开发: 杂项字符设备

    在Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述)。...特点:当安装此类驱动后,会在系统的/dev下生成相应的设备节点文件。...五、编写驱动程序 步骤如下: 1)先写一个模块基本代码 2)增加设备模型所需要的头文件 3)在模块的初始化函数注册设备对应结构体 4)在模块的出口注销设备对应的结构 5)按照对应设备模型...针对杂项模型: 1)定义一个struct miscdevice ,并且填充 minor,fops,name成员 2)定义一个 struct file_operations ,并且填充需要成员 3)...驱动程序代码清单 /*驱动代码 misc.c */ #include linux/module.h> /* Needed by all modules */ #include linux

    3.9K10

    Linux驱动开发-编写(EEPROM)AT24C02驱动

    ;在Linux内核里有一套标准的IIC子系统框架专门读写IIC接口设备,采用平台设备模型框架,编写驱动非常方便。...当前开发板采用友善之臂的Tiny4412,CPU是三星的EXYNOS4412,4412是三星的第一款四核处理器,主频是1.5GHZ,稳定频率是1.4GHZ。 2....硬件原理图 当前的开发板上自带了一颗EEPROM存储芯片(具体型号是24AA025E48,代码与AT24C02一样的),原理图如下: 自带的内核里没有内置EEPROM的驱动: 存储芯片的数据手册介绍...示例代码 3.1 EEPROM驱动端代码 #include linux/kernel.h> #include linux/module.h> #include linux/platform_device.h...> #include linux/i2c.h> #include linux/delay.h> #include linux/interrupt.h> #include <asm/uaccess.h

    2.1K30

    Linux驱动开发-编写VS1053芯片音频驱动

    但是没有注册标准的音频驱动,没有对接音频框架,只是在驱动层完成VS1053的直接控制,本篇的重点主要是介绍如何初始化开发板的GPIO口,使用Linux的延时函数,模拟SPI时序,代码写了两种版本,一种是直接通过...demon,友善之臂在基础上完成了移植适配,也就是现在拿到的Tiny4412开发板内核,Linux 版本是3.5,不支持设备树。...可以使用VS1053设计MP3播放器,比如:用在跑步机上听歌,用在便携式音箱里放歌,做复读机、录音笔 等等。...当前我采用的VS1053是正点原子设计的完整模块,方便杜邦线与开发板进行测试。...驱动代码 3.1 驱动端代码 #include linux/init.h> #include linux/module.h> #include linux/ioctl.h> #include linux

    3.1K20

    Linux驱动开发: 编写USB接口光谱仪驱动

    一、环境介绍 宿主机: ubuntu 18.04 (64位) 开发板: Exynos4412(Cortex-A9) ----友善之臂Tiny4412 完整驱动源码+配套上位机下载地址: https:/...,不支持Linux使用,也没有完善的资料,现在设备想在Linux系统下使用,要支持PClinux和嵌入式Linux设备,只能自己重新开发一个驱动再编写一个配套的上位机(上位机是采用QT写的)。...所有就在windows系统下使用USB抓包软件,分析光谱仪设备与windows下软件间的通信数据包,对比命令手册,得到完整的通讯流程,然后再对比编写了一个Linux系统下的驱动。....c #include linux/init.h> #include linux/module.h> #include linux/usb.h> #include linux/sched.h>...#include linux/slab.h> #include linux/miscdevice.h> #include linux/fs.h> #include linux/io.h> #include

    3.7K10
    领券