展开

关键词

详解linux 驱动编写(sd驱动

随着sd的流行,sd卡在嵌入式设备上使用的场景也越来越多。那下面我们可以看一下,linux驱动框架上是怎么处理sd驱动的? obj-$(CONFIG_MMC_S3C) += s3cmci.o 4、根据s3c阅读Kconfig,确认s3c下的sd还依赖哪些文件 config MMC_SDHCI_S3C tristate .set_uhs_signaling = sdhci_set_uhs_signaling, }; 6 、从host角度来说,有了platform driver和上面的host driver,驱动流程就算搞清楚了

49432

31.Linux-wm9876声驱动(移植+测试)

本节学习目的 1)分析Linux中的OSS声卡系统 2)移植wm9876声 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备在一秒钟内对声音信号的采样次数, WM9876声硬件分析 声卡是负责录音、播音、调节音量和声音合成等的一种多媒体板卡  本节使用的声卡是2440板上自带的WM9876声 ? 本节的WM8976的MODE脚接的高电平,所以是3线控制 3.接下来便来分析linux内核的声卡系统 在linux声卡中存在两种声卡系统,一种是OSS(开放声音系统),一种是ALSA(先 进Linux声音架构 是因为, 当注册声卡系统的驱动后,才会有设备节点,此时这里的代码是没有驱动的,后面会分析到 3.2 再来看看“sound”字符设备的file_perations: ? uda1341声和WM8976声非常相似,音频都是I2S接口,就只有控制部分不一样 uda1341声的硬件,如下图所示: ?

1.5K71
  • 广告
    关闭

    腾讯云精选爆品盛惠抢购

    腾讯云精选爆款云服务器限时体验20元起,还有更多热门云产品满足您的上云需求

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

    LINUX驱动

    1.无操作系统时的硬件、驱动、应用软件要满足高内聚、低耦合。 ? 2.有操作系统时的驱动, ? 3.LINUX驱动与整个软硬件的关系 ?

    36720

    Linux驱动开发-编写按键驱动

    编写按键驱动 使用杂项设备注册按键驱动,应用层使用read接口读取按键值。 编写驱动之前需要先找到按键的原理图,找到按键接到CPU那个IO上的。 2.1 按键驱动源代码 #include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #include <linux open=tiny4412_open, .read=tiny4412_read, .write=tiny4412_write, .release=tiny4412_release }; /* Linux KER_DRI=/home/wbyq/work/linux-3.5/linux-3.5 all: make -C $(KER_DRI) M=`pwd` modules cp *.ko /home/wbyq /work/rootfs/code -f make -C $(KER_DRI) M=`pwd` modules clean arm-linux-gcc app.c -o app cp app /home

    13030

    Linux驱动开发: USB驱动开发

    主机,也称为根,根结或根Hub,它做在主板上或作为适配安装在计算机上,主机包含有主控制器和根集线器(Root Hub),控制着USB总线上的数据和控制信息的流动,每个USB系统只能有一个根集线器,它连接在主控制器上 音频类 0x02 CDC控制类 0x03 人机接口类(HID) 0x05 物理类 0x06 图像类 0x07 打印机类 0x08 大数据存储类 0x09 集线器类 0x0A CDC数据类 0x0B 智能类 四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似 当然,这些制造商和设备标识需要我们编写进USB 驱动程序中。 USB 驱动程序依然遵循设备模型 —— 总线、设备、驱动。 鼠标驱动代码: 该模板适用于键盘驱动

    44420

    Linux——Linux驱动之基本理论常识总结(什么是Linux驱动Linux驱动需要掌握哪些?)

    2 Linux驱动程序需要掌握的内容 3 Linux驱动可参考的资源 4 ARM处理器体系架构 5 ARM的前世今生 ---- 0 引言 前面Linux专题中关于Linux下系统编程总结了17篇博文,主要是为了提高 Linux下的C编程应用能力,熟悉Linux编程应用环境,从此篇博文起开始Linux驱动的总结,后面计划加一些综合实践项目练习。 字符设备驱动:大部分都是字符设备,如GPIO、LED、串口、蜂鸣器、声卡等 块设备驱动:存储设备,如U盘、硬盘、TF等 网络设备驱动:通信设备,如wifi、以太网等 2 Linux驱动程序需要掌握的内容 Linux驱动可参考的资源 Linux本身就是一个开源软件,开源的好处大家都知道,资料丰富,我们做Linux驱动开发,能找到技术支持和相应资源的有如下,列出的,对于新手来说,建议最佳的顺序是从1到5: 、结构体,其实Linux驱动,就是掌握了这些东西怎么用,适应到自己要写的驱动程序中。

    22330

    Linux SPI 驱动

    四、指纹SPI设备驱动框架 在对硬件有了较高的基础理解后,其实代码主要就是开始对SPI的接口做的软件实现了。 由于平台厂商通常给我们做好了spicontroller以及spicore部分,接下来的总结主要是针对SPI设备驱动部分的。 代码部分均来自于linuxkernel开源代码https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/? 五、总结 个人理解现在这个科技发展的风口下,手机、IOT、车机等终端设备齐放异彩的大背景下,新终端生态的搭建、基础智能设备的整合、大健康的趋势下,Sensor的发展是一个非常关键的驱动力,基础驱动软件能力的掌握也是重中之重 ,linux给了我们一个很好的平台让我们能在前辈的肩上进行各种高质量的代码学习,我们也需抓住这个机会,在做好本质工作的基础上静心努力钻研,不断前行,祝愿各位也祝愿我自己在技术的道路上越走越远。

    37110

    Linux笔记】Linux驱动基础

    上一篇分享的:从单片机工程师的角度看嵌入式Linux中有简单提到Linux的三大类驱动: ? 我们学习编程的时候都会从hello程序开始。 同样的,学习Linux驱动我们也从最简单的hello驱动学起。 但是,在嵌入式Linux中,驱动和应用的分层是特别明显的,最直观的感受就是驱动程序是一个.c文件里,应用程序是另一个.c文件。 我们前面说了驱动的装载方式之一的动态装载:把驱动程序编译成模块,再动态装载。动态装载的体现就是开发板已经启动运行了Linux内核,我们通过开发板串口终端使用命令来装载驱动。 以上就是分享关于驱动一些内容,通过以上分析,我们知道,其是有套路(就是常说的驱动框架)可寻的,比如: #include <linux/module.h> #include <linux/kernel.h

    1.3K43

    Linux驱动开发: Linux下RTC实时时钟驱动

    /include/linux/rtc.h 定义了与RTC有关的数据结构 Linux内核源码自带的RTC驱动代码存放位置: \linux-3.5\drivers\rtc\目录下全是RTC驱动示例代码 RTC驱动端代码 #include <linux/module.h> /*驱动模块相关*/ #include <linux/init.h> #include <linux/fs.h DS1302驱动端代码: #include <linux/module.h> /*驱动模块相关*/ #include <linux/init.h> #include <linux <linux/platform_device.h> /* 平台设备驱动相关头文件*/ #include <linux/rtc.h> #include <linux/gpio.h> #include GPL"); /*驱动的许可证-声明*/ DS1320设备端代码 #include "linux/module.h" #include "linux/init.h" #include <linux

    38410

    Linux驱动开发: FrameBuffe(LCD)驱动开发

    (前提是framebuffer驱动里实现了read函数) 1.4 如何去操作这个设备文件 对程序员和Linux系统来说,framebuffer设备与其他的文件没有区别;可以通过配置对framebuffer virt_to_phys :物理地址 4.7 示例代码 (1) 驱动代码示例 #include <linux/init.h> #include <linux/module.h> #include < 帧缓冲驱动代码 #include <linux/kernel.h> #include <linux/module.h> #include <linux/miscdevice.h> #include 0.96 寸 OLED屏外观 6.2 OLED驱动代码示例 #include <linux/kernel.h> #include <linux/module.h> #include <linux/miscdevice.h Graphics support  --->                  <*> Samsung S3C framebuffer support 群创S70驱动代码: #include <linux

    33611

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

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

    12140

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

    块设备是与字符设备并列的概念, 这两类设备在 Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念 在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。 但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),在驱动中用request_queue结构体描述。 编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2. 绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。

    14330

    关于Ubuntu16.04上N驱动导致滚动屏幕顿问题

    环境 Ubuntu16.04 1080ti显卡 问题 屏幕显示正常,但是在打开网页或者进行跑深度学习程序的时候画面会发生一一下的情况,严重时出现类似于死机的情况。 查看系统monitor并不现实显存和内存爆表,于是推断为nvidia显卡驱动不兼容的问题。 解决 更换显卡驱动,首先删除有关原来驱动的一些信息: sudo apt-get remove --purge nvidia* 在setting中的软件更新中查看当前可以更新的nvidia驱动 使用如下命令添加 Graphic Drivers PPA sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update 寻找合适的驱动版本(选择 sudo nvidia-smi 注意 需要注意的是,cuda9.1不支持比387版本低的Nvidia-Driver,如果安装了比387版本低的驱动,可能会解决顿的问题,但是有可能无法使用cuda9.1

    3.3K60

    Linux电源驱动-Linux Cpuidle Framework

    前言 现如今,Linux处理器电源管理重点聚焦在处理器处于运行状态时对其进行电源管理,主要的技术是Cpufreq: 根据cpu的负载,实时的改变cpu的频率或这电压,同时管理处理器的性能水平和电源功耗等 面对在火热移动处理器市场的前提下,众多处理器都亟待加入到空闲状态下进行功耗管理,这时候linux系统就需要一套通用的架构来管理这些cpu,这就是本文的标题: Linux Cpuidle Framework linux使用cpuidle_state结构用来表示各个idle状态。 对该cpu下的idle状态,需要一个统一的管理者,这时候cpuidle驱动就来管理该cpu下的各种状态。linux使用cpuidle_driver结构来表示cpuidle的驱动linux系统使用cpuidle_device结构抽象每个cpu core,可以简单认为cpuidle_device对应到每个cpu core上。

    96020

    linux设备驱动第四篇:linux驱动调试方法

    在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢? 下面就根据一个简单的实例来说明如何调试驱动程序。 如何根据oops定位代码行 我们借用linux设备驱动第二篇:构造和运行模块里面的hello world程序来演示出错的情况,含有错误代码的hello world如下: #include <linux/ 以上就是通过oops信息来定位驱动崩溃的行号。 printk的使用方法类似printf,只是要注意一下打印级别,详细介绍在linux设备驱动第二篇:构造和运行模块中已有描述,另外需要注意的是大量使用printk会严重拖慢系统,所以使用过程中也要注意。

    2.9K160

    Linux笔记】LED驱动

    前言 上一篇我们分享了字符设备驱动框架:嵌入式Linux驱动基础,当时分享的是hello驱动程序。 学STM32我们从点灯开始,学Linux驱动我们自然也要点个灯来玩玩,尽量在从这些基础例程中榨取知识,细抠、细抠,为之后更复杂的知识打好基础。 此时我们要编写Linux系统下的led驱动,涉及到硬件操作的地方操作的并不是这些地址(物理地址),而是操作系统给我们提供的地址(虚拟地址)。 若是led_drv.c不用再修改了,那么这个led_drv.c驱动就是一个通用的驱动程序了。具体可查看韦东山老师的《嵌入式Linux应用开发完全手册第2版》第五篇第3~7节进行学习。 谢谢 参考/学习资料: 百问网《嵌入式Linux应用开发完全手册第2版》 正点原子《I.MX6U嵌入式Linux驱动开发指南V1.2》 野火《i.MX Linux开发实战指南》

    45521

    Linux驱动开发概述

    原文出处:http://www.cnblogs.com/jacklu/p/4722563.html Linux设备分类 设备的驱动程序也要像裸机程序那样进行一些硬件操作,不同的是驱动程序需要"融合进内核里 下图是一个Linux下不同驱动种类的结构关系图: ? 驱动开发所需知识储备 做好驱动程序开发,需要开发者有良好的硬件基础、C语言基础、Linux内核基础以及多任务并发和控制的基础。 Linux上浏览内核源码,推荐使用的工具是vim+cscope或者vim+ctags。 有无操作系统的驱动程序区别 下面以led驱动为例,来说明有无操作系统的区别。 ,Linux下的驱动程序代码复杂很多。 参考资料: 《Linux设备驱动开发详解》 宋宝华

    71620

    19.DM9000网驱动移植

    3.修改驱动的硬件相异性(设置基地址,寄存器,中断等) 3.1先来找找代码在哪里初始化DM9000C硬件的 进入dm9000c_init() -> dmfe_probe() 其中dmfe_probe 3.6修改中断   当使用了register_netdev()注册了网卡驱动net_device后,在内核中使用ifconfig就会进入net_device->open成员函数申请中断,激活队列等    (PS:若DM9000C无法驱动,可能是Tacc时间太短,导致读取不到数据,可以将Tacc设大一点)   与硬件相关的部分已经改好了,接下来开始编译 五、编译测试 编译之前,首先添加该驱动需要的内核头文件 : #include <asm/delay.h> #include <asm/irq.h> #include <linux/irq.h> #include <asm/io.h> #include <asm /arch-s3c2410/regs-mem.h> 编译无误后,便开始测试DM9000C驱动程序: 把dm9dev9000c.c放到内核的drivers/net目录下,来替换原来内核的DM9000C

    31120

    Linux驱动开发: 网络设备驱动开发

    # ifup eth0 //开启eth0网 # ifdown eth0 //关闭eth0网 二、查看内核已经支持的网卡驱动 进入到内核配置菜单目录下: [root@wbyq linux 2302/25A1 based cables < > MosChip MCS7830 based Ethernet adapters 三、移植ENC28J60网驱动 ENC28J60网源码就存放在: /linux-3.5/drivers/net/ethernet/microchip目录下 [root@wbyq microchip]# pwd /work/Tiny4412 Net_test_init); module_exit(Net_test_exit); MODULE_AUTHOR("xiaolong"); MODULE_LICENSE("GPL"); 6.3 ENC28J60网驱动代码 printk("ENC28J60网初始化失败!

    18910

    相关产品

    • 物联卡

      物联卡

      物联卡是基于运营商提供物联网专用号段的物联网通信业务,该业务支持短信、无线数据通信等基础通信服务。可用于各种物联网设备的应用场景,如车联网、智能家居、穿戴设备、共享单车、移动支付、环境监测和智慧农业等。

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券