
linux内核
文章平均质量分 56
linux内核
szembed
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux设备驱动之IIO子系统——IIO框架及IIO数据结构
(例如,IIO_MOD_X,IIO_MOD_Y,IIO_MOD_Z是关于xyz轴的轴向传感器的修改器)。在这里使用索引可能容易出错,因为使用in_intensity0_ir_raw和in_intensity1_ir_raw是没有意义的。l setup_ops: 如果未指定,则IIO内核使用drivers / iio / buffer / industrialio-triggered-buffer.c中定义的缺省iio_triggered_buffer_setup_ops。导出的信息由所有渠道共享。转载 2025-06-04 10:16:03 · 79 阅读 · 0 评论 -
Linux设备驱动之IIO子系统——Triggered buffer support触发缓冲支持
通过CONFIG_IIO_SYSFS_TRIGGER = y config选项在内核中启用sysfs触发器,将自动创建/ sys / bus / iio / devices / iio_sysfs_trigger /文件夹,并可用于sysfs触发器管理。此处理程序负责通过indio_dev-> active_scan_mask查找已启用的通道,检索其数据,并使用iio_push_to_buffers_with_timestamp函数将它们提供给indio_dev-> buffer。它不会影响非阻塞读取。转载 2025-06-04 09:58:42 · 75 阅读 · 0 评论 -
Linux设备驱动之IIO子系统——IIO框架数据读取
我们也可以使用下面这个命令:cat /sys/bus/iio/devices/trigger0/name> /sys/bus/iio/devices/iio:device0/trigger/current_trigger. 也就是说,如果我们编写的值与现有的触发器名称不对应,则不会发生任何事情。为了确保我们真正定义了一个触发器,我们可以使用cat/sys/bus/iio/devices/iio:device0/trigger/current_trigger.这里,0对应于我们需要分配给触发器的索引。转载 2025-06-04 09:45:52 · 95 阅读 · 0 评论 -
linux IIO驱动框架
sys/bus/iio/devices/iio:deviceX,如果设备支持触发缓冲区,则会自动创建目录/sys/bus/iio/devices/iio:deviceX/trigger/*;// 对应的属性文件为所有通道共享,导出的信息也由同一类型的通道共享;/sys/bus/iio/iio:deviceX/in_intensity_both_raw // 测量红外和可见光的通道。/sys/bus/iio/iio:deviceX/in_intensity_ir_raw // 测量IR强度的通道。转载 2025-06-03 18:05:35 · 84 阅读 · 0 评论 -
Wakeup linux system from sleep mode
如果设备使能了wakeup能力,那在sys文件系统下,该设备的power子目录下就有个wakeup文件。在RTC驱动的probe函数里,增加以下两行,就可以在power下看到wakeup文件。有时候硬件不支持wakeup能力,但我们还是想测下软件流程,该怎么办呢?wakeup能力还需要RTC支持中断功能,简单的看就是有定义宏 RTC_IRQ。所以我们可以搜索wakeup文件,看哪些设备具有wakeup能力。但有wakeup文件,不代表具备wakeup能力。转载 2025-05-28 17:17:11 · 47 阅读 · 0 评论 -
ACPI RTC WakeUp
转载 2025-05-28 17:11:35 · 56 阅读 · 0 评论 -
rtcwake - Linux下定时唤醒计算机
命令通过 RTC 设置计算机在指定时间自动关闭并启动。它常用于需要定时重启或唤醒的场景,例如自动化测试、定时任务或节能管理。转载 2025-05-28 17:02:53 · 121 阅读 · 0 评论 -
Linux input固定设备/dev/input/eventX设备号
ARM Linux开发板调试触控的时候, 会经常碰见不同接口类型的触控板,有I2C的,USB等, 不同厂家不同型号的触控驱动在内核启动时加载顺序不同,也就导致了在/dev/input目录下生成的eventX的序号就不同, 而应用层一般会固件打开某个event设备节点,更换触控面板,可能会导致应用程序打开错误的event设备节点,因此想在内核里面做一下适配,是某些固定的触控设备最终在文件系统中生成固定的设备号文件节点。1. 查看系统总线上所有的input设备。2. Linux内核文件修改处。转载 2023-08-11 09:13:08 · 1830 阅读 · 0 评论 -
理解evdev
evdev是一种仅限Linux的通用协议,内核使用该协议将有关输入设备的信息和事件转发给用户空间。这不只是对鼠标和键盘,而是任何形式的轴,键或按钮,包括像摄像头和遥控装置。每个设备都以/dev/input/event0的形式表示为设备节点, 随着您添加更多设备,尾随数字会增加。拔下设备后设备节点将会被其他设备重新使用,因此不要将设备节点硬编码到脚本中。设备节点也只能由root读取(新的内核中加入了capacity机制),因此您也需要以root身份运行任何调试工具。转载 2023-08-10 17:26:17 · 684 阅读 · 0 评论 -
linux背光系统--背光延时点亮
在要求快速启动的嵌入式linux系统中背光延时打开的方法,似乎写此类文章的人不多,如下代码提供一种开启kthread_create内核线程的的方式来延迟打开背光;,在系统起来一瞬间液晶的初始化需要一段时间,此时的液晶状态是不确定的,倘若背光起来的时候,液晶还未初始化完毕,通常会遇到屏幕闪白屏或花屏的现象;系统都将背光开光单独拿出来由IO控制,系统起来的一瞬间总是会看到闪花屏或白屏,一种解决办法就是。上边的代码里有一段是做pwm背光渐变的程序,下一篇文章讲pwm渐变的实现方法。转载 2023-07-06 12:36:13 · 582 阅读 · 0 评论 -
使用pwm_bl驱动和backlight class实现背光调整
上节中梳理了dts中设备节点的解析注册过程,以及pwm_bl驱动注册过程,由平台总线对设备与驱动进行匹配,调用probe回调函数,最终实现设备的初始化。本次梳理驱动的具体实现,从probe调用到用户空间实现对设备节点的操作,即调整背光亮度。转载 2023-07-06 12:05:32 · 1843 阅读 · 0 评论 -
Linux PWM framework(二)- 背光子系统
backlight创建bl_power,brightness,actural_brightness,max_brightness四个成员,其中brightness是当前亮度,max_brightness是最大亮度。/sys/class/backlight是注册的背光设备类型,而在/sys/class/backlight/目录下的文件就是所注册的背光设备。在/sys/class/backlight/目录下创建pwm backlight node,并注册pwm_backlight_ops。转载 2023-07-06 11:26:58 · 674 阅读 · 2 评论 -
Linux PWM framework(一) -- 简介
一般情况下,of_pwm_n_cells取值为3,或者2(不关心极性),of_xlate则可以使用kernel提供的of_pwm_xlate_with_flags(解析of_pwm_n_cells为3的chip)或者of_pwm_simple_xlate(解析of_pwm_n_cells为2的情况)。of_pwm_get/devm_of_pwm_get,和pwm_get/devm_pwm_get类似,区别是可以指定需要从中解析PWM信息的device node,而不是直接指定device指针。转载 2023-07-06 11:20:38 · 234 阅读 · 0 评论 -
Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
unlocked_ioctl就是ioctl接口,但是功能和对应的系统调用均没有发生变化。转载 2022-09-19 15:48:01 · 1628 阅读 · 0 评论 -
Linux下的gpio,gpiod
应该是每个嵌入式设备都避免不了的。最近在做项目的时候,也遇到这方面的问题,所以简单总结一下现在内核里面多了gpiod的来控制gpio口,相对于原来的形式,使用gpiod的好处是我们申请后不进行free也没有什么问题。但是你要是使用原来的方式后,一定要记得释放。不释放的话可能会有问题。转载 2022-09-05 18:14:02 · 1391 阅读 · 0 评论 -
中断子系统的简单使用
软件出发产生的中断,中断号范围0~15,也就是最前的16个中断,相当于IPI,简单的说Cpu_1要给Cpu_2发送特定信息,比如时间同步,全局进程调度信息,就通过软件中断方式,目标Cpu接受到这样的中断信息,可以获取到信息是哪个Cpu发送过来的,具体的中断ID是哪个数字,从而找到对应处理方式进行处理。这是常见的外部设备中断,也定义为共享中断,比如按键触发一个中断,手机触摸屏触发的中断,共享的意思是说可以多个Cpu或者说Core处理,不限定特定的Cpu。编写驱动程序的Makefile,编译,加载模块。转载 2022-09-03 14:59:25 · 516 阅读 · 0 评论 -
proc_create的使用方法
其中第三个参数,也就是single_open的data参数,内核中有些地方传入的NULL,有些地方传入的inode->i_private,也有传入其他值的。发现show函数的第一个参数为seq_file类型,在show函数中,可以将seq_file的private成员转换成对应的类型进行使用。也就是要在哪个文件夹之下创建新文件夹,需要将那个文件夹的proc_dir_entry传入。根据以上这段说明,在mytest_proc_open函数中,只需要调用single_open函数,并传入一个show函数即可。.转载 2022-09-01 14:29:33 · 1549 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(上)
随着内核的发展,linux驱动框架在不断的变化。很早很早以前,出现了gpio子系统,后来又出现了pinctrl子系统。在网上很难看到一篇讲解这类子系统的文章。就拿gpio操作来说吧,很多时候都是简单的调用gpio子系统提供的api,然后根据sdk说明文档写明的gpio号传参数,至于里面的工作过程对于驱动工程师而言就像个黑盒子。当我们自己设计的板子和demo板有很大变动时,问题就出现了。......转载 2022-08-05 16:01:21 · 501 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(中)
注意,这部分是任何一个用到pinctrl设备都会进行的动作(解析、设置状态),所以还必须弄清楚它,它主要的作用就是通过解析该设备的pinctrl信息生成一个pinctrl数据结构,用于管理该设备的pin信息,如有哪些状态、每个状态有哪些设置(设置包括pinmux和pinconf两种,有些设备只用需要pinmux,有些需要pinmux和pinconf)其他驱动一般不会直接调用。//根据选定的组,获取该组的信息,返回的是该组对应的索引,这里会调用pmxops的get_group_name,操作。......转载 2022-08-05 16:00:51 · 608 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(下)
通过对gpio子系统和pinctrl子系统的分析,应该对这两个系统有了大致的概念了吧_ gpio子系统让驱动工程师不用关心底层gpio chip的具体实现,让bsp工程师不用关心上层驱动工程师的使用方式。pinctrl子系统帮我们管理了pin信息,包括了pin的mux和conf,同时也透明的处理了与gpio子系统的关联以及设备模型的关联。完!2015年7月。......转载 2022-08-05 16:00:18 · 314 阅读 · 0 评论 -
Cyclictest 简介 安装 测试
实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。一个实时操作系统的实时性能的主要评测指标包括上下文切换时间,抢占时间,中断延迟时间,信号量混洗时间。主要测试方法有任务切换时间测试、任务抢占时间测试、中断管理性能测试、信号混洗时间测试。实时性是指调度时任务的响应时间。Cyclictest是rt-tests下一个使用最广泛的测试工具,主要用来测试使用内核的延迟,从而判断内核的实时性。Cyclictest参数表参数含义-a [NUM]–affinity。......转载 2022-08-05 15:59:21 · 1270 阅读 · 0 评论 -
LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试
实时性是指调度的时候,任务响应时间。windows一般是15ms,最大的问题是不能保证。比如平均值是1ms,但是随着系统负载的变化,有时甚至达到100ms,在这工业上是无法使用的。工业上一些应用要求必须有更高的时间精度,比如,一个电力监测系统必须在10ms内运行一次任务对电力运行状况进行监测,一旦时间不准,调度不到该程序运行,则无法保证对电力故障的及时响应。实时性补丁能够较好地满足我们的需求(1ms),实现较强的实时性。............转载 2022-08-04 09:47:28 · 2562 阅读 · 0 评论 -
通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。
通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。转载 2022-08-05 15:59:04 · 3267 阅读 · 0 评论 -
ARM40 Qt4.8.7远程调试
将Ubuntu上/opt目录下的gdbserver,tslib库,Qt4相关库拷贝到/home/nfsroot目录下,ARM40通过访问本地nfs目录就可以直接调用了。将Ubuntu上的/home/nfsroot目录挂载到ARM40的/home/nfs/目录下。并将gdbserver,qtelib.tar,tslib.tar文件释放到本地/opt目录下。编辑profile文件,添加开启LCD背光的相关代码,保存退出,并使其生效。双击“界面文件”下的“mainwindow.ui”文件,创建UI界面。.....转载 2022-08-05 15:58:27 · 344 阅读 · 0 评论 -
一文看懂嵌入式/etc/init.d/目录下的所有启动文件
本目录下的所有文件12345 先看一下rcS文件,它是本目录在开机时最先启动的文件# Start all init scripts in /etc/init.d# executing them in numerical order.#for i in /etc/init.d/S??* ;do# Ignore dangling symlinks (if any).[ ! -f “KaTeX parse error: Expected 'EOF', got '&' at position 88: …转载 2022-08-05 15:58:13 · 2252 阅读 · 0 评论 -
实时Linux之PREEMPT_RT篇
我测试 Voluntary Kernel Preemption (Desktop)、Preemptible Kernel (Low-Latency Desktop)、Fully Preemptible Kernel (Real-Time) 三种抢占模型在无负载、一般负载、超重负载下的实时性。转载 2022-08-05 15:57:56 · 5159 阅读 · 0 评论 -
wakelock锁
而wakeup_source_drop则主要负责把对应timer从激活链表中删除(如果是出于激活状态),以及释放wakelock锁,而且该函数注释也提醒了,调用该函数时,一定要确保__pm_stay_awake() or __pm_wakeup_event()两个函数没有并行被调用,否则删除状态未知。而wakeup_source_add则完成的工作比较多,包括自旋锁的初始化,添加到wakelock锁的全局控制链表中,超时timer的初始化等。4)wake_lock_timeout:投超时锁,超时后释放锁。.转载 2022-08-05 15:57:28 · 1420 阅读 · 0 评论 -
信号量工作原理
一、内核相关文件为include/linux/semaphore.h和kernel/semaphore.c二、主要结构体:static inline void sema_init(struct semaphore *sem, int val){ static struct lock_class_key __key; *sem = (struct semaphore) __SEMAPHORE_INITIALIZER(*sem, val); lockdep_init_map(&sem->lock.转载 2022-08-05 15:57:07 · 210 阅读 · 0 评论 -
开关中断与cpsid/cpsie指令
最常见的这两个命令的使用处是在关中断、开中断的实现中,我们经常用的local_irq_enable和local_irq_disable最终都是调用了以下两个实现,即关/开中断只是操作了CPSR中的中断标志位而已,并没有去对GIC做操作,只是简单的不让CPU响应中断,具体实现在arch/arm/include/asm/irqflags.h文件中。在汇编代码中,CPSID CPSIE 用于快速的开关。......转载 2022-08-05 15:56:36 · 784 阅读 · 0 评论 -
反汇编工具使用
2) prebuilts/gcc/linux-x86/arm/gcc-linaro-aarch64-linux-gnu/bin/aarch64-linux-android-addr2line -a 要查询的地址 -e vmlinux。/gcc-linaro-aarch64-linux-gnu/bin/aarch64-linux-android-objdump vmlinux > 1.txt可把内核镜像反汇编,可以根据oops打印出的PC搜索在哪里出错了;该反汇编工具存在于prebuilts/..转载 2022-08-05 15:56:22 · 1169 阅读 · 0 评论 -
(一)内核锁的使用之自旋锁
使用场景:多个任务有可能对共享资源同时访问,这个时候需要进行互斥操作,可以使用本组接口来实现互斥,但是本人强烈不建议使用此接口进行互斥(内核也不建议),原因是如果一个任务正在访问临界资源,使用了本组接口,但是在spin_lock后,spin_unlock前来了中断,恰巧中断上下文中也会调用spin_lock来获取这个锁,这个时候就抓瞎了,中断上下文将永远获取不到那个锁了,因为中断优先级较高,在任务未释放锁之前进入到了中断上下文中,中断上下文中spin_lock将永远不会返回,从而死锁;......转载 2022-08-05 15:55:50 · 194 阅读 · 0 评论 -
一点点读懂regulator(二)
本章我们介绍Regulator Driver Interface相关接口使用。The regulator driver interface相对简单,旨在允许向核心框架注册其服务。转载 2022-08-04 10:31:09 · 200 阅读 · 0 评论 -
一点点读懂regulator(一)
这使用了一个与内核时钟接口类似的API,因为consumer drivers可以get和put a regulator(就像他们可以使用时钟atm一样),并获取/设置电压、电流限制、模式、启用和禁用。如果不使用,这也会编译出来,以便驱动程序可以在没有基于调节器的电源控制的系统中重复使用。它还允许创建一个调节器树,其中一些调节器由其他调节器提供(类似于时钟树)。大多数调节器可以使能和禁用其输出,而有些调节器可以控制其输出电压和/或电流。由调节器、开关的输出功率或另一个电源域提供输入功率的电子电路。......转载 2022-08-05 15:55:18 · 369 阅读 · 0 评论 -
一点点读懂regulator(四)
本章节我们主要介绍Regulator Consumer Driver Interface,因为发现把英文翻译成中文,有些词语的含义总是不能准确的表达出来,所以这个章节,还是建议大家直接阅读英文原版,这样可能才会收获更多。......转载 2022-08-04 10:30:17 · 75 阅读 · 0 评论 -
一点点读懂regulator(三)
本节我们主要介绍Regulator Machine Driver Interface。和B的驱动器必须映射到正确的。现在,可以通过为每个。转载 2022-08-04 10:30:46 · 220 阅读 · 0 评论 -
一点点读懂thermal(一)
thermal模块主要负责温度控制,温度低时想办法升温,温度高时想办法降温,甚至复位系统。Linux kernel有个通用的思想就是抽象分层,比如把该子系统所有资源和信息综合在一起的一层叫core层,不同的设备的操作叫device层,对设备的操作的屏蔽层叫driver层或者governor。同样thermal子系统也是采用了该思想:核心为 thermal_core,可以获取温度的设备抽象为 thermal_zone_device, 如Temp Sensor、NTC(板上的热敏电阻)等。......转载 2022-08-04 10:29:41 · 1895 阅读 · 0 评论 -
一点点读懂Thremal(二)
算法在计算 target cooling state 的过程中,除了需要知道是否 throttle,还添加了一个 trend 作为参考条。转载 2022-08-04 10:29:10 · 646 阅读 · 0 评论 -
一点点读懂cpufreq(一)
和ondemand管理器不同的是,在CPU负载高的时候conservative并不直接跳上最高的主频,而是采用步进的方式来升高主频。1)在需要增加Freq,over drive的情况下:软件首先决定最小的clock frequency,再决定最小的voltage供应。新的freq,可以是clock divider或者PLL,如果是PLL,则需要花费更多时间等待PLL稳定。总之Freq只有在voltage增加之后,才能提高,Freq必须在voltage减小前,先降低。体现的是对系统高性能的最大追求,而使用。.转载 2022-08-04 10:28:19 · 1473 阅读 · 0 评论 -
一点点读懂cpufreq(二)
本章节主要介绍cpufreq中的通知链实现,在调频策略以及频率变化时来通知对该事件敏感的模块,各个模块可以通过注册和去注册接口来加入到通知链中。转载 2022-08-04 10:27:47 · 575 阅读 · 0 评论 -
功耗控制之DVFS介绍
需要说明的是,DVFS调整电压和频率仍然是采用固定的几个数值来调节,而对应的还有AVFS(Adaptive Voltage Frequency Scaling)尽管可以更精细地调节,但是在实际中应用却不多,原因在于AVFS会极大地增加timing signoff的难度,一方面很难用少数PVT条件去覆盖所有电压和频率的组合,另一方面想要增加PVT条件可能面临signoff corner过多。当芯片的最高频率超出既定指标,那么想通过降低电压来保证性能不变的前提下获得更小的功耗就成了自然而然的想法。......转载 2022-08-04 09:51:00 · 1572 阅读 · 0 评论