
嵌入式linux驱动
文章平均质量分 70
wwwlyj123321
这个作者很懒,什么都没留下…
展开
-
sysfs系统
所以,内核开发人员觉得有必要使用一个独立的抽象接口来描述设备和驱动信息,毕竟直到目前,驱动代码在内核代码中占比非常大,内容也是非常庞杂。与ext系列和fat等文件系统不同的是,sysfs是一个系统在启动时构建在内存中虚拟文件系统,一般被挂载在/sys目录下,既然是存储在内存中,自然掉电不保存,不能存储用户数据。事实上,在之前也有同样的虚拟文件系统建立了内核与用户系统信息的交互,它就是procfs,但是procfs并非针对设备和驱动程序,而是针对整个内核信息的抽象接口。原创 2024-08-31 21:43:30 · 314 阅读 · 0 评论 -
pwm子系统
ref:原创 2024-08-24 21:46:56 · 437 阅读 · 1 评论 -
linux 流量控制
Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,比如,数据包的接收速率、发送速率、多个数据包的发送顺序等。原创 2022-10-25 16:58:19 · 1596 阅读 · 0 评论 -
linux网络设备驱动(三)
ops->ndo_start_xmit(驱动层的发送函数 net_device_ops.ndo_start_xmit)原创 2022-10-24 17:37:48 · 807 阅读 · 0 评论 -
Linux中的workqueue优先级
ref:Linux的高优先级workqueue_归云十九少的博客-优快云博客_workqueue优先级Linux内核高优先级线程的应用_归云十九少的博客-优快云博客_kthread优先级任务工厂 - Linux中的workqueue机制 [二] - 知乎Linux Workqueue - 魅族内核团队原创 2022-10-18 16:34:42 · 801 阅读 · 0 评论 -
【无标题】
ref:从Ftrace开始内核探索之旅Linux内核开启DebugFS以及查看debug信息(/sys/kernel/debug及debugfs)_Mculover666的博客-优快云博客_sys/kernel/debug/Linux内核调试工具——Debugfs_IT技术分享网原创 2022-09-20 22:08:45 · 90 阅读 · 0 评论 -
linux网络设备驱动(二)
设备驱动的注册与注销网络设备驱动的注册与注销由 register_netdev( ) 和 unregister_netdev( ) 函数完成,这两个函数的原型为:int register_netdev(struct net_device *dev);void unregister_netdev(struct net_device *dev);这两个函数都就收一个net_device结构体指针为参数,可见net_device数据结构体在网络设备驱动中的核心地位。net_device...原创 2022-04-16 21:29:26 · 876 阅读 · 0 评论 -
等待队列浅析
一、等待队列的由来Linux 内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。 等待队列头和等待队列项中都包含一个 list_head 类型的域作为”连接件”。它通过一个双链表和把等待 task的头,和等待的进程列表链接起来。等待队列头就是一个等待队列的头部,每个访问设备的进程都是一个队列项,当设备不可用的时候就要将这些进程对应的等待原创 2022-04-16 10:05:49 · 1509 阅读 · 0 评论 -
linux网络设备驱动(一)
include/linux/netdevice.h中定义了net_device结构体,他是网络设备驱动程序中最重要的结构。该结构体,存储着网络设备的所有信息,每个网络设备都有这种结构。所有设备的net_device结构放在一个全局变量dev_base所有全局列表中。结构体中有一个next指针,用来连接系统中所有网络设备。内核把这些连接起来的设备组成一个链表,并由全局变量dev_base指向链表的第一个元素。每个网络设备都会有一个对应的实例,然后调用register_netdevie()(定义与文件n原创 2022-04-10 16:53:30 · 6349 阅读 · 0 评论 -
linux内核定时器
一、内核定时器简介:Linux 内核定时器使用很简单,只需要提供超时时间(相当于当前时刻)和定时处理函数即可,当超时时间到了以后设置的定时处理函数就会执行。在使用内核定时器的时候要注意一点,内核定时器并不是周期性运行的,超时以后就会自动关闭,因此如果想要实现周期性定时,那么就需要在定时处理函数中重新开启定时器。二、几个基础概念linux系统上,有两个非常重要的时间,墙上时间和系统运行时间。系统运行时间:自系统启动开始所经过的时间墙上时间:指当前时刻,可以通过ntp服务器获取,获取后可原创 2022-04-09 12:13:41 · 3464 阅读 · 0 评论 -
linux内核中断(二)
一、linux中断处理机制1、最简单的中断机制最简单的中断机制就是像芯片手册上讲的那样,在中断向量表中填入跳转到对应处理函数的指令,然后在处理函数中实现需要的功能。类似下图:这种方式在原来的单片机课程中常常用到,一些简单的单片机系统也是这样用。它的好处很明显,简单,直接。2、上下半部机制中断处理函数所作的第一件事情是什么?答案是屏蔽中断(或者是什么都不做,因为常常是如果不清除IF位,就等于屏蔽中断了),当然只屏蔽同一种中断。之所以要屏蔽中断,是因为新的中断会再次调用中断处理函数,原创 2022-04-04 10:28:48 · 1636 阅读 · 0 评论 -
linux内核中断(一)
一、中断简介中断是指 CPU 在执行程序的过程中,出现了某些突发事件急待处理,CPU 必须暂停当前程序的执行, 转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。由于中断的存在极大的提高了 CPU 的运行效率,但是设备的中断会打断内核进程中的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍。 二、中断上下文为保证系统实时性,中断服务程序必须足够简短,但实际应用中某些时候发生中断时必须处理大量的 事物,这时候如果都在中断服务程序中完成,则会严重降低中断的实时性原创 2022-04-03 20:44:46 · 3962 阅读 · 0 评论 -
ioctl接口
一、定义ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。简言之就是对设备的一些特性进行管理,例如传感器的数据采集频率、串口波特率、停止位等等。通常来说,使用read write接口,来读写数据;使用ioctl接口设置一些属性等等。 ioctl接口既可以读,也可以写,但是读写大数据的效率不如使用read write接口高。需要注意的是:新内核中file原创 2022-03-26 18:18:03 · 3044 阅读 · 0 评论 -
嵌入式linux驱动之———字符设备驱动(二)
头文件在#include<linux/io.h>原创 2022-03-12 21:29:50 · 408 阅读 · 0 评论 -
嵌入式linux驱动之———杂项设备驱动
杂项设备是字符驱动的一种,可以自动生成设备节点(/dev/目录)。杂项设备的主设备号相同,都是10。次设备号不同原创 2022-03-12 17:56:27 · 201 阅读 · 0 评论 -
kBuild
ref:linux kernel: defconfig和.config_ARM-Linux-优快云博客_kernel 生成deconfigKbuild Building System | tcbbd的博客修改Linux Kernel defconfig的标准方法 - 覃谈谭的bloghttp://embeddedguruji.blogspot.com/2019/01/make-config-vs-oldconfig-vs-defconfig.htmlLinux Kernel...原创 2022-02-21 20:58:06 · 187 阅读 · 0 评论 -
Select函数
用法:int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);作用:用来够监视我们需要监视的文件描述符(读或写的文件集中的文件描述符)的状态变化情况。并能通过返回的值告知我们。参数解释:int maxfdp:集合中所有文件描述符的范围,为所有文件描述符的最大值加1。fd_set *readfds:要进行监视的读文件集。fd_set *writefds.原创 2022-02-14 18:06:22 · 317 阅读 · 0 评论 -
IIC总线实现client设备
加载设备树之后,在sys/bus/i2c/devices目录下就可以看见iic设备了原创 2022-02-12 19:15:59 · 1057 阅读 · 0 评论 -
Linux应用程序直接调用I2C控制器实现的设备驱动
应用层操作IIC是以数据包进行交流的,对应的结构体://include/linux/i2c-dev.h/* This is the structure as used in the I2C_RDWR ioctl call */struct i2c_rdwr_ioctl_data { struct i2c_msg __user *msgs; /* pointers to i2c_msgs */ __u32 nmsgs; /* number of i2c_msgs */};//inc原创 2022-02-12 18:30:58 · 4492 阅读 · 0 评论 -
pinctrl子系统和gpio子系统
linux内核提供的进行gpio驱动开发的框架reflinux内核中的GPIO系统之(4):pinctrl驱动的理解和总结Pinctrl 和 GPIO 使用手册 — 矽昌通信原创 2022-02-12 16:32:14 · 4051 阅读 · 0 评论 -
平台总线platform
struct platform_device { const char *name; int id; bool id_auto; struct device dev; u64 platform_dma_mask; struct device_dma_parameters dma_parms; u32 num_resources; struct resource *resource; const struct platform_device_id *id_entry; ch...原创 2022-02-12 14:55:47 · 354 阅读 · 0 评论 -
基于设备树和platform设备驱动
ref:Linux下ZYNQ中GPIO中断号获取_下雨夏云的博客-优快云博客_irq_of_parse_and_maplinux gpio_to_irq()源码分析_手中沙的博客-优快云博客_gpio_to_irq设备树中的GPIO_wufse的博客-优快云博客_gpio 设备树Linux驱动开发(十):设备树下的platform平台设备驱动_a568713197的博客-优快云博客...原创 2022-02-09 13:00:58 · 509 阅读 · 0 评论 -
设备树介绍
一、背景介绍二、工作流程通常由.dts文件以文本方式对系统设备树进行描述,经过Device Tree Compiler(dtc)将dts文件转换成二进制文件binary device tree blob(dtb),.dtb文件可由Linux内核解析,有了device tree就可以在不改动Linux内核的情况下,对不同的平台实现无差异的支持,只需更换相应的dts文件,即可满足。在系统启动的时候,bootloader将dtb传递给内核,内核解析改文件得到一个个的device_node,.原创 2022-02-07 11:31:00 · 2619 阅读 · 0 评论 -
spi驱动
ref:Linux中的SPI: VFD驱动开发快速入门 [暮光小猿Linux开发系列]_哔哩哔哩_bilibililinux SPI驱动框架(二) -- 设备驱动_flaoter的博客-优快云博客Linux内核SPI支持概述 - 冷烟花 - 博客园linux spi子系统_yuanlulu的博客 -优快云博客_linux spi子系统...原创 2022-01-27 21:18:21 · 690 阅读 · 0 评论 -
defconfig和.config
ref:linux kernel: defconfig和.config_ARM-Linux-优快云博客_kernel 生成deconfig[内核向] 论如何优雅的玩转defconfig - AKR社区defconfig、 .config 、kconfig 与makefile和make menuconfig流程_你的灯在亮-优快云博客_defconfig文件kernel/uboot关于defconfig的几个问题? - llc_no1 - 博客园什么是make config,m...原创 2022-01-27 16:20:41 · 1318 阅读 · 0 评论 -
安卓内核模块
在内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。 在内核编译时,主Makefile调用这个.config,就知道了用户的选择。假如想使这个驱动被编译,则要修改Makefile文件,因此,需要添加新的驱动时,需要修改的文件有两个:Kconfig,Makefile.ref:Linux内核配置Kconfig语法_诗歌年华-优快云博客_kconfig内核模块 (三) 安卓环境下编译ko文件_u011011827的博客-原创 2022-01-27 14:50:00 · 3546 阅读 · 0 评论 -
nand flash基础时序
一、综述nand flash的8个I/O(IO0 - IO7,在NV-DDR, NV-DDR2, and NV-DDR3规范里面又叫做DQ0-DQ7)是复用的,也就是说可以传数据,也可以传地址,也可以传命令。为了进行区分,引入了CLE(Command Latch Enable)、ALE(Address Latch Enable)两个管脚。CLE ALE DQ数据总线上的内容含义 高电平 低电平 命令 低电平 高电平 地址 低电平 低电平 数原创 2021-09-14 21:31:22 · 7341 阅读 · 0 评论 -
nand flash常用命令-read id和read UID命令
一、read idread id命令的命令码为90h,地址可以有两个,其含义分别如下表所示:CMD ADDR 含义 90h 20h 用于确定设备时候是否onfi的,以及nand在哪种接口模式下power on 00h 确定JEDEC制造商ID和设备ID SDR, NV-DDR, NV-DDR2, or NV-DDR3接口模式下都支持该命令。1、90h(cmd) -20h(addr)在onfi 4.0之前的nand flash,发送 90h...原创 2021-09-14 20:45:07 · 6417 阅读 · 0 评论 -
nand flash常用命令-复位命令
nand flash的复位命令包括Reset、Synchronous Reset和Reset LUN三种:一、Reset 命令码 功能描述 是否切换数据接口模式 如何判断复位执行成功 Reset FFh 将target置于其默认上电状态,该target下的所有 LUN 也会被重置。 如果在NV-DDR 或 NV-DDR2 数据接口下发出Reset命令,则将target置为 SDR 数据接口; 如果在 NV-DDR3 数据接口下发出Rese原创 2021-09-14 20:24:29 · 2564 阅读 · 0 评论 -
嵌入式linux驱动之———字符设备驱动(一)
一、简介:在Linux内核驱动中,字符设备是最基本的设备驱动。字符设备包括了设备最基本的操作,如打开设备、关闭设备、I/O控制等。学习其他设备驱动最好从字符设备开始。字符设备是能够像字节流(比如文件)一样被访问的设备,就是说对它的读写是以子为单位的。比如串口在进行收发数据时就是一个字节一个字节进行的。字符设备的驱动程序中实现了 open、close、read、wrie等系统调用,应用程序可以通...原创 2019-09-22 11:06:26 · 4415 阅读 · 0 评论 -
嵌入式linux驱动之———概览
一、什么是驱动?驱动全称Device Driver,也称做设备驱动程序。驱动程序是用于计算机和外部设备通信的特殊程序,相当于软件和硬件的接口,通常只有操作系统能使用驱动程序。在现代计算机体系结构中,操作系统并不直接与硬件打交道,而是通过驱动程序与硬件通信。Linux系统把设备驱动分成字符设备、块设备和网络设备3种类型。内核为设备驱动提供了注册和管理的接口,设备驱动还可以使用内核提供的其他功...原创 2019-09-22 10:24:42 · 573 阅读 · 0 评论 -
嵌入式linux驱动之——内核模块
一、简介:Linux内核是一个整体结构,但是通过内核模块的方式向开发人员提供了一种动态加载程序到内核的能力。通过内核模块,开发人员可以访问内核的资源,内核还向开发人员提供了访问底层硬件和总线的接口。因此,Linux系统的驱动是通过内核模块实现的。Linux内核模块是一种可以被内核动态加载和卸载的可执行程序。通过内核模块可以扩展内核的功能,通常内核模块被用于设备驱动、文件系统等。如果没有内核...原创 2019-09-20 23:16:35 · 1206 阅读 · 0 评论