自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

转载 内核学习——6、ftrace

可以看此文章:ftrace

2024-06-24 15:55:37 22

原创 充电相关名词

PD快充协议,是type-C口的快充协议,必须是俩头都是type-C口的线才行。QC是非常简单的一些快充协议,电源通过USB口的数据线就是D+/D-俩个pin,传递数据,信号就是移动设备给俩个PIN上面给多大电压,然后持续多久后拉低,电源就相应的给到多少电压和电流,总之这个非常的简单,我会在后面的文章里面做详细的介绍。2.VDD的D是Device的意思,指设备上的电压,我理解的就是设备运行的电压值,比如说STM32芯片的电压值一般为3.3V,说的应该就是VDD,VDD一般也指单极器件的正极。

2024-06-21 17:10:34 856

原创 内核学习——0、内核各类机制

定义interrupt-controller节点一般是bsp dts写好的要用哪个IO作为 irq,在自己设备节点中使用 interrupt-parent = <&外设>引用即可,然后interrupt = <信号脚 RISING/BOTH>,声明这个外设的具体哪个信号线和是什么电平触发。

2024-06-19 17:21:41 778

原创 内核学习——6、timer的学习和使用

/定时的时间点,当前时间的20ms之后。因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时。//绑定定时时间到后的执行函数。//添加并启动定时器。参数是timer中的变量data。

2024-06-19 17:07:30 382

原创 内核学习——5、中断

处理方式:硬中断是由CPU直接中断正在运行的程序,去处理中断源的请求;软中断需要将CPU的控制权转移到中断处理程序或其他特定的指令,待其处理完毕之后,再继续被打断的程序。软中断不会直接中断CPU,只有当前运行的进程才会产生软中断,软中断是一种需要内核为正在运行的进程去做一些事情(通常为IO)的请求。处理中断的驱动需要运行在CPU上的,中断产生时,CPU停止当前程序去处理中断请求,一个IRQ中断一个CPU。硬中断的中断号是由中断控制器提供,软中断的中断号是由指令直接指出,无需中断控制器。

2024-06-19 17:04:16 339

原创 内核学习——4、并发、竞争、同步与互斥

S加1,相加之后大于0,进程继续执行,若相加之后小于等于0,从信号等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。信号允许多个线程同时使用共享资源,和操作系统中PV操作相同,它有同时访问共享资源线程的最大数目,可以使等待资源进程进入休眠状态。S减1,若减1之后仍大于等于0,则进程继续执行,若减1之后小于0,该进程被阻塞到信号对应的队列中,然后转入进程调度。保护共享资源,实现线程同步。只有拥有互斥对象(即互斥量)的线程才具有访问共享资源的权限,互斥量只有一个,所以不能被多个线程同时访问。

2024-06-19 16:22:17 288

原创 内核学习——3、自旋锁的作用及其实现

作用:保护一段临界区的操作时独占的,不能由其他cpu或者线程同时访问破坏数据结构多核系统SMP:主要考虑一个cpu进入临界区之后,其他CPU不能再去进入这个临界代码区单核系统:不能被其他进程抢占单核系统自旋锁实现:两种情况打断:抢占、中断preempt_disable():关闭抢占preempt_enable():打开抢占普通自旋锁接口:spin_lock、spin_unlock:主要就是关闭和打开抢占风险是关闭抢占只是组织了其他进程对CPU的抢占,但不能阻止中断程序对CPU的抢占

2024-06-19 16:10:05 181

原创 内核学习——2、linux页高速缓存中脏页的概念

当进程修改了告诉缓存中的数据时,该页就被内核标记为脏页,内核将会在合适时间将脏页数据写到磁盘中,以保持高速缓存 中的数据和磁盘中的数据是一致的。硬盘的读写速度远不如内存速度,系统把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存。llinux是以页为高速缓存的单位。脏页是linux内核中的概念。

2024-06-19 15:20:13 96

原创 内核学习——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 412

原创 USB学习——12、usb初始化和插拔驱动软件流程大致框架描述

1、xhci-plat.c主机控制器驱动那里,__usb_creat_hcd创建usb主机数据结构,main_hcd(primary_hcd)和shared_hcd,前者usb2.0,后者usb3.0,然后通过usb_add_hcd添加一个新的主机设备。4、之后hub_probe开始,hub_event 和 hub_configure ,hub的端口上有事件时去处理事件读取配置usb设备接口的描述符等配置,hub控制传输,hub状态变化,hub中断,hub port状态变化,

2024-06-19 15:14:06 366

原创 Linux的dev/ 和 sys/ 和 proc/ 目录

dev 目录存放的是应用与内核交互的设备文件,而/sys/dev目录存放的是系统的所有设备,这些设备由文件系统管理应用层操控底层两种方式:1、/dev 目录下的设备文件(设备节点) :复杂点的设备, LCD,摄像头等2、/sys 目录下设备的属性文件 :简单点的设备, led、gpio等。

2024-06-19 14:32:36 917

原创 充电学习— 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 1088

原创 充电学习—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 389

原创 充电学习—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 646

原创 充电学习—6、电量计FuelGauge

2、库伦计量法(电流积分法):通过充放电路劲上连接的一个电阻分压检测,ADC测量电阻上的电压,转换为电流值,实时计数器RTC把这个电流值对时间积分,从而得知流过多少库伦。启用了shipping mode相当于断开了后极回路的静态电流,只关注充电芯片的静态电流,减少产品的耗电,增加存储时间。进入shipping mode之后,充电芯片会关闭BATFET驱动,还可能关闭其他功能,让充电芯片的静态功耗更低。1、开路电压法(查表法):通过开路电压对应荷电状态查表而得;计算电池的剩余容量、充满时容量、电量百分比。

2024-06-18 21:57:28 578

原创 充电学习—5、healthed 电池服务

main函数中,首先根据传入的参数不同区分:开机充电、recovery、关机充电。这三种情况,然后指定不同的healthd_mode_ops回调函数。healthd_mode_ops是一个关于充电状态的结构体变量,main里面做healthed初始化,并做一个主循环持续。//当底层有信息时,会调用update更新BatteryService中相关值。电池电量、充电状态、低温关机、低电关机、电池状态、适配器插拔等。//将电池监听注册到底层。//发送电池状态变换广播。

2024-06-17 18:00:40 527

原创 充电学习—4、一次完整的调试

RK3399充电管理_cw2015RK3399-bq25700

2024-06-17 17:41:19 231

原创 充电学习—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

原创 充电学习—2、开关电源基本原理

此种方式的相同之处:均采用时间比率控制(TRC)的稳压原理负载由轻变重,或者输出电压由高变低,分别通过,增加脉宽和升高脉频的方法使得输出电压保持稳定。

2024-06-17 15:12:15 385

原创 充电学习—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、电源管理

设备驱动作为系统一部分,会跟随系统进入低功耗状态,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

原创 充电学习——总纲

2024-06-14 10:49:58 87

原创 usb协作驱动

如果dr_mode为host,需要初始化xHCI驱动。在dwc3_host_init函数的最后调用platform_device_add(xhci)添加platform device(xhci-hcd),用于匹配xHCI driver(xHCI driver为platform driver),1)在xhci_plat_init中调用platform_driver_register(&usb_xhci_driver)注册platform driver(“xhci-hcd”)

2024-06-13 17:32:41 956

原创 mtk充电器插拔检测

这个函数会在do_charger_detection_work和chrdet_int_handler都去调用,主要是做psy设备状态改变之后的通知动作。

2024-06-13 17:08:53 281

原创 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

原创 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 952 2

原创 mtk镜像签名

执行完img_key_deploy.py之后,检查env.cfg下的配置是否更新。有了cert1和cert2 key后,就可以执行签名脚本。Step4: 下如下command 进行完成签名操作。env.cfg可以配置路径。

2024-06-13 15:33:10 831

原创 uboot启动内核总结

2024-06-13 15:25:43 64

原创 uid/chipid/socid

ChipID ChipID 一般存在于 AON_APB 寄存器上,用来标记芯片型号,更广义理解的话、 ChipID 还包括 VERSION ID AA/AB/AC )、 MFT_ID (标记晶圆厂及制程。UID UID 本质上是芯片在出厂 前 在 efuse 中专门的 block 写入的 CHIP SN/LOTID/wafer ID 等。关于 UID 、 CHIPID 、 SN 、 SOCID 几个名词的 区别。来的值,保证每颗芯片都不一样;信息)、 IMPL_ID 等标记于寄存器上的芯片信息;

2024-06-13 15:23:46 452

原创 内核存储框架了解

2024-06-13 15:18:57 104

原创 类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

原创 u-boot启动第二阶段 Board.c

2024-06-13 14:54:03 92

原创 使用python完成一个定时从版本库下载daily版本

【代码】使用python完成一个定时从版本库下载daily版本。

2024-06-13 14:42:00 190

原创 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

原创 展锐charger dts配置值介绍

展锐charger dts配置值介绍。

2022-12-12 20:01:02 1235

原创 原子量的妙用--保护usb时序

usb使用musb控制器,展锐的平台处理代码是musb_sprd.c,在这个文件中对usb mode做检测和切换,log级别跳到最高,在probe中的关键函数前后添加log,确定出现问题的上下文,最终确定是在vbus和id检测的回调函数上下文有问题,musb_sprd_vbus_notifier回调函数 和 musb_sprd_id_notifier检测回调函数之间的顺序概率性的错误。正常的顺序是,先做vbus的检测,检测到cable vbus之后,再做id的检测,确定extcon设备mode。

2022-12-12 19:54:45 491

原创 Usb rndis,mtp等function添加,config配置

linux usb驱动原生功能代码一般可以直接使用,添加进去参与编译就能继续往下做调试了,、在设备侧,通过ping 192.168.70.5 up, 设置设备侧的ip地址。在linux中usb驱动代码中添加rndis或者mtp等功能驱动代码,要保证pc侧和设备侧ip在同一网段,然后互相ping通算成功。、在pc侧设置此网络的ip的地址。然后切换到对应的usb 功能。在pc侧出现rndis网口之后。

2022-12-12 19:50:21 1406 1

原创 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

原创 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

原创 charger基础

部分名词

2022-06-08 18:24:34 2513

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除