![](https://img-blog.csdnimg.cn/20200405163000509.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 66
Linux随记
wmail-yh
ing
展开
-
内核学习——0、内核各类机制
定义interrupt-controller节点一般是bsp dts写好的要用哪个IO作为 irq,在自己设备节点中使用 interrupt-parent = <&外设>引用即可,然后interrupt = <信号脚 RISING/BOTH>,声明这个外设的具体哪个信号线和是什么电平触发。原创 2024-06-19 17:21:41 · 778 阅读 · 0 评论 -
内核学习——6、timer的学习和使用
/定时的时间点,当前时间的20ms之后。因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时。//绑定定时时间到后的执行函数。//添加并启动定时器。参数是timer中的变量data。原创 2024-06-19 17:07:30 · 381 阅读 · 0 评论 -
内核学习——5、中断
处理方式:硬中断是由CPU直接中断正在运行的程序,去处理中断源的请求;软中断需要将CPU的控制权转移到中断处理程序或其他特定的指令,待其处理完毕之后,再继续被打断的程序。软中断不会直接中断CPU,只有当前运行的进程才会产生软中断,软中断是一种需要内核为正在运行的进程去做一些事情(通常为IO)的请求。处理中断的驱动需要运行在CPU上的,中断产生时,CPU停止当前程序去处理中断请求,一个IRQ中断一个CPU。硬中断的中断号是由中断控制器提供,软中断的中断号是由指令直接指出,无需中断控制器。原创 2024-06-19 17:04:16 · 339 阅读 · 0 评论 -
内核学习——4、并发、竞争、同步与互斥
S加1,相加之后大于0,进程继续执行,若相加之后小于等于0,从信号等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。信号允许多个线程同时使用共享资源,和操作系统中PV操作相同,它有同时访问共享资源线程的最大数目,可以使等待资源进程进入休眠状态。S减1,若减1之后仍大于等于0,则进程继续执行,若减1之后小于0,该进程被阻塞到信号对应的队列中,然后转入进程调度。保护共享资源,实现线程同步。只有拥有互斥对象(即互斥量)的线程才具有访问共享资源的权限,互斥量只有一个,所以不能被多个线程同时访问。原创 2024-06-19 16:22:17 · 288 阅读 · 0 评论 -
内核学习——3、自旋锁的作用及其实现
作用:保护一段临界区的操作时独占的,不能由其他cpu或者线程同时访问破坏数据结构多核系统SMP:主要考虑一个cpu进入临界区之后,其他CPU不能再去进入这个临界代码区单核系统:不能被其他进程抢占单核系统自旋锁实现:两种情况打断:抢占、中断preempt_disable():关闭抢占preempt_enable():打开抢占普通自旋锁接口:spin_lock、spin_unlock:主要就是关闭和打开抢占风险是关闭抢占只是组织了其他进程对CPU的抢占,但不能阻止中断程序对CPU的抢占原创 2024-06-19 16:10:05 · 181 阅读 · 0 评论 -
内核学习——2、linux页高速缓存中脏页的概念
当进程修改了告诉缓存中的数据时,该页就被内核标记为脏页,内核将会在合适时间将脏页数据写到磁盘中,以保持高速缓存 中的数据和磁盘中的数据是一致的。硬盘的读写速度远不如内存速度,系统把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存。llinux是以页为高速缓存的单位。脏页是linux内核中的概念。原创 2024-06-19 15:20:13 · 96 阅读 · 0 评论 -
内核学习——1、list_head
通过结构体成员地址来求得结构体地址:ptr是所求结构体中的list_head成员指针,type是所求结构体类型,member是结构体list_head成员名。此时,list_head就作为它父结构体中的一个成员了,我们知道list_head的地址(指针)时,就可以通过list_entry来获得它的父结构的地址。结构体中没有数据域,所以一般把list_head嵌入到其他结构中使用。LIST_HEAD():生成双向链表头节点。list_for_each:遍历双向链表。双向循环链表:list_head。原创 2024-06-19 15:18:52 · 411 阅读 · 0 评论 -
Linux的dev/ 和 sys/ 和 proc/ 目录
dev 目录存放的是应用与内核交互的设备文件,而/sys/dev目录存放的是系统的所有设备,这些设备由文件系统管理应用层操控底层两种方式:1、/dev 目录下的设备文件(设备节点) :复杂点的设备, LCD,摄像头等2、/sys 目录下设备的属性文件 :简单点的设备, led、gpio等。原创 2024-06-19 14:32:36 · 913 阅读 · 0 评论 -
充电学习— 9、Typec Pd
GND:线缆接地TX RX:数据流data传输,支持2.0 3.0 speed兼容VBUS:线缆cable电源,bus powerCC:电缆cable的连接、方向、角色检测和当前模式的配置通道;有emark时, 一个成为VCONN,为电缆或者适配器供电,D+,D-:dp dm,可以短接, usb2.0上做设备连接type检测,根据bc1.2,识别sdp,cdp,dcpSBU:耳机、视屏,debug接口,dp(display port),原创 2024-06-19 11:44:42 · 1078 阅读 · 0 评论 -
充电学习—8、Type-C TCPC TCPCI
TCPC是usb Type-C port controller;通用串行总线C型端口控制器TCPCI是tcpc控制器接口规范;TCPC是个功能块,其中含有VBUS和VCONN的电源控制功能,CC信号的处理 逻辑,PD应用中的BMC物理层和协议层(PD信息的编码发送接收处理过程都在里面);信息的生成不包含其中USB-IF制定了一个接口标准,通过i2c接口将TCPM(Type-C port manager)和TCPC连接起来,所有的TCPC产品都以此标准来进行设计;原创 2024-06-19 10:28:33 · 383 阅读 · 0 评论 -
充电学习—7、BC1.2 PD协议
PD(portable device,便携式设备)中有个检测VBUS是否有效的电路,电路有个参考值,高于这个值认为VBUS有效,参考值不固定,一般在0.8V~4V之间。首先将PD+即设备的DP拉高至0.6V,然后检测PD-即设备DM的电压,如果小于规定的参考电压,则端口是数据口SDP;首先将PD-拉高至0.6V,然后检测PD+的电压,如果小于参考电压,则端口是CDP;PD快充充电时,DCP协议识别过程,首次检测和二次检测符合BC1.2规定,初始VBUS是5V,识别出DCP之后将VBUS提高至9V。原创 2024-06-18 22:15:51 · 636 阅读 · 0 评论 -
充电学习—6、电量计FuelGauge
2、库伦计量法(电流积分法):通过充放电路劲上连接的一个电阻分压检测,ADC测量电阻上的电压,转换为电流值,实时计数器RTC把这个电流值对时间积分,从而得知流过多少库伦。启用了shipping mode相当于断开了后极回路的静态电流,只关注充电芯片的静态电流,减少产品的耗电,增加存储时间。进入shipping mode之后,充电芯片会关闭BATFET驱动,还可能关闭其他功能,让充电芯片的静态功耗更低。1、开路电压法(查表法):通过开路电压对应荷电状态查表而得;计算电池的剩余容量、充满时容量、电量百分比。原创 2024-06-18 21:57:28 · 577 阅读 · 0 评论 -
充电学习—5、healthed 电池服务
main函数中,首先根据传入的参数不同区分:开机充电、recovery、关机充电。这三种情况,然后指定不同的healthd_mode_ops回调函数。healthd_mode_ops是一个关于充电状态的结构体变量,main里面做healthed初始化,并做一个主循环持续。//当底层有信息时,会调用update更新BatteryService中相关值。电池电量、充电状态、低温关机、低电关机、电池状态、适配器插拔等。//将电池监听注册到底层。//发送电池状态变换广播。原创 2024-06-17 18:00:40 · 526 阅读 · 0 评论 -
充电学习—4、一次完整的调试
RK3399充电管理_cw2015RK3399-bq25700原创 2024-06-17 17:41:19 · 231 阅读 · 0 评论 -
充电学习—3、Uevent机制和其在android层的实现
uevent是内核发送消息到用户空间的一种途径,通过netlink实现, 内核中通过kobject_uevent、kobject_uevent_env发送uevent消息用户空间使用标准的socket接口来监听接收uevent消息,;或者通过uevent-helper调用用户空间进程mdev来进行热插拔动作,处理方式遵循mdev.conf规则而 uevent 把事件上报给用户空间有两种途径:通过 kmod 模块,直接调用用户空间的可执行程序或脚本;原创 2024-06-17 17:37:25 · 935 阅读 · 0 评论 -
充电学习—2、开关电源基本原理
此种方式的相同之处:均采用时间比率控制(TRC)的稳压原理负载由轻变重,或者输出电压由高变低,分别通过,增加脉宽和升高脉频的方法使得输出电压保持稳定。原创 2024-06-17 15:12:15 · 385 阅读 · 0 评论 -
充电学习—1、psy框架梳理
此三部分是作为独立的设备驱动,都注册都power_supply下,每一个设备都是单独的psy设备,psy设备之间通过属性相互访问,2、struct power_supply_desc:该描述符定义了psy的属性,包括它的type,psy包含的属性列表和属性个数,等。5、power_supply_put:释放获取到的psy指针,和power_supply_get_by_name成对使用。4、power_supply_get_by_name:通过名字去获取一个psy指针。电池容量管理(容量自学习功能)原创 2024-06-17 15:10:10 · 677 阅读 · 0 评论 -
充电学习——0、电源管理
设备驱动作为系统一部分,会跟随系统进入低功耗状态,suspend (suspend-to-ram)一些驱动程序可以管理硬件的唤醒事件, 这一特性通过/sys/device/…/power/wakeup文件来开启和关闭在linxu中,通过 cat /sys/power/state可以看到当前设备支持的节能模式,一般有:standby:cpu处于浅睡模式,主要针对于cpu功耗mem:suspend to ram (STR): deep sleep睡眠 ,数据存ram,恢复快。原创 2024-06-17 15:00:23 · 419 阅读 · 0 评论 -
power_supply总框架
power supply framework给power supply(供电设备psy)提供统一框架,来管理battery,psy设备目的就是给系统充电,将一些必要信息给到上层用户,如充电源、电量变化、充放电状态、电池信息等可以分为两部分:1、电池监控(fuelgauge)fg2、充放电管理(charger)fuelgauge驱动:负责向上层android提供当前电池的容量和健康状态等电池信息,也给charger驱动提供电池的信息charger驱动:负责usb插拔检测、类型识别,充放电管理等。原创 2024-06-13 16:49:29 · 951 阅读 · 0 评论 -
mtk低压充电&&关机充电&&关机动画显示
电池电压高于3.45v,boot_mode select中判断是否是关机充电:kernel_power_off_charging_detection,确定是KERNEL_POWER_OFF_CHARGING_BOOT之后会进入关机充电模式。低电量充电显示的动画是由[fhd_bat_10_01.bmp~ fhd_bat_10_01.bmp]这10张静态图片组成,针对verion 1.数字图片[fhd_num_0.bmp~ fhd_num_9.bmp]共10张,,针对verion 1.原创 2024-06-13 16:01:51 · 944 阅读 · 2 评论 -
mtk镜像签名
执行完img_key_deploy.py之后,检查env.cfg下的配置是否更新。有了cert1和cert2 key后,就可以执行签名脚本。Step4: 下如下command 进行完成签名操作。env.cfg可以配置路径。原创 2024-06-13 15:33:10 · 831 阅读 · 0 评论 -
uboot启动内核总结
原创 2024-06-13 15:25:43 · 64 阅读 · 0 评论 -
内核存储框架了解
原创 2024-06-13 15:18:57 · 104 阅读 · 0 评论 -
类android设备reset过程
模式解析流程frameworks/base/core/java/android/os/PowerManager.javaframeworks/base/services/core/java/com/android/server/power/PowerManagerService.java把reason存储到SystemProperties,最后调用ShutdownThread带着reason传参frameworks/base/services/core/java/com/android/serve原创 2024-06-13 15:17:17 · 734 阅读 · 0 评论 -
u-boot启动第二阶段 Board.c
原创 2024-06-13 14:54:03 · 92 阅读 · 0 评论 -
u-boot启动第一阶段 Start.S
从start.s中构建异常向量表,然后到lowlevel中,然后完成2到7,之后再再ram中做栈重定位动作,建立mmu,最后跳转到ddr。从sram的uboot的第一阶段跳转到ddr下的uboot的第二阶段地址(不直接从ram中完成uboot是因为ram空间有限)原创 2024-06-13 11:40:28 · 154 阅读 · 0 评论 -
mtk充电器插拔检测
以mt6357 pmic为例,充电器插拔检测和类型检测在mt6357-charger-type.c下完成:下面分解看它的中断函数和检测函数:三、do_charger_detection_work:四、do_charger_detect:这个函数会在do_charger_detection_work和chrdet_int_handler都去调用,主要是做psy设备状态改变之后的通知动作;...原创 2022-06-13 18:13:26 · 1555 阅读 · 0 评论 -
power supply frameware 框架
power supply framework给power supply(供电设备psy)提供统一框架,来管理battery,psy设备目的就是给系统充电,将一些必要信息给到上层用户,如充电源、电量变化、充放电状态、电池信息等可以分为两部分:1、电池监控(fuelgauge)fg2、充放电管理(charger)fuelgauge驱动:负责向上层android提供当前电池的容量和健康状态等电池信息,也给charger驱动提供电池的信息charger驱动:负责usb插拔检测、类型识别,充放电管理等按照前面说的原创 2022-06-13 16:58:41 · 1114 阅读 · 0 评论 -
charger基础
部分名词原创 2022-06-08 18:24:34 · 2510 阅读 · 0 评论 -
mtk lk充电&&关机充电&&关机动画显示
在启动时读取电压小于BATTERY_LOWVOL_THRESOLD便会到lk循环充电,这里的BATTERY_LOWVOL_THRESOLD是3.45v通过fg计算电池充电电流,电池温度等在mtk_charger_init_list数组添加对应IC的probe去做charger initcharger init:根据回调ops获取充电信息info,IC使能等充电使能:charger_enable_charging充电保护状态,低电判断:is_low_battery, check_low_battery, c原创 2022-06-08 17:22:26 · 3019 阅读 · 0 评论 -
mtk启动流程分析
boot rom ————》preloader ————》lk ————》kernel ————》android每个芯片有自己的boot rom,上电时启动,然后将preloader加载到内部sram中,因为此时外部ram还没有初始化,需要preloader去初始化vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6765/src汇编完成,主要四切换系统到SVC模式(超级用户模式),平台要是有实现EL3,preloade原创 2022-06-07 20:19:25 · 3421 阅读 · 1 评论 -
linux driver并发和竞态--随记
并发、原子操作、锁、信号量并发和竞态原子操作互斥锁自旋锁信号量并发和竞态并发是指多个执行单元程序同时、并行的执行,这时并发的执行单元对一些共享资源如硬件资源、cpu资源、全局变量等的访问就会容易造成竞争使用并发多发生的环境:1、SMP多核处理器,系统总线的抢占等2、单CPU抢占式内核中,进程和抢占它的进程之间,抢占式内核操作系统是实时操作系统:vxworks、ucos3、中断(硬中断、...原创 2022-03-05 11:14:50 · 91 阅读 · 0 评论 -
设备树DTS
设备树DTSDTS引入DTS语法DTS在内核中的处理内核开始head.s对dtb文件的处理dts中的信息处理dtb转换device_nodedevice_node转换成platform_deviceDTS引入一个设备驱动程序的几种写法:1、最开始一般传统方法:直接在程序中写死硬件资源,代码简单,不易扩展,裸机小项目可以使用2、总线设备驱动模型:是将驱动程序分为platform_device和platform_driver,在平台设备中指定硬件资源,在平台驱动中做驱动程序的核心:分配、设置、注册fil原创 2020-11-30 19:25:35 · 345 阅读 · 0 评论 -
linux中断处理机制--随记
linux中断处理机制linux中断处理简介中断和异常的区别jiffies和timertasket(小任务机制)work_queuelinux中断处理简介中断源:引起中断的原因或者说发出中断请求的来源叫做中断源**中断类型:**外部中断,内部中断。 外部中断一般指外设发出的中断请求,可以屏蔽;内部中断是指因硬件出错或者运算逻辑出错引起的中断,也叫异常,不可屏蔽。中断处理:linux把...原创 2020-05-03 19:53:37 · 1052 阅读 · 0 评论 -
内核IO 阻塞/非阻塞、等待队列、同步/异步--随记
内核几种IO模型阻塞/非阻塞IO等待队列轮询、多路复用同步/异步阻塞/非阻塞IO**阻塞IO:**执行IO操作时,如果有数据返回数据,没有数据就休眠等待数据然后返回。这里的执行IO操作是用户态去对内核态做IO操作,数据返回是指用户态使用系统调用函数去访问内核时的数据拷贝,休眠是指内核中利用等待队列实现的进程休眠**非阻塞IO:**执行IO操作时,如果有数据返回数据,没有数据返回0。就是用户态...原创 2020-05-03 16:15:37 · 668 阅读 · 0 评论 -
char device driver--随记
字符设备驱动了解简介字符设备驱动操作简介linux驱动层次图:用户程序和内核驱动、硬件数据交互方法:1、利用/dev设备节点去读、写和ioctl操作2、利用/proc和/sys伪文件系统驱动程序分类:1、字符设备驱动:按字节流访问操作,如鼠标、键盘2、块设备驱动:按block访问操作,带有缓冲,如磁盘、U盘3、网络设备驱动:如网卡字符设备驱动操作1、设备号:设备编号是设备...原创 2020-05-02 17:08:48 · 285 阅读 · 0 评论 -
内核模块--随记
内核模块 kernel module简介module加载卸载模块加载:modprobe 模块名模块卸载:modpeobe -r 模块名 或者 rmmod 模块名module编写框架模块的入口和退出模块的编译编写makefileLicense模块参数简介内核模块,可以根据需要去加载进内核或者从内核中卸载的代码块,这操作期间可以不用重启系统。这样使得内核镜像可以按要求裁剪,不用全部功能都去加载进去...原创 2020-05-02 12:44:51 · 340 阅读 · 0 评论 -
Linux设备模型简介--随记
linux driver设备模型简介linux设备模型介绍总线设备驱动类sysfskobjectkset、kobj_typeplatform bus一个platform驱动设计步骤总结linux设备模型介绍linux内核代码有80%都是driver,越来越多的设备,就会需要越来越多的驱动,这样会使内核代码越来越庞大臃肿,为降低设备多样性带来的驱动开发的复杂度,以及设备热插拔、电源管理等 ,内核...原创 2020-04-25 21:19:52 · 783 阅读 · 0 评论 -
进程间通信IPC-随记
IPCIPC介绍管道信号system_vIPC介绍原理 :在内核中指定一块进程双方都知道的内存空间去做数据交互的通信进程间通信的几种方式:管道: 无名管道pipe , 有名管道fifio信号: signalsocket:system_v_IPC:消息队列共享内存信号量管道利用文件系统调用的接口(read/write),在内核缓冲区创建一中用于进程间通信的...原创 2020-04-05 23:08:07 · 200 阅读 · 0 评论 -
文件强制删除-随记
有一些文件遗留在windows上怎么都删除不了,使用下面命令,写一个dos脚本,然后使用bat脚本可以将其删除:DEL /F /A/Q \?%1RD /S /Q \?%1原创 2020-03-22 17:24:34 · 284 阅读 · 0 评论