linux内核
文章平均质量分 53
linux内核
szembed
这个作者很懒,什么都没留下…
展开
-
Linux input固定设备/dev/input/eventX设备号
ARM Linux开发板调试触控的时候, 会经常碰见不同接口类型的触控板,有I2C的,USB等, 不同厂家不同型号的触控驱动在内核启动时加载顺序不同,也就导致了在/dev/input目录下生成的eventX的序号就不同, 而应用层一般会固件打开某个event设备节点,更换触控面板,可能会导致应用程序打开错误的event设备节点,因此想在内核里面做一下适配,是某些固定的触控设备最终在文件系统中生成固定的设备号文件节点。1. 查看系统总线上所有的input设备。2. Linux内核文件修改处。转载 2023-08-11 09:13:08 · 874 阅读 · 0 评论 -
理解evdev
evdev是一种仅限Linux的通用协议,内核使用该协议将有关输入设备的信息和事件转发给用户空间。这不只是对鼠标和键盘,而是任何形式的轴,键或按钮,包括像摄像头和遥控装置。每个设备都以/dev/input/event0的形式表示为设备节点, 随着您添加更多设备,尾随数字会增加。拔下设备后设备节点将会被其他设备重新使用,因此不要将设备节点硬编码到脚本中。设备节点也只能由root读取(新的内核中加入了capacity机制),因此您也需要以root身份运行任何调试工具。转载 2023-08-10 17:26:17 · 266 阅读 · 0 评论 -
linux背光系统--背光延时点亮
在要求快速启动的嵌入式linux系统中背光延时打开的方法,似乎写此类文章的人不多,如下代码提供一种开启kthread_create内核线程的的方式来延迟打开背光;,在系统起来一瞬间液晶的初始化需要一段时间,此时的液晶状态是不确定的,倘若背光起来的时候,液晶还未初始化完毕,通常会遇到屏幕闪白屏或花屏的现象;系统都将背光开光单独拿出来由IO控制,系统起来的一瞬间总是会看到闪花屏或白屏,一种解决办法就是。上边的代码里有一段是做pwm背光渐变的程序,下一篇文章讲pwm渐变的实现方法。转载 2023-07-06 12:36:13 · 250 阅读 · 0 评论 -
使用pwm_bl驱动和backlight class实现背光调整
上节中梳理了dts中设备节点的解析注册过程,以及pwm_bl驱动注册过程,由平台总线对设备与驱动进行匹配,调用probe回调函数,最终实现设备的初始化。本次梳理驱动的具体实现,从probe调用到用户空间实现对设备节点的操作,即调整背光亮度。转载 2023-07-06 12:05:32 · 694 阅读 · 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 · 411 阅读 · 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 · 109 阅读 · 0 评论 -
Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
unlocked_ioctl就是ioctl接口,但是功能和对应的系统调用均没有发生变化。转载 2022-09-19 15:48:01 · 1272 阅读 · 0 评论 -
Linux下的gpio,gpiod
应该是每个嵌入式设备都避免不了的。最近在做项目的时候,也遇到这方面的问题,所以简单总结一下现在内核里面多了gpiod的来控制gpio口,相对于原来的形式,使用gpiod的好处是我们申请后不进行free也没有什么问题。但是你要是使用原来的方式后,一定要记得释放。不释放的话可能会有问题。转载 2022-09-05 18:14:02 · 1110 阅读 · 0 评论 -
中断子系统的简单使用
软件出发产生的中断,中断号范围0~15,也就是最前的16个中断,相当于IPI,简单的说Cpu_1要给Cpu_2发送特定信息,比如时间同步,全局进程调度信息,就通过软件中断方式,目标Cpu接受到这样的中断信息,可以获取到信息是哪个Cpu发送过来的,具体的中断ID是哪个数字,从而找到对应处理方式进行处理。这是常见的外部设备中断,也定义为共享中断,比如按键触发一个中断,手机触摸屏触发的中断,共享的意思是说可以多个Cpu或者说Core处理,不限定特定的Cpu。编写驱动程序的Makefile,编译,加载模块。转载 2022-09-03 14:59:25 · 402 阅读 · 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 · 1362 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(上)
随着内核的发展,linux驱动框架在不断的变化。很早很早以前,出现了gpio子系统,后来又出现了pinctrl子系统。在网上很难看到一篇讲解这类子系统的文章。就拿gpio操作来说吧,很多时候都是简单的调用gpio子系统提供的api,然后根据sdk说明文档写明的gpio号传参数,至于里面的工作过程对于驱动工程师而言就像个黑盒子。当我们自己设计的板子和demo板有很大变动时,问题就出现了。......转载 2022-08-05 16:01:21 · 415 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(中)
注意,这部分是任何一个用到pinctrl设备都会进行的动作(解析、设置状态),所以还必须弄清楚它,它主要的作用就是通过解析该设备的pinctrl信息生成一个pinctrl数据结构,用于管理该设备的pin信息,如有哪些状态、每个状态有哪些设置(设置包括pinmux和pinconf两种,有些设备只用需要pinmux,有些需要pinmux和pinconf)其他驱动一般不会直接调用。//根据选定的组,获取该组的信息,返回的是该组对应的索引,这里会调用pmxops的get_group_name,操作。......转载 2022-08-05 16:00:51 · 512 阅读 · 0 评论 -
gpio子系统和pinctrl子系统(下)
通过对gpio子系统和pinctrl子系统的分析,应该对这两个系统有了大致的概念了吧_ gpio子系统让驱动工程师不用关心底层gpio chip的具体实现,让bsp工程师不用关心上层驱动工程师的使用方式。pinctrl子系统帮我们管理了pin信息,包括了pin的mux和conf,同时也透明的处理了与gpio子系统的关联以及设备模型的关联。完!2015年7月。......转载 2022-08-05 16:00:18 · 230 阅读 · 0 评论 -
Cyclictest 简介 安装 测试
实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。一个实时操作系统的实时性能的主要评测指标包括上下文切换时间,抢占时间,中断延迟时间,信号量混洗时间。主要测试方法有任务切换时间测试、任务抢占时间测试、中断管理性能测试、信号混洗时间测试。实时性是指调度时任务的响应时间。Cyclictest是rt-tests下一个使用最广泛的测试工具,主要用来测试使用内核的延迟,从而判断内核的实时性。Cyclictest参数表参数含义-a [NUM]–affinity。......转载 2022-08-05 15:59:21 · 987 阅读 · 0 评论 -
LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试
实时性是指调度的时候,任务响应时间。windows一般是15ms,最大的问题是不能保证。比如平均值是1ms,但是随着系统负载的变化,有时甚至达到100ms,在这工业上是无法使用的。工业上一些应用要求必须有更高的时间精度,比如,一个电力监测系统必须在10ms内运行一次任务对电力运行状况进行监测,一旦时间不准,调度不到该程序运行,则无法保证对电力故障的及时响应。实时性补丁能够较好地满足我们的需求(1ms),实现较强的实时性。............转载 2022-08-04 09:47:28 · 1867 阅读 · 0 评论 -
通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。
通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。转载 2022-08-05 15:59:04 · 2601 阅读 · 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 · 253 阅读 · 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 · 1836 阅读 · 0 评论 -
实时Linux之PREEMPT_RT篇
我测试 Voluntary Kernel Preemption (Desktop)、Preemptible Kernel (Low-Latency Desktop)、Fully Preemptible Kernel (Real-Time) 三种抢占模型在无负载、一般负载、超重负载下的实时性。转载 2022-08-05 15:57:56 · 3859 阅读 · 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 · 1226 阅读 · 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 · 148 阅读 · 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 · 571 阅读 · 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 · 883 阅读 · 0 评论 -
(一)内核锁的使用之自旋锁
使用场景:多个任务有可能对共享资源同时访问,这个时候需要进行互斥操作,可以使用本组接口来实现互斥,但是本人强烈不建议使用此接口进行互斥(内核也不建议),原因是如果一个任务正在访问临界资源,使用了本组接口,但是在spin_lock后,spin_unlock前来了中断,恰巧中断上下文中也会调用spin_lock来获取这个锁,这个时候就抓瞎了,中断上下文将永远获取不到那个锁了,因为中断优先级较高,在任务未释放锁之前进入到了中断上下文中,中断上下文中spin_lock将永远不会返回,从而死锁;......转载 2022-08-05 15:55:50 · 151 阅读 · 0 评论 -
一点点读懂regulator(二)
本章我们介绍Regulator Driver Interface相关接口使用。The regulator driver interface相对简单,旨在允许向核心框架注册其服务。转载 2022-08-04 10:31:09 · 141 阅读 · 0 评论 -
一点点读懂regulator(一)
这使用了一个与内核时钟接口类似的API,因为consumer drivers可以get和put a regulator(就像他们可以使用时钟atm一样),并获取/设置电压、电流限制、模式、启用和禁用。如果不使用,这也会编译出来,以便驱动程序可以在没有基于调节器的电源控制的系统中重复使用。它还允许创建一个调节器树,其中一些调节器由其他调节器提供(类似于时钟树)。大多数调节器可以使能和禁用其输出,而有些调节器可以控制其输出电压和/或电流。由调节器、开关的输出功率或另一个电源域提供输入功率的电子电路。......转载 2022-08-05 15:55:18 · 256 阅读 · 0 评论 -
一点点读懂regulator(四)
本章节我们主要介绍Regulator Consumer Driver Interface,因为发现把英文翻译成中文,有些词语的含义总是不能准确的表达出来,所以这个章节,还是建议大家直接阅读英文原版,这样可能才会收获更多。......转载 2022-08-04 10:30:17 · 46 阅读 · 0 评论 -
一点点读懂regulator(三)
本节我们主要介绍Regulator Machine Driver Interface。和B的驱动器必须映射到正确的。现在,可以通过为每个。转载 2022-08-04 10:30:46 · 163 阅读 · 0 评论 -
一点点读懂thermal(一)
thermal模块主要负责温度控制,温度低时想办法升温,温度高时想办法降温,甚至复位系统。Linux kernel有个通用的思想就是抽象分层,比如把该子系统所有资源和信息综合在一起的一层叫core层,不同的设备的操作叫device层,对设备的操作的屏蔽层叫driver层或者governor。同样thermal子系统也是采用了该思想:核心为 thermal_core,可以获取温度的设备抽象为 thermal_zone_device, 如Temp Sensor、NTC(板上的热敏电阻)等。......转载 2022-08-04 10:29:41 · 978 阅读 · 0 评论 -
一点点读懂Thremal(二)
算法在计算 target cooling state 的过程中,除了需要知道是否 throttle,还添加了一个 trend 作为参考条。转载 2022-08-04 10:29:10 · 340 阅读 · 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 · 1094 阅读 · 0 评论 -
一点点读懂cpufreq(二)
本章节主要介绍cpufreq中的通知链实现,在调频策略以及频率变化时来通知对该事件敏感的模块,各个模块可以通过注册和去注册接口来加入到通知链中。转载 2022-08-04 10:27:47 · 405 阅读 · 0 评论 -
功耗控制之DVFS介绍
需要说明的是,DVFS调整电压和频率仍然是采用固定的几个数值来调节,而对应的还有AVFS(Adaptive Voltage Frequency Scaling)尽管可以更精细地调节,但是在实际中应用却不多,原因在于AVFS会极大地增加timing signoff的难度,一方面很难用少数PVT条件去覆盖所有电压和频率的组合,另一方面想要增加PVT条件可能面临signoff corner过多。当芯片的最高频率超出既定指标,那么想通过降低电压来保证性能不变的前提下获得更小的功耗就成了自然而然的想法。......转载 2022-08-04 09:51:00 · 796 阅读 · 0 评论 -
linux电源管理--task freeze
内核线程和work_queue默认是不能被冻结的,少数内核线程和work_queue在创建时指定了freezable标志,这些任务需要对freeze状态进行判断,当系统进入freezing时,主动暂停运行。所有,最好还是设计成UNINTERRUPTIBLE的task在freeze时失败,并循环检测几次(freeze_timeout_msecs = 20s)等待IO完成,如果IO一直没有完成,退出suspend,一个task处于suspend时间过长也是有问题的。有可能导致进程感知系统休眠。......转载 2022-08-04 09:50:30 · 149 阅读 · 0 评论 -
linux电源管理--psci
定义的电源管理接口规范,ARM也提供了官方的设计文档《Arm Power State Coordination Interface Platform Design Document》,全文有87页之多,由此可见PSCI框架的繁琐和复杂,感兴趣的同仁可以去ARM官方网站进行下载参阅。在本文中,我们仅仅从一个开发者的角度来对PSCI框架进行分析和学习。这2个文件的关系以及其与ATF\SR主流程的关系如下图所示,最终都会陷入到ATF中进行对应操作。CPU的热插拔,CPU启动、SR主流程都需要PSCI框架的支持。.转载 2022-08-04 09:50:14 · 389 阅读 · 0 评论 -
linux电源管理-pm core主流程
PM Core,SR(suspend/resume)主流程,顾名思义就是把Linux Kernel中各个低功耗模块组合在一起,成为睡眠和唤醒流程的主干道,我们称之为SR主流程。其在内核中特性的开关主要受以下宏控制:相关代码主要在kernel/power/目录下main.c----提供用户态接口,以及pm notifier相关接口.c----Suspend功能的主流程.c----Suspend过程中对控制台的处理逻辑.c----Suspend过程中对进程的处理逻辑。......转载 2022-08-04 09:49:48 · 841 阅读 · 0 评论 -
linux电源管理--wakesource
1)结构体原型:struct{constchar*name;intid;转载 2022-08-04 09:49:18 · 1389 阅读 · 0 评论 -
linux电源管理--syscore
实现包括注册和去注册接口,suspend和resume接口,以及shutdown接口,如果需要注册相关实现,首先包含该头文件,然后通过resister来注册自己的syscore回调。Shutdown回调会在kernel_power_off或者reboot时进行回调,相关实现可以评估是否需要注册shutdown回调函数。该机制的实现在drivers\base\syscore.c中,实现非常简单,不在此过多解析。相关实现在drivers\base\syscore.c中。在头文件中,声明了函数原型以及相关。...转载 2022-08-04 09:48:44 · 239 阅读 · 0 评论 -
当panic或者die被执行时,或者发生未定义指令时,如何被回调到
附:同样,在die函数被调用时,也有类似的机制,不做详细介绍,大家可以看一下register_die_notifier/ unregister_die_notifier的相关实现。另外,还有一部分模块或者子系统,希望系统在panic时,能主动通知一下本模块,以便做一些复位前的准备动作,相应的kernel也提供了该机制,就是让大家注册。3、注册完成后,当系统中有调用panic函数时,panic在执行过程中就会回调注册的函数。该链表存储各个模块注册的panic回调函数,以便panic在发生时回调对应回调函数。.转载 2022-08-04 09:48:20 · 198 阅读 · 0 评论 -
kernel hung_task死锁检测机制原理实现
Linux的进程存在多种状态,可在include/linux/sched.h中查看。static noinline void __sched__mutex_lock_slowpath(struct mutex *lock){ __mutex_lock(lock, TASK_UNINTERRUPTIBLE, 0, NULL, _RET_IP_);} static noinline void __sched __down(struct semaphore *sem){ __down_common(sem, T转载 2022-08-04 09:46:25 · 272 阅读 · 0 评论