D35: Linux字符设备驱动
文章平均质量分 57
Linux初级字符设备驱动
静思心远
嵌入式&&人工智能
展开
-
linux基础驱动
linux基础驱动驱动需要了解的基础知识最小系统组成低速接口高速接口驱动需要了解的基础知识最小系统组成低速接口UARTI2CSPIUSB高速接口MIPIPCIE3.0HDMISATA原创 2022-03-10 09:01:06 · 380 阅读 · 0 评论 -
串口波特率96001秒传输多少字节
注意前置条件为:1个起始位,8个数据位,0个校验位,1个停止位,也就是我们常说的:8,N,1;8个数据位,一个停止位,无校验位。1个char 需要10bit。115200 1秒可以发送115200位,那么用115200/10=11520,就是1秒可以发送11520个字节数据,11.25*1024。9600 1秒可以发送9600位,那么用9600/10,就是1秒可以发送960个字节数据,则每发送一个字节需要的时间就是:1/960。串口传输1个字符格式包含10位(1个起始位,1个停止位,8个有效数据位)原创 2024-01-04 20:52:09 · 3117 阅读 · 0 评论 -
驱动调试的一点总结
驱动开发原创 2022-12-09 22:25:22 · 785 阅读 · 0 评论 -
嵌入式现状与发展浅议(原理、协议、框架、思路)
嵌入式现状与发展浅议嵌入式现状与发展浅议1.嵌入式驱动工程师:嵌入式系统工程师:嵌入式应用工程师:嵌入式现状与发展浅议嵌入式软件开发具体可以分三类:1.嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如 I2C 协议)、系统调度、信号量、锁机制等等,开发难度最大。该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指 Linux 上的驱动开发工程师,需要精通 Linux 驱动框架(platform 框架、input 子系统框架等转载 2021-08-29 21:57:42 · 532 阅读 · 0 评论 -
UART, SPI, IIC的详解及三者的区别和联系
UART, SPI, IIC的详解及三者的区别和联系1、UART, SPI, IIC的详解2、UART, SPI, IIC的区别与联系:第一个区别当然是名字:第二,区别在电气信号线上:1、UART, SPI, IIC的详解UART、SPI、IIC是经常用到的几个数据传输标准,下面分别总结一下:UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试。主机和从机至少要接三根线,RX、TX和GND。TX用于发送数据,RX用原创 2022-03-10 14:59:21 · 6387 阅读 · 0 评论 -
Linux内核中设备树DTS
Linux内核中设备树DTS一、引言二、设备树的组成三、使用deb的启动流程四、DTS的结构1、compatible 属性 :2、子节点五、操作节点1、GPIO资源2、中断3、DTS中自定义属性的设置与获取from一、引言自Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts,今天来详细分析一下设转载 2021-10-12 16:08:58 · 1946 阅读 · 0 评论 -
二.1输入子系统
input.c/* 参考drivers\input\keyboard\gpio_keys.c */#include <linux/module.h>#include <linux/version.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/interrupt.h>#include <linux/irq.h>#include <原创 2020-08-29 14:46:53 · 222 阅读 · 0 评论 -
RTC应用开发
RTC应用开发RTC的作用及时间表示系统时间操作命令硬件时间操作命令RTC的作用及时间表示 “RTC”的英文全称是Real-Time Clock,翻译过来是实时时钟芯片。实时时钟芯片是日常生活中应用最为广泛的电子器件之一,它为人们或者电子系统提供精确的实时时间。实时时钟芯片通过引脚对外提供时间读写接口,通常内部带有电池,保证在外部系统关电时,内部电路正常工作,时间正常运行。不同的时钟芯片内部机制不一样,时间数据存储格式、读写操作方式也不一样,Linux系统和驱动封装了不同时钟芯片的操作细节,为应用程序转载 2022-01-05 18:40:04 · 390 阅读 · 1 评论 -
linux内核驱动
linux内核驱动模块linux/drivers 驱动模块常用的驱动linux/drivers 驱动模块驱动模块大概有30-50个,但是常用的就10来种,搞懂常用的几个,项目基本够用。常用的驱动GPIOUARTI2CSPIUSBLCDWIFI/bluetoothETHPower大多数驱动设备都用了2个以上的驱动模块,摄像头就用了 MIPI+I2C两种驱动。4/5G 用了USB+虚拟串口驱动....原创 2022-01-04 19:50:36 · 792 阅读 · 0 评论 -
嵌入式Linux驱动难?到底难在哪?
驱动入门难在:如何通过自己的学习能力搭建起环境,并理解一个LED驱动。 深入驱动难在:对内核的理解,对特定协议的认识。新手的想法最近看到论坛和群里一些人在说驱动难,个别人提出提供的入门资料还是难以入门。作为嵌入式linux驱动学习的新人,可能心里都有自己的想法,期望有一个自己心中完美的资料来帮助自己入门。然而,每个人基础不同,悟性不同,对待 问题的态度不同,所以根本难以一个教程满足所有人。但是总结来说,就是新手可能更希望从现象出发,从最高层出发,从应用出发,然后到底层驱动是如何调用下来的转载 2020-09-02 13:24:52 · 6125 阅读 · 0 评论 -
驱动读写数据
驱动学习总结1.驱动框架总结2.platfrom驱动1.驱动框架总结驱动模型:1.入口函数退出函数2. 注册进内核( 链表 )3. 构造file_operation4. 实现file_operation中函数接口(函数指针,回调函数)APP层: open read/write ioctl驱动层 : drv_opendrv_read / drv_writedrv_ioctl实例分析:韦东山第一个程序#include <linux/module.h>#include &原创 2021-01-14 17:23:54 · 485 阅读 · 0 评论 -
三.1platform_device_driver
平台设备驱动1.优点2.led_dev.c3.led_drv.cMakefileled_test1.优点优点:在之前的基础上,加了一层框架模型,将寄存器和驱动分离,这样的好处是可以适配更多的驱动,方便扩展。2.led_dev.c#include <linux/module.h>#include <linux/version.h>#include <linux/init.h>#include <linux/kernel.h>#include原创 2021-01-07 17:26:06 · 124 阅读 · 0 评论 -
7 buttons 定时器消抖
buttons 定时器消抖button.cMakefiletest_buttonbutton.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/uaccess原创 2021-01-07 16:51:23 · 182 阅读 · 0 评论 -
6.six_drv 互斥锁
six_drv 互斥锁sixthdrv.cMakefilesixthdrvtest.csixthdrv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/ua原创 2021-01-07 16:46:59 · 128 阅读 · 0 评论 -
5.fifthdrv.c同步
同步1.fifthdrv.c2.Makefile3.fifthdrvtest.c1.fifthdrv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/uac原创 2021-01-07 16:44:28 · 111 阅读 · 0 评论 -
4.forth_drv 按键(poll检测)
@toc1.drv2.Makefile3.app原创 2021-01-07 11:49:28 · 107 阅读 · 0 评论 -
3.third_drv按键驱动
third_drv按键驱动1.third_drv.c2.Makefile3.thirddrvtest.c1.third_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#includ原创 2021-01-07 11:41:29 · 141 阅读 · 0 评论 -
2. second_drv read(buttons)
读按键状态1.read1.read//second_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#include &l原创 2021-01-06 16:15:02 · 97 阅读 · 0 评论 -
Linux驱动之定时器(mod_timer)
文章摘自一下几位网友。非常感谢他们。http://blog.sina.com.cn/s/blog_57330c3401011cq3.html#include<linux/timer.h>struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(un转载 2020-08-29 22:14:03 · 661 阅读 · 0 评论 -
JZ2440下载程序到开发板的3种方法
1.使用mount命令进行挂载①开发板必须要和虚拟机、电脑在同一个网段内(相互可以ping通)②将要下载到开发板的程序放到指定目录,这个目录需要在/etc/exports中指定,否则无法被挂载②然后在开发板上执行以下命令,要下载的程序就在开发板的/mnt目录里了mount -t nfs -o nolock,vers=2 192.168.1.100:/design/tools /mnt2.利用SecureCRT上传、下载文件①下载rzsz-3.48.tar.gz:http://downloa..转载 2020-08-29 17:13:18 · 1079 阅读 · 0 评论 -
1.first_drv write(LED驱动)
first_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#include <asm/io.h>#incl原创 2020-09-01 22:52:25 · 238 阅读 · 0 评论 -
linux中如何在fb上显示
framebuffer 帧缓冲https://blog.csdn.net/readnap/article/details/83006523帧缓冲(framebuffer)是Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。 framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构,可以通过fra...转载 2020-08-20 13:50:57 · 4992 阅读 · 0 评论 -
初识linux输入子系统
一、初识linux输入子系统linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler)、输入子系统核心层(InputCore)和输入子系统设备驱动层。对于输入子系统设备驱动层而言,主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层。即将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。对于核心层而言,为设备驱动层提供了规范和接口。设..原创 2020-07-16 23:07:15 · 294 阅读 · 0 评论 -
unable to handle kernel paging request at virtual address fffffff3
内核崩溃了,不知道为什么?原创 2020-07-13 19:17:31 · 1213 阅读 · 0 评论 -
全志A10/A20 Bootloader加载过程分析
原文 : http://blog.csdn.net/allen6268198/article/details/12905425从这里开始:http://linux-sunxi.org/Bootable_SD_card代码仓库:https://github.com/linux-sunxiA10/A20 Bootloader加载过程分析注:由于全志A10和A20在加载转载 2017-01-20 16:06:46 · 1065 阅读 · 0 评论 -
DVFS--动态电压频率调整
Linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时间的工作主要在机制上。暂时想实现的主要的机制有:cpu级,设备驱动级,系统平台级。管理颗粒度不断递增,形成三驾马车齐驱的形势。 cpu级:主要实现比较容易的在系统处于目标在于频繁发生、更高粒度的电源状态改变,主要的实现方式为idle,包括今天的主要想讲的动态主频。转载 2017-01-21 10:01:44 · 801 阅读 · 0 评论 -
内核调试的几种方法
1.首先在编译生成内核的时候同时生成了一个vmlinux,使用gdb。 在内核配置时,make menuconfig 要打开complie with debug info选项。 注意这行: PC is at skb_release_data+0x74/0xc4 这告诉我们,skb_release_data函数有0xc4这么大,而Oops发生在0x74处。 那么我原创 2017-01-21 14:31:58 · 3120 阅读 · 0 评论 -
内核调试的一些配置
学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。1 内核配置为了实现内核调试,在内核配置上增加了几项: Kernel hacking ---> [*] Magic SysRq key [*]原创 2017-01-21 14:41:07 · 443 阅读 · 0 评论 -
Linux的cpufreq(动态变频)技术
linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时间的工作主要在机制上。暂时想实现的主要的机制有:cpu级,设备驱动级,系统平台级。管理颗粒度不断递增,形成三驾马车齐驱的形势。 cpu级:主要实现比较容易的在系统处于目标在于频繁发生、更高粒度的电源状态改变,主要的实现方式为idle,包括今天的主要想讲的动态主频。设备驱动级:主要原创 2017-01-21 14:47:15 · 1215 阅读 · 0 评论 -
Linux设备树语法详解
概念Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM L转载 2017-08-10 16:06:12 · 566 阅读 · 0 评论