自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(683)
  • 资源 (1)
  • 收藏
  • 关注

原创 芯片设计群 ,欢迎 IC领域朋友请加我微信交流:Jdrobots ,加我备注IC。谢谢! 芯片设计资料

https://pan.baidu.com/s/19odKf_wcL8pGVpbT8GBvcQ

2019-01-08 19:36:26 3032

原创 机器人操作系统ROS微信群, 欢迎加我微信: Jdrobots 技术相互学习交流(加我请备注ROS,谢谢!) 。

ROS相关问题新建个微信群, 欢迎加我微信: Jdrobots 技术相互学习交流(加我请备注ROS,谢谢!) 。

2018-08-11 14:56:45 1178

原创 pm_wakeup.h

419-515内核电源管理变更头文件

2023-02-09 20:37:16 556 1

转载 I2C设备注册的4种方法

I2C设备的4种添加方法:1)静态注册2)动态注册3)用户空间注册4)i2c驱动扫描注册。

2022-11-21 10:36:20 2209

原创 内核驱动中断申请类型及函数分析

具体是否要设定one shot的flag是和硬件系统有关的,我们举一个例子,比如电池驱动,电池里面有一个电量计,是使用HDQ协议进行通信的,电池驱动会注册一个threaded interrupt handler,在这个handler中,会通过HDQ协议和电量计进行通信。对于这个handler,通过HDQ进行通信是需要一个完整的HDQ交互过程,如果中间被打断,整个通信过程会出问题,因此,这个handler就必须是one shot的。对应基本触发类型:高电平触发,低电平触发,下降沿触发,上升沿触发。

2022-11-16 22:05:06 2274

转载 request_threaded_irq

在linux里,中断处理分为顶半(top half),底半(bottom half),在顶半里处理优先级比较高的事情,要求占用中断时间尽量的短,在处理完成后,就激活底半,有底半处理其余任务。tasklet和work queue在普通的driver里用的相对较多,主要区别是tasklet是在中断上下文执行,而work queue是在process上下文,因此可以执行可能sleep的操作。当多个设备共享中断时,由于IRQF_ONESHOT会关闭中断线程的中断,而线程一般执行时间会比较长,所以是不允许的。

2022-11-16 21:50:45 2885

转载 linux内核中断 X86

按照目前的内核设计,中断有自己的栈,用来执行中断服务程序,这样是为了防止中断嵌套破坏与之共享的中断栈的定义,可以看到与进程上下文的布局相同,thread info + stack58 /*60 */1234567中断栈的初始化:创建percpu变量hardirq_ctx和softirq_ctx,类型为irq_ctx,所以每个cpu的软硬中断有各自的stack123hardirq_ctx和softirq_ctx的初始化方式相同,如下116 /*

2022-11-16 21:48:48 537

转载 Android系统下通过GPIO硬件中断实现Android程序唤醒

Android系统底层基于Linux内核,所以要实现硬件中断唤醒Android程序,需要编写Linux驱动,注册对应GPIO中断函数,然后通过异步通知方式将中断信号发送到用户空间应用程序,用户空间应用程序需要注册信号,再将进程PID注册为异步通知方式,这样就能够接收驱动程序发过来的中断信号了,然后我们在用户空间注册的信号处理函数中唤醒Android程序。原文链接:https://blog.csdn.net/a499957739/article/details/104425753///设置fasync标记。

2022-11-14 19:26:52 1088

转载 BC1.2中文

Scope包含了规范中一些术语的定义什么是Dead Battery的阈值?通俗的说就是电池的一个电压值,低于这个值系统就肯定启动不了。电压低于这个值的电池叫Dead Battery。DCP就是墙充,即wall adapter。就是平时用的连到220v插座的充电器。不能枚举USB设备,可以供(4.75v< VCHG

2022-11-08 22:19:40 4592

原创 CH34X linux驱动安装,参考代码例程

之后重新 make 即可;2. 修改/lib/modules/5.11.0-37-generic/build/Makefile文件注释掉KBUILD_CFLAGS += -Werror=date-time。make[2]: *** [scripts/Makefile.build:288:/home/ubuntu/CH36X_LINUX/drv/ch36x.o] 错误 1。make[1]: *** [Makefile:1849:/home/ubuntu/CH36X_LINUX/drv] 错误 2。

2022-11-06 22:01:49 926

转载 Linux libusb

在进行开发之前,建议先通过USB规范文档对USB有一定的了解,如描述符、配置、接口、端点、控制/批量/中断/等时传输等。上一篇博客主要介绍了libusb在linux系统下的详细安装过程,目前新的libusb离线包已经不需要再单独安装libusb-compat资料包了。启用此功能后,libusb 将在声明接口时自动分离接口上的内核驱动程序,并在释放接口时附加它。重新附加接口的内核驱动程序,该驱动程序之前使用 libusb_detach_kernel_driver() 分离。激活接口的备用设置。

2022-11-06 19:24:31 1579

转载 VIM简介及命令

vim是Linux环境下一款功能强大、高度可定制的文本编辑工具,类似于Windows下面的source insight、sublime、notepad。VI是visual interface的缩写,即可视化接口。vim 即 vi IMproved,在 vi 的基础上做了很多改进,如:增加了多级撤销、多窗口操作、崩溃后也可以恢复、增加了稳定性、关键字自动补全、上下文自动补全等功能。vim的各种工作模式可以通过不同的键进行切换,用户统一使用ESC键返回到普通模式。vim一般有6种工作模式。

2022-10-29 12:12:35 4140

原创 error: variable has incomplete type ‘struct sched_param‘ struct sched_param param = { .sched

4.19内核编译报错 :error: variable has incomplete type 'struct sched_param' struct sched_param param = { .sched_priority。Linux内核版本升级变更给开发者带来诸多不便,安卓建立在内核之上,同样对开发者造成困扰。不断的版本升级更新,让众多开发人员疲于追随,也许这就是普通程序员宿命吧。

2022-10-29 09:52:25 2504

原创 <linux/power_supply_old.h>

*****//**//**/enum {};enum {};enum {};enum {};enum {};enum {};*/*/*/};};};

2022-10-28 11:23:42 501

原创 old version wakelock.h

****/*/enum {};};{}{}{}{}{}{}#endif。

2022-10-28 11:10:31 384

原创 #include <hardware/bluetooth.h>

*****//***/*//***//***//***//***//***//**

2022-10-28 10:02:19 938

原创 if you lost the file /linux/wakelock.h ,use the follow.

****

2022-10-28 09:45:08 430

转载 Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数

该宏定义的文件如下:include/linux/device.h};__ATTR定义于文件 include/linux/sysfs.h}说明_name:名称,也就是将在sys fs中生成的文件名称。_mode:上述文件的访问权限,与普通文件相同,UGO的格式,最高权限0644,否则会报错。_show:显示函数,cat该文件时,此函数被调用。_store:写函数,echo内容到该文件时,此函数被调用。

2022-10-24 16:59:39 423

转载 sysfs接口函数的建立_DEVICE_ATTR

如 对设备的使用 DEVICE_ATTR ,对总线使用 BUS_ATTR ,对驱动使用 DRIVER_ATTR ,对类 别 (class) 使用 CLASS_ATTR, 这四个高级的宏来自于函数宏DEVICE_ATTR内封装的是__ATTR(_name,_mode,_show,_stroe)方法,_show表示的是读方法,_stroe表示的是写方法。如果你完成了DEVICE_ATTR函数宏的填充,下面就需要创建接口了。

2022-10-24 16:48:05 585

转载 modprobe命令用于智能地向内核中加载模块或者从内核中移除模块

其实modprobe -l读取的模块列表就位于/lib/modules/`uname -r`目录中;模块名是不能带有后缀的,我们通过modprobe -l所看到的模块,都是带有.ko或.o后缀。-r或--remove:模块闲置不用时,即自动卸载模块;-c或--show-conf:显示所有模块的设置信息;-v或--verbose:执行时显示详细的信息;-V或--version:显示版本信息;-l或--list:显示可用的模块;-a或--all:载入全部的模块;-t或--type:指定模块类型;

2022-10-24 16:27:44 771

转载 BC1.2 PD协议

BC1.2充电端口USB2.0协议规定外设从USB充电器抽取电流的最大值为500mA,500mA的电流限制无法满足日益增长的快充需求。因此,BC1.2引入了充电端口识别机制,主要包括以下几个USB端口类型:1.标准下行端口(SDP)SDP端口支持USB协议,最大电流500mA,可以认为SDP就是普通的USB接口2.专用充电端口(DCP)DCP不支持数据协议,支持快充,可以提供大电流,DCP主要用于墙充等专用充电器3.充电下行端口(CDP)CDP既支持数据协议也支持快充

2022-10-16 18:43:34 2389

转载 细谈Type-C、PD原理(上/下)

接口大小跟Micro USB相近,约为8.3mm x 2.5mm,支持正反插,同时也规范了对应的线材,接口定义如下(线材端只有一对USB2.0 DATA):图2 Type-C端口的PIN定义-1图3 Type-C端口的PIN定义-2在插座定义上,定义了如下两种插座:a)全功能的Type-C插座,可以用于支持USB2.0、USB3.1、等特性的平台和设备。b)USB 2.0 Type-C插座,只可以用在支持USB2.0的平台和设备上。在插头定义上,定义了如下三种插头:

2022-10-16 11:38:01 15556 2

转载 Linux驱动基础:MSM平台AP/CP通信机制

MSM平台AP和CP封装到一个芯片,共享内容。所以之前也说过,高通的MSM解决方案中,CP的代码都是由AP放到指定地址的内存中以供CP运行。那上传完代码,CP开始跑之后,AP/CP之间的通信又是怎么弄的呢?其实也是在内存中开辟一段共享内存进行通信的。高通文档中有介绍以下三种。

2022-10-16 11:37:17 1342

转载 TCPC简介

这个功能块在现实中的位置在哪里呢?详细解读表中信息的工作量会很大,TCPCI 规范和我们的产品如 RT1718S 规格书都用了很大的篇幅来列出寄存器的详细信息,需要做详细设计的人肯定要去仔细研究,作为大概的了解就不必了,但是浏览一下还是能找到一些乐趣,例如我们可以从寄存器的排序上看出它的发展历程,PD 协议是后来才有的,它的发送和接收寄存器也被排在后面,这大概就是先来后到的影响吧,但这也只是我自己的看法,因为我并没有对多个版本的规范进行比较;扩展定义是厂家需要的,它的排序就在最后的 80h…

2022-10-14 14:57:16 2387

转载 快充协议(QC/PD/PE)

按充电协议可分为 高通QC 2.0/3.0/4.0/5.0, 华为FCP/SCP,MTK PE2.0/3/0, Oppo VOOC/Super VOOC, Apple(2.4A)…符合Quick Charge 2.0、3.0、4和5标准的附件需要为所有电压提供至少500mA(负载),但它允许支持不同的I/V曲线,以获得最大的设计灵活性–以下是一些例子。原文链接:https://blog.csdn.net/Johnho130/article/details/115422647。

2022-10-13 20:56:47 9124

转载 poll机制的总结

②如果在在time_out的时间内发生了中断,在中断处理函数中,就会把中断事件标志置1,然后把进程唤醒,同时得到按键的值,中断处理完成后又会回到for死循环中,再次执行驱动程序的forth_drv_poll()函数,此时由于中断事件标志为1,所以会返回一个非零的mask,进而count++,打破break跳出死循环,然后poll()返回一个非零的ret同时在接下来执行read函数,获得键值之后,将键值打印出来。//上述条件不满足下面开始进入休眠,若有等待的事件发生了,超时或收到信号则唤醒。

2022-10-13 17:09:14 632

转载 poll函数_Linux select/poll机制原理分析

在设备驱动程序中实现的 poll()函数,会在 do_select()中被调用,而驱动中的 poll()函数,需要调用 poll_wait()函数, poll_wait函数本身很简单,就是去回调函数 p->_qproc(),这个回调函数正是 poll_initwait()函数中初始化的 __pollwait();这一顿操作,其实就是驱动向select维护的struct poll_wqueue中注册,并将调用select的任务添加到驱动的等待队列中,以便在合适的时机进行唤醒。

2022-10-13 17:07:00 786

转载 Linux驱动之poll机制

当应用程序调用poll函数的时候(比如:poll(fds,1,5000),fds是定义的一个poll类型的结构体),poll是一个系统调用,会调用到内核入口函数sys_poll(可在内核中找到该函数),该函数最终会调用do_poll函数,do_poll函数中有一个死循环,在里面又会利用do_pollfd()函数去调用驱动中file_operations里的.poll函数。if(do_pollfd(pfd, pt)) //会调用到内核里file_operations里的.poll函数。

2022-10-13 16:16:09 1391

原创 Linux平台打印资源占用问题及优化方式

当遇到performance导致的各类问题时,例如卡音,冻屏,甚至是modem assert,可以先查看kernel log是否有发现连续大量调用printk打印太多log,此时,很有可能是因为客戶添加printk打印的log过多导致的问题!遇到这种情况时,可先尝试在user版本上看是否复现,如果不复现,一般会采取在ENG版本上开机加入Launcher之后关闭UART Log。进入launcher之后,如果想继续打开UART log该怎么办呢?

2022-10-13 09:19:11 777

转载 【Android休眠】引申之关于系统PM的思考

被动外设:外设的行为完全由kernel控制,典型的就是led。这种情况下的休眠/唤醒比较简单,按照外设支持的方式操作即可,最简单的方式就是断电/上电(比如休眠的时候关闭led)。自带CPU类型的外设:即外设有自己的控制中心,比如4G模组/WiFi模组等。这种情况下,在休眠/唤醒动作发生时,通过通信链路告知外设执行休眠/唤醒。这里,CPU针对硬件,kernel针对运行在CPU中的软件(Linux)。kernel进入休眠时,调用驱动注册的xxx_suspend()函数,唤醒时调用xxx_resume()函数。

2022-10-12 18:01:36 153

转载 Linux电源管理(5)_Hibernate和Sleep功能介绍

1. 前言Hibernate和Sleep两个功能是Linux Generic PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电········>恢复系统——>恢复上下文——>继续使用。本文以内核向用户空间提供的接口为突破口,从整体上对这两个功能进行介绍,并会在后续的文章中,分析它们的实现逻辑和执行动作。

2022-10-12 17:55:49 510

转载 Linux _PM_OPS

从Linux PM Core的角度来说,这些callbacks并不复杂,因为PM Core要做的就是在特定的电源管理阶段,调用相应的callbacks,例如在suspend/resume的过程中,PM Core会依次调用“prepare—>suspend—>suspend_late—>suspend_noirq-------wakeup--------->resume_noirq—>resume_early—>resume-->complete”。由于涉及的内容非常多,我们在具体使用的时候,顺便说明。

2022-10-12 17:43:32 210

原创 Linux不同内核版本_LINUX_INIT_H差异

#ifndef _LINUX_INIT_H#define _LINUX_INIT_H#include /* These macros are used to mark some functions or * initialized data (doesn't apply to uninitialized data) * as `initialization' functions. The kernel can take this * as hint that th

2022-10-12 16:43:04 445

原创 Linux代码执行入口登记表

/2 #define core_initcall_sync(fn) __define_initcall("1s",fn,1s) 入口1s。//6 #define arch_initcall_sync(fn) __define_initcall("3s",fn,3s) 入口3s。//4 #define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s) 入口2s。

2022-10-12 15:51:44 70

转载 linux子系统的初始化_subsys_initcall()

这就告诉我们.initcall.init节又分成了7个子节,而xxx_initcall入口函数指针具体放在哪一个子节里边儿是由xxx_initcall的定义中,__define_initcall宏的参数决定的,比如core_initcall将函数指针放在.initcall1.init子节,device_initcall将函数指针放在了.initcall6.init子节等等。各个子节的顺序是确定的,即先调用.initcall1.init中的函数指针再调用.initcall2.init中的函数指针,等等。

2022-10-12 15:16:57 230

转载 regmap简介

Regmap 机制是在 Linux 3.1 加入进来的特性。主要目的是减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器。其实这就是内核做的一次重构。Regmap 除了能做到统一的 I/O 接口,还可以在驱动和硬件 IC 之间做一层缓存,从而能减少底层 I/O 的操作次数。学习 I2C 和 SPI 驱动的时候,针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。

2022-10-12 11:31:59 2584

转载 dentry是一个目录项(Directory entry),相当于一个文件目录,该文件目录里面有很多文件.//vfs dentry cache 模块实现分析/

1. dentry结构体dentry是一个目录项(Directory entry),相当于一个文件目录,该文件目录里面有很多文件。其实本质就是一个dir_entry结构体,重要成员有文件的inode索引号,文件名等,存储着文件的信息。dentry结构体相关信息: struct ext2_dir_entry_2 { __u32 inode; /* 文件的inode号 */ __u16 rec_len; /* 目录项长度 */ __u8 na

2022-10-12 10:58:34 1620

转载 Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系

一:文件系统1. 什么是文件系统?操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。通常文件系统是用于存储和组织文件的一种机制,便于对文件进行方便的查找与访问。文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。随着文件种类的增多,扩增了更多的文件系统,为了对各种文件系统进行统一的管理与组织。2. Linux文件系统Linux将文件系统分为了两层:V

2022-10-12 10:48:51 2354

转载 Linux Debugfs 虚拟文件系统

Debugfs 是内核开发人员向用户空间提供信息的一种简单方法。/proc 仅用于提供有关进程的信息,或者 sysfs 具有严格的每个文件一个值的规则,而 debugfs 则完全没有规则。开发人员可以将他们想要的任何信息放在那里。debugfs 文件系统也不能作为用户空间的稳定 ABI;理论上,在那里导出的文件没有稳定性限制。现实世界并不总是那么简单,即使是 debugfs 接口,最好的设计也是考虑到它们需要永远维护。(或等效的 /etc/fstab 行)。

2022-10-12 10:19:43 875

转载 linux内核I2C子系统详解

(2)实际上一般驱动都是没有定义attach_adapter方法的,只有在i2cdev_driver驱动中定义了attach_adapter方法,i2cdev_driver驱动是在i2c-dev.c的i2c_dev_init()函数中定义的,在博客:《I2C子系统之适配器的设备接口分析(i2c-dev.c文件分析)》中有详细介绍;(5)struct i2c_client结构体:描述I2C设备的结构体,当在I2C总线上和I2C驱动匹配上后,会把设备信息传给驱动,这里是驱动设计数据的操作方法分离的思想;

2022-10-11 22:05:31 697 1

s3c6410.pdf

arm11,samsung ;智器Q5,Q7.苹果iPhone 3G...支持H.264,720P,2D

2009-11-17

空空如也

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

TA关注的人

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