- 博客(32)
- 收藏
- 关注
原创 Regulator子系统
Regulator指的是稳定器,有电压稳定器及电流稳定器两种,能够自动维持恒定电流或者电压。其中,电压稳定器voltage regulator在电路中比较常见。从设备驱动的角度来看,regulator的控制比较简单,主要有enable/disable/输出电压或电流大小的控制。Linux利用regulator framework对regulator进行管理和控制。
2023-03-23 14:12:31 773
原创 Ftrace之trigger使用
This patchset implements ‘trace event triggers’, which are similar tothe function triggers implemented for ‘ftrace filter commands’ (see‘Filter commands’ in Documentation/trace/ftrace.txt), but instead ofbeing invoked from function calls are invoked by
2023-03-23 09:47:29 492
转载 Linux休眠唤醒之autosleep
根据使用场景,低功耗状态可以是Freeze, Standby, Suspend to RAM和suspend to disk中的任意一种。而怎么判断系统没有事情在做呢?依赖wakeup events framework。只要系统没有正在处理和新增的wakeup events, 就尝试suspend, 如果suspend过程中有events产生,再resume就是了。
2023-03-22 16:25:12 1042
转载 Linux休眠唤醒之wakeup count功能
1) 任何想发起电源状态切换得实体(可以是用户空间电源管理进程,也可以是内核线程,简称C),在发起状态切换前,读取系统的wakeup counts(该值记录了当前的wakeup event总数), 并将读取的counts告知wakeup events framework。5) suspend执行的一些时间点, 会调用wakeup events framework提供的接口(pm_wakeup_pending), 检查是否有wakeup有没有处理。
2023-03-22 15:55:19 745
转载 Hibernate和Sleep功能介绍
Hibernate和Sleep两个功能是Linux Generic PM的核心功能, 他们的目的是类似的: 暂停使用–>保存上下文–>关闭系统以节电–>恢复系统–>恢复上下文–>继续使用本文以向用户空间提供的接口为突破口,从整体上对这两个功能进行介绍,并会在后续的文章中,分析他们的实现逻辑和执行动作。
2023-03-22 15:00:33 897
转载 Linux电源管理 Suspend
下面图片对Linux suspend&resume过程做了一个概述, 读者可以顺着这个流程阅读内核源代码。具体的说明,可以参考后面的代码分析。
2023-03-22 14:54:23 1208 1
转载 Kernel调试追踪技术之 Ftrace on ARM64
Ftrace 是Kernel的官方tracing 框架。初始开发者和maintainer是Steven Rostedt,在2008年合入Kernel。其全名是Function trace,但是功能不只有函数跟踪,还包含了静态trace event、动态trace event、stack trace、latency tracer等功能,是一个完善的trace 框架。同时提供统计、过滤、触发等功能,方便trace log的捕获和分析。
2023-03-20 17:27:14 395
原创 android启动流程之preloader--->lk
对于AArch64而言,exception是指cpu的某些异常状态或者一些系统的事件(可能来自外部,也可能来自内部),这些状态或者事件可以导致cpu去执行一些预先设定的,具有更高执行权利的软件(也叫exception handler)。执行exception handler可以进行异常的处理,从而让系统平滑的运行。exception handler执行完毕之后,需要返回发生异常的现场。
2023-03-20 14:23:05 1267
原创 module_platform_driver分析
从而间接调用了 platform_driver_register 和 platform_driver_unregister实现了 驱动函数的注册和注销。module_platform_driver:这是一个宏,位于kernel。下面以mtk-pmic-keys的驱动程序为例。然后就通过platform的设备模型进行匹配。
2023-03-20 13:54:34 321
原创 usb连接和枚举
枚举:枚举过程是所有usb设备连接主机后都必须要经过的一段数据传输,在这个阶段,主机会了解usb设备的信息结构,类别属性,并启用usb设备的每个配置和功能, usb主设备向usb从设备通过获取各种描述符,从而了解设备属性,知道是什么样的设备,并加载对应的USB类,功能驱动程序,然后进行后续一些列的数据通信。与高速设备的连接比较特殊,它分为高速主机和高速设备,他们之间是一个双向检测,高速主机端口需要检测连接上来的usb设备是低速,全速还是高速,而高速设备同样也需要检测对应连接的主机是全速还是高速主机。
2023-03-20 13:51:42 1241
原创 git 基本命令
只会记录文件改变的内容,只会记录文件的差异内容,不会记录commit信息,多个commit可以合成一个diff文件。-u表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。备注:在打入patch冲突时,可以执行git am --skip跳过此次冲突,也可以执行git am --abort回退打入patch的动作,还原到操作前状态。**2.3 **某两笔(包后不包前)提交之间的所有提交。
2023-03-20 13:43:04 5286
原创 内核链表 list
本文主要是参考公众号一口linux, 参考大佬写的文章,中间对其增加了一些自己的笔记,做一下记录在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制。首先找到list_head结构体定义,kernel/inclue/linux/types.h 如下:struct list_head
2021-12-29 20:04:29 281
原创 platform平台设备驱动开发基础
什么是设备驱动模型类,总线,设备,驱动 : 四个结构体类class : 自动创建设备节点总线: bus 把设备和驱动挂接起来设备: device驱动: driverkobject和对象生命周期kobject内核高度抽象的一个结构体,总的基类对象生命周期: 每个对象的存活时间,kobject有机制管理对象的生命周期sysfs : 是一种虚拟文件系统,内核空间和用户空间一种映射关系,以文件方式展现出来udev : 用户和内核一种通信机制,在应用层可以获取到内核发生的事
2021-09-29 13:15:46 289
原创 gpiolib库详解
gpiolib库详解gpiolib库简介linux中从2.6.35以后开始引入gpiolib库,gpiolib库的作用是对所有的gpio实行统一管理,因为驱动在工作的时候,会出现好几个驱动共同使用同一个gpio的情况,这样会造成混乱, 所以内核提供了一些方法来管理gpio资源。GPIO 资源是相对来说较为简单,而且比较通用(比如 LED 灯),而 Linux 的 GPIO 驱动属于 Linux Driver 中较为容易上手的部分,但是简单归简单,在 Linux 系统中,要使用 GPIO 资源,还是需要了
2021-09-29 11:43:59 2099
原创 字符设备驱动高级(II)
老接口分析: register_chrdev: __register_chrdev_region cdev_alloc cdev_add新接口: register_chrdev_region: __register_chrdev_region自动创建字符设备驱动文件使用mknod创建设备文件的缺点不方便,能否自动生成和删除设备文件insmod时自动安装设备节点,卸载时自动删除解决方案:udev机制(mdev)应用层的一个应用程序, 在busybox中实现
2021-05-29 07:04:21 107
原创 字符设备驱动高级(I)
注册字符设备驱动新的接口新接口和老接口老接口:register_chrdev: 一个接口就完成了字符设备驱动的注册fops包含设备的操作函数主次设备号是内核对这个设备的编号,fops和主次设备号相绑定就是关键新接口: register_chrdev_region/alloc_chrdev_region + cdevregister_chrdev_region只是注册了一个设备号,告诉内核这个设备号我用了alloc_chrdev_region 让内核分配一个设备号给我们用cd
2021-05-25 21:36:57 75
原创 字符设备驱动基础(II)
系统整体的工作原理:应用层->API->设备驱动->硬件发相应得指令可以指令可以执行不一样得操作,这个规则靠设备驱动来指定。这些规则通过api显示出来,给应用层调用应用层传相应参数进来,设备驱动通过参数控制硬件执行相应操作API: open, read, write, close 系统调用open一个设备,read从设备中读数据,write往设备中写数据驱动源码中要提供真正的open, read, write, close等函数实体注意:如果我们不使用unr
2021-05-24 21:32:22 149
原创 字符设备驱动基础 (I)
1.驱动开发的准备工作1. 正常运行linux系统的开发板,可以移植内核在上面,要求开发板中的zImage必须是自己编译的,不能是别人编译的2. 相对应的内核源码,就是配置编译之后的3. nfs挂载的rootfs, 在主机ubuntu中搭建一个nfs服务器。也可以自己编译好rootfs, 然后烧录到开发板,启动时挂载也行。2.驱动开发的步骤驱动源码编写,Makefile编写,编译insmod装载模块,测试,rmmod卸载模块3.驱动开发环境搭建x210内核编译D:x210ke
2021-05-19 19:30:17 141
转载 vscode 下载和搭建远程开发环境
Vscode 下载和远程环境搭建国内网站下载 vscode真的是慢的不行,这里提供一个可以快速下载的方法https://note.qidong.name/2020/05/dl-vscode-cn/也可以从下面直接下载,摘录自上文:Win32User: https://update.code.visualstudio.com/latest/win32-user/stableSystem: https://update.code.visualstudio.com/latest/win32/st
2021-02-18 14:15:37 799
转载 系统程序员成长计划-工程管理(四)
系统程序员成长计划-工程管理(四)作者联系方式:李先静 应用程序前面我们创建的helloworld是一个应用程序工程,它很简单,只使用了标准C的函数。现在我们要建立一个应用程序工程,它将使用前面所写的libbase函数库。o目录结构最顶层目录名用模块名称,这里用appdemo。源文件放在模块下的src子目录里,即appdemo/src。o 创建源文件在src下创建源文件main.c,内容只是简单的调用一下libbase里的函数。#include <dlist.h> int
2020-12-01 11:00:21 142
转载 系统程序员成长计划-工程管理(三)
系统程序员成长计划-工程管理(三)作者联系方式:李先静 系统程序员成长计划-工程管理(三)函数库现在我们用automake来管理我们前面所建立的函数库,这是一个基础的函数库,我们就把它命名为base吧。o 目录结构base 根目录base/src 源代码目录o 创建Makefile模板base/Makefile.am内容为:SUBDIRS=srcbase/src/Makefile.am内容为:lib_LTLIBRARIES=libbase.lalibbase_la_SOURCES
2020-12-01 10:59:30 159
转载 系统程序员成长计划-工程管理(二)
系统程序员成长计划-工程管理(二)作者联系方式:李先静 系统程序员成长计划-工程管理(二)HelloWorldautomake比起IDE要复杂很多,这里我们先写一个Hello World例子,明白其中的基本概念后,再用它来管理实际的工程。o目录结构最顶层目录名用模块名称,这里是helloworld。源文件放在模块下的src子目录里,即helloworld/src。这是惯例。有多个子模块时,各个子模块的源代码放在各自的目录里。o 创建源文件在src下创建源文件main.c,内容就是一个简单
2020-12-01 10:58:53 117
转载 系统程序员成长计划-工程管理(一)
系统程序员成长计划-工程管理(一)作者联系方式:李先静 到目前为止本书的上半部分已经完成了。在上半部分中,我们学习了基本的数据结构、算法和设计思想。在进行深入学习之前,我们把前面所写的代码整理成一个通用的函数库,这个函数可能在以后的工作中用得着。前面我们写的Makefile非常简单,大概类似下面的内容:all: gcc -Wall -g -DDARRAY_TEST darray.c -o darray_test gcc -Wall -g -DDLIST_TEST dlist.c -o
2020-12-01 10:58:05 112
转载 timer_create系列定时器函数
定时器函数之timer_create系列在调试mbim信令得sar level问题中,因为我们sar level这个信令和modem得注册是我们手动注册得,如果我们modem侧重启sar level得信令就会失去作用从而无法设置sar level状态。在我们调试代码中,定时器起着非常大得作用,在测试中我们可以使用sleep, alarm信号,muduo网络库还有timerfd_create函数,还可以使用sigpromask和sigsuspend组合来实现定时,但是这里我们讲timer_creater实
2020-11-25 16:44:34 7917 1
转载 container of()函数简介
container of()函数简介Typeof关键字介绍前言typeof() 是GUN C提供的一种特性,可参考C-Extensions,它可以取得变量的类型,或者表达式的类型。本文总结了typeof()关键字的常见用法,并给出了相应的例子,以加深理解typeof()关键字常见用法:typeof关键字常见用法一共有以下几种:1.不知道函数返回什么类型,可以使用typeof()定义一个接收该函数返回值的变量#include <stdio.h>#include <stdli
2020-11-23 17:03:08 382
转载 nginx安装及其配置
测试环境Nginx安装及其配置一:Nginx安装需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。 安装前的准备:1) 准备 pcre-8.12.tar.gz。该文件为正则表达式库。让nginx支持rewrite需要安装这个库。2)准备 nginx-1.5.0.tar.gz。该文件为nginx的linux版本安装文件3)确保进行了安装了linux常用必备支持库 Lin...
2018-04-16 19:58:26 212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人