
linux kernel
文章平均质量分 55
linux 内核
不吃辣的同学
bsp开发
展开
-
Linux alsa kcontrol
Control接口主要作用是应用程序(alsa-lib)可以访问kcontrol 来控制音频codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,所有的mixer工作都是通过control接口的API来实现的。一个kcontrol可以代表一个mixer(混音器),或者是一个mux(多路开关),又或者是一个Volume (音量控制器)等等。iface的设备分类access 类型kcontrol实例我们来看一下rk817的codec的kcontrol定义看一下SOC_ENUM_EXT原创 2022-06-22 11:25:48 · 1103 阅读 · 0 评论 -
linux驱动注册过程分析--driver_register(一)
linux驱动注册过程分析--driver_register(一) 个人笔记,欢迎转载,请注明出处,共同分享 共同进步 http://blog.youkuaiyun.com/richard_liujh/article/details/45825333 kernel版本3.10.14 driver_register顾名思义,是驱动程序的注册。但是很少是由我们写的驱动直接调用的,例如framebuffer中...转载 2022-04-15 14:28:15 · 1496 阅读 · 1 评论 -
Linux设备树详解(四)kernel的解析
uboot将一些参数,设备树文件传给内核,那么内核如何处理这些设备树文件呢?本章就kernel解析设备树的过程和原理,本章的主要内容以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括: 设备树对于内核的意义从u-...转载 2022-04-15 14:25:58 · 556 阅读 · 0 评论 -
Linux 的module_init运行加载
Linux 的module_init运行加载段说明text段代码段,通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定。data段数据段,通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。bss段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS段属于静态内存分配。init段linux定义的一种初始化过程中才会用到的段,一旦初始化完成,那么这些段所占用的内存会被释放掉,kernel启动过程中打印的内存相关原创 2022-04-14 19:24:22 · 457 阅读 · 0 评论 -
Linux input子系统
Linux input子系统input子系统统一了内核的输入事件,通过注册input驱动类型来与上层交互,input输入子系统的核心是输入模块,它必须是 加载到任何其他输入模块之前-它作为一种方式 两组模块之间的通信,input子系统的驱动主要分为:设备驱动层、input core和input handler1.input dev结构体struct input_dev { const char *name; //设备名 const char *phys; //设备在系统中的物理路径原创 2022-02-21 15:57:39 · 899 阅读 · 0 评论 -
Linux power_supply子系统
Linux power_supply子系统1.概念power supply子系统的引入是由于设备中通常存在多个psy设备,不同的psy设备作用不同,比如电池、DC充电和usb充电等。驱动使用power suply框架把不同的psy设备都注册成单一节点,当属性变化时,通过uevent的方式通知应用2.Power Supply Framework 架构内核抽象power supply子系统为驱动提供了统一的架构,其中功能包括:抽象PSY设备的共性,向用户空间提供统一的API,为底层PSY驱动的编写,提原创 2022-02-16 15:11:46 · 3283 阅读 · 0 评论 -
Linux 锁介绍
Linux 同步方法1.原子操作原子操作可以保证指令以原子的方式进行,执行过程中不被打断,通常用来对单个变量进行计数使用头文件#include <linux/types.h>typedef struct { int counter;} atomic_t;#ifdef CONFIG_64BITtypedef struct { long counter;} atomic64_t;#endif初始化原子变量为0:atomic_t x = ATOMIC_INIT(0);原创 2022-01-14 16:50:43 · 343 阅读 · 0 评论 -
linux 定时器
linux 定时器1.定时器的概念内核中通常需要周期性的执行一段函数,我们就需要定时器进行计时,溢出的时候开始执行节拍率(HZ)系统定时器以某种频率自行触发时钟中断,连续两个中断的间隔为一个节拍(tick),为节拍率分之一秒.通常系统定时器节拍率(HZ)是通过静态自定义定义的2.jiffies全局变脸jiffies用来记录自系统启动以来产生的节拍总数,内核会给jiffies赋予一个初值,引起变量不断溢出头文件#include <linux/jiffies.h>extern u原创 2022-01-06 17:09:48 · 1001 阅读 · 0 评论 -
kmalloc和vmalloc
kmalloc和vmalloc1.kmalloc1.头文件#include <linux/slab.h>/*function:分配size大小连续的物理内存块size: 需要分配的内存块大小flags:分配器标志*/void *kmalloc(size_t size, gfp_t flags)2.gfp_t mask分配器的标志可以分为三类:行为修饰符、区修饰符以及类型修饰符行为修饰符表示内核应当如何分配所需的内存,在特定的情况下,只能使用某些特定的方法分配内存,比如原创 2022-01-06 14:06:44 · 920 阅读 · 0 评论 -
Linux workqueue
Linux 工作队列1.work的关系总览:1.workqueue_struct/* * The externally visible workqueue. It relays the issued work items to * the appropriate worker_pool through its pool_workqueues. */struct workqueue_struct { struct list_head pwqs; /* WR: all pwqs of th原创 2021-12-28 14:45:53 · 455 阅读 · 0 评论 -
Linux Kernel 与应用交互的一些方式
Linux Kernel 与应用交互的一些方式内核与应用的交互环节通常离不开内核的文件系统,通常使用proc、sysfs、debugfs三种1.Debugfs1.debugfs的介绍通常debugfs用来在调试内核驱动时,dump或者写一些寄存器的工具通过mount命令可以发现 debugfs别挂载在/sys/kernel/debug/ 下debug on /sys/kernel/debug type debugfs (rw,relatime)2.debugfs的使用//debugfs的头原创 2021-12-14 15:15:35 · 3819 阅读 · 0 评论 -
Linux I2C调试工具
Linux I2C tools调试工具1.源码下载和安装1.下载2.交叉编译一般大家都是在开发板上使用i2c-tools工具,简单又方便能够快速的定位问题1.解压文件首先先把文件解压出来tar -vxf i2c-tools-4.3.tar.gz2.创建编译文件夹为了不干扰源代码,我们需要创建一个新的文件夹来存放编译出来的工具,mkdir build3.修改Makefilemakefile是最重要的文件,我们需要修改交叉编译器和存放编译的目标文件的文件夹我们需要修改三个地方PR原创 2021-11-12 16:14:38 · 2704 阅读 · 3 评论 -
Linux 媒体框架(Media Framework)一
Linux V4l2 框架 一v4l2的框架图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WcLJbGKk-1631677202195)(C:\Users\nanhe\Desktop\文档\驱动\v4l2.jpg)]1.Linux Media Framework( 媒体框架)1.基本概念media framework 是嵌入到lv4l2 框架中,主要分成entity pad link三大部分,entity设备的实例pad 用来作为entity的连接点 link原创 2021-09-15 11:43:21 · 4667 阅读 · 0 评论 -
linux work工作队列
linux work工作队列1.工作队列的介绍工作队列常用来在特定的时间间隔或者其他情况来执行一些动作,每个工作队列都有一个或者多个的线程(通常来说都是一个线程),在每个线程中执行相应的任务。2.工作队列的使用1.work的相关函数的介绍以及用法//头文件#include <linux/workqueue.h>//work中分为不延迟执行和延迟执行,意思是调用执行work的函数时,执行当前工作的队列是否需要延迟执行typedef void (*work_func_t)(st原创 2021-08-24 14:38:42 · 795 阅读 · 0 评论 -
Kernel GPIO使用
Kernel GPIO使用1.pinctrl 的使用1.IOMUX的配置以及上下拉能力配置#define RK_FUNC_GPIO 0#define RK_FUNC_1 1#define RK_FUNC_2 2#define RK_FUNC_3 3#define RK_FUNC_4 4bias-pull-up; //上拉bias-pull-down; //下拉drive-strength = <n>; //驱动能力下面为gpio2a0的寄存器配置表gpio2a0_s原创 2021-08-17 17:47:47 · 1874 阅读 · 0 评论