自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

兰宝的专栏

编程之美

  • 博客(210)
  • 收藏
  • 关注

原创 Linux电源管理(9)_wakelocks

1. 前言wakelocks是一个有故事的功能。wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle、suspend等)。同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的sta

2017-08-26 12:44:15 391

原创 spin_lock & mutex_lock的区别? .

为什么需要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v加1原子操作比普通操作效率要低,因此必要时才使用,且不能与普通操作混合使用如果是单核处理器,则原子操作与普通操作相同

2017-08-26 12:43:10 296

原创 use after free 引起KE

问题背景:待机状态下,按Power键或者自动进入休眠,必现KE。分析过程:取出mtklog看到有db产生,确实发生了KE(kernel exception),取出db和vmlinux (必须是和当前软件是同一次编译的)后,使用GAT工具解开db,取出SYS_MINI_RDUMP,使用 gdb调试:$ arm-linux-androideabi-gdb v

2016-10-12 17:47:26 772

原创 进程上下文VS中断上下文

内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。处理器总处于以下状态

2016-10-10 11:51:34 261

原创 Linux vm运行参数之(二):OOM相关的参数

一、前言本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。如果这个名词对你毫无压力,你可以直接进入第三章,这一章是描述具体的参数的,除了描述具体的参数,我们引用了一些具体的内核代码,本文的代码来自4.0内核,如果有兴趣,可以结合代码阅读,为了缩减篇幅,文章中的代码都是删减版本的。按照惯例,最后一

2016-10-09 18:01:01 2791 1

原创 ARMv8 與 Linux的新手筆記

ARMv8 與 Linux的新手筆記by [email protected]從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Google也如預期在2014年底前推出了Android Lollipop (也就是Android 5.0) 操作環境.(官方網站http://www.android.com/versi

2016-09-20 17:11:59 977

原创 ARM64的启动过程之(六):异常向量表的设定

一、前言本文主要描述了4.1.10内核初始化过程中如何初始化异常向量表。当然,首先需要准备一些异常的基础知识,这主要在第二章,如果你非常熟悉ARM64的异常,那么可以忽略这个章节。 第三章描述了ARM64上各种形形色色的异常,第四章描述了ARM64上硬件提供的协助,最后一章描述了代码过程。为了简化,本文对所描述的异常进行了限制:1、所有的exception level的运行

2016-09-20 16:48:42 2249 1

转载 memset用法详解

功 能  将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,  块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,  其返回值为指向S的指针。[编辑本段]用 法  void *memset(void *s, int ch, unsigned n);[编辑本段]程序例  #in

2016-08-03 15:27:12 308

原创 看我解决Linux下的OTG切换问题

在接手这个问题之前,我是没有搞过usb相关的,当然了,我看过很多文章和书籍,之前在rockchip平台上,我也有接触过usb相关的知识,解决实际问题还是第一次,看MTK代码的时候,大部分都是通过函数名字和变量定义猜测意图,加上硬件的一些验证。就是上图的那个引脚,但是可惜的是,我们引脚上接的这个脚不是GPIO功能脚,所以MTK的补丁用不上,他们的补丁也就是检测是否有USB插入,并通过OTGID脚状态,然后再适配usb的状态。​插入OTG设备后,再拔掉,仍是OTG模式,没检测到OTG设备拔出​。

2023-06-16 16:55:53 855

原创 MT8768充电流程

if (__power_supply_is_supplied_by(psy, pst)) { //只有power_supply_changed("mtk_charger_type")的时候才会跑"battery"、"mtk-master-charger"的external_power_changed。可能是找到第1个返回了吧。//CHARGER_OUT,唤醒算法。

2023-02-22 11:44:56 1021

原创 00.mipi协议

由于MIPI是采用差分信号传输的,所以在设计上需要按照差分设计的一般规则进行严格的设计,关键是需要实现差分阻抗的匹配,MIPI协议规定传输线差分阻抗值为80-125欧姆。在高速模式下,通道状态是差分的0或者1,也就是线对内P比N高时,定义为1,P比N低时,定义为0,此时典型的线上电压为差分200MV,请注意图像信号仅在高速模式下传输;在高速模式下,通道状态是差分的0或1,定义P比N高时定义为1,P比N低时定义为0,此时线上典型电压为差分200mv。在LP模式下,只用lane0传输数据和时钟,双向数据传输。

2023-02-22 11:43:16 545

原创 01.mipi时序

首先会发送VSPW行(VSA lines)的空数据包,在发送VBP lines的空数据包,接着发送VACT lines(屏宽)的有效RGB数据,其中每一行数据都包含HSS 行开始信号+HBP数据包+RGB+HFP数据包。3 Burst mode: 在horizontal 的时序是一样的情况下DSI会把连接的速度提升到Panel支持的最大速度。那么这三种video模式的区别就是传递的数序和数据包位置的不同,至于最终在dtsi配置哪一个模式就要根据实际的panel IC所支持video 模式来。

2023-02-22 11:41:09 1035

原创 插入USB开机

在kernel阶段判断的电压要比lk阶段的启动电压要大,否则kernel充电到3.6自动关机重启后电压只有3.58,lk阶段判断启动电压不满足,继续充电,3.6关机,死循环!3.45V 以下关机充电 g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT //9。3.45V 以上关机充电 g_boot_mode = KERNEL_POWER_OFF_CHARGING_BOOT //8。2. 3.45 - 3.6 kernel充电。

2023-02-22 11:21:05 255

原创 [FAQ202071860]修改uart0输出串口LOG

1.修改所在工程中的pinmap文件,用来配置UART0 PAD对相应的UART0 控制器,其它芯片也有类似的寄存器用来配置不同的pad对应不同的控制器,请查看相应的芯片spec。2.配置了uart0 pad对应uart0控制器后,还需要将log的输出定位到uart0控制器上来,uboot中UART的驱动在/修改uart0输出串口LOG。

2023-01-13 17:21:51 183

原创 [FAQ122070]eMMC降速怎么修改

1,可以修改平台端 eMMC总线工作模式配置,在kernel工程dts文件,默认配置为最高HS400 模式打开Enhanced Strobe。2,限制总线模式最高HS400 400MB/s,关闭Enhanced Strobe。4,限制总线模式最高High Speed DDR 104MB/s。5,限制总线模式最高High Speed SDR 52MB/s。3,限制总线模式最高HS200 200MB/s。eMMC降速怎么修改。

2023-01-13 17:20:14 532

原创 [FAQ202172679]如何使用ADB控制GPIO高低?

如何使用ADB控制GPIO高低?

2023-01-13 17:17:41 349

原创 谈谈Linux内核驱动的coding style

最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的程序员队伍里,我并不是孤独的。如果去看drivers/staging下的代码,就会发现很多驱动程序都没有严格遵守内核的coding style,而且在很多驱动程序的TODO文件里,都会把"checkpatch.pl fixes"作为自己的目标之一(check

2021-03-28 15:01:09 299

原创 ADB 常用命令及详解

ADB 即 Android Debug Bridge,Android调试桥。ADB工作方式比较特殊,采用监听Socket TCP 端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口。熟练使用 ADB 命令将会大大提升开发效率。 ADB 的命令有很多,今天就来总结下我在TV开发常用到的一些 ADB 命令。 显示系统中全部设备: adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2.开启ADB服务: adb

2020-10-17 11:33:48 711

原创 SecureCRT自动保存日志设置

嵌入式开发经常由于无法debug而只能使用串口打印日志的方式调试代码,SecureCRT支持“SSH2”、“Serial”等多种连接方式,是嵌入式工程师开发必备工具之一。串口日志打印由于打印数量大,经常会超过SecureCRT一屏显示范围,所以设置自动日志保存功能对于查找问题很有必要。SecureCRT保存日志有2种方式:手动模式和自动模式。一、手动模式:选择“File”->“Log Session”,会弹出保存Session路径及名称的对话框,输入路径和名称后SecyreCRT就将保

2020-06-01 19:37:02 3341 1

原创 自己写的uvc驱动支持IP2977/ip2970

/* 作者: [email protected]   * 此驱动程序是基于linux2.6.31.14内核  * 上一篇自己写的uvc驱动程序是针对环宇飞扬6190来写的,有一些缺点,这些缺点在本次的驱动  * 中进行了修改此uvc驱动是针对IP2977进行了支持,根据IP2977芯片厂商提供的修改手册进行了修改。  * 此驱动程序虽然支持IP2977摄像头,但是显示效果不太好,此驱动只是针对学习使...

2018-03-13 15:34:37 716

原创 Android USB Camera(2) : UVC协议分析

1. 前言本文对USB的功能类协议USB Video Class(UVC)的具体设计进行介绍,但不会介绍USB基础协议,所以需要对USB基础协议有一定的了解,包括USB四大描述符以及四种传输方式。分析usb协议的重点在于描述符,这里将以实际设备的描述符为线索,贯穿、分析uvc协议。2. UVC功能概述UVC设备都是多Interface设备,这点同普通的u盘不同。UVC设备最起码有两个Interfa...

2018-03-13 15:25:12 2980

原创 framework层服务分析

framework层服务分析      最近在做公司内部员工android系统培训,编写了一些PPT,引用了网上诸位大侠的贡献,下面就分析下framework框架层服务。            Android Service是android 系统中的四大组件之一(Activity、Service...

2018-03-13 15:08:37 679 1

原创 android4.2.2---1. hal层与framework层的调用

1.HAL层首先在hal层定义结构体sensors_module_t#define SENSORS_HARDWARE_MODULE_ID "sensors"struct sensors_module_t HAL_MODULE_INFO_SYM = {common:    {tag:       ...

2018-03-13 15:04:18 1264

原创 Android应用层到Framework到HAL再到驱动层的整个流程分析

本篇参考老罗的实例进行总结。老罗写六篇,层层嵌套,他告诉了我们流程,但没有说编程思想,所以,即使知道怎么做也很快会忘调,因此打算总结下每层之间是怎么调用的,以加深印象。不对细节进行探讨。细节可以参见老罗的blog:http://blog.csdn.net/luoshengyang/article/details/6567257老罗的分析是从驱动到应用层的,但我想从app开发者的角度去反思这个流程,...

2018-03-13 15:03:25 8580 3

原创 全志平台boot框架中增加设备驱动过程分析

在boot启动阶段,大家都知道他的主要目的就是引导uboot,uboot在引导内核,从而让整个系统运作起来。全志的boot阶段,对应平板这一块,它会驱动LCD,显示一些开机LOGO,这个过程很快,也就1-2秒钟的时间。然而对于车载行业应用来说,可能需要再boot阶段做一些事情。比如,机器冷启动,大家都知道android启动时间还是比较长的,那么怎么使得客户能快速的用上倒车影像的功能呢?这就需要动脑...

2018-03-13 15:02:14 716

原创 全志平台boot里TVD倒车显示功能开发

倒车显示分两个部分,前端处理好视频输入信号,准备好内容,后端显示驱动再来把内容显示到LCD上。很明显,前端是TVD模块来处理的,后端是有DE模块来处理的,我们接下来先分析一下TVD模块怎么工作的。      首先,需要加载驱动打开设备驱动,如果有需要还可以执行IOCTL操作,跟在linux系统里操作驱动的IOCTL类似。代码如下:/*********************************...

2018-03-13 15:01:27 972

原创 android音频系统音量控制探讨

  android音频系统音量控制上,没有考虑到控制模拟音频信号的问题,笔者在项目中要控制FM,voice incall的时候很不好处理。android对数字信号有很好的处理,可以用software来调节音量,省去硬件的控制,但是对于模拟信号不能一起控制了,笔者采用在android中不使用软件条件音量,因为如果采用软件音量,必然需要把音频的codec芯片设置的默认值提高,但是一提高,噪声就会增大,...

2018-03-13 15:00:47 464

原创 linux下ALSA音频驱动软件开发

最近一直忙于Linux下ALSA音频驱动的开,作了一次专题讨论,现将部分内容贴出来大家分享一下。   内容提要一、音频相关的基础知识 •二、Linux下音频驱动开发模型 •三、socxx+ WM8993驱动实例分析 •四、总结 •五、 Question& Discussion  音频相关的基础知识  ----采样、量化  •1、采样频率 •   常用 32kHz、 44.1kHz、 48k...

2018-03-13 15:00:02 591

原创 从零开始怎么写android native service?

从零开始怎么写android native service        Android service对于从事android开发的人都不是一个陌生的东西,很多人可能会觉得服务很简单。服务是简单,因为复杂的别人做了,所以才会觉得简单。我们先梳理一下服务的分类,首先有本地服务跟系统服务的区分,而在...

2018-03-13 14:59:11 1211

原创 Android系统Audio框架介绍

音频基础知识声音有哪些重要属性呢?响度(Loudness)响度就是人类可以感知到的各种声音的大小,也就是音量。响度与声波的振幅有直接关系。音调(Pitch)音调与声音的频率有关系,当声音的频率越大时,人耳所感知到的音调就越高,否则就越低。音色(Quality)同一种乐器,使用不同的材质来制作,所表现出来的音色效果是不一样的,这是由物体本身的结构特性所决定的。如何将各种媒体源数字化呢?音频采样将声波...

2018-03-08 12:08:50 307

原创 自旋锁(spinlock)

该宏如果获得自旋锁lock,它也将保存标志寄存器的值到变量flags中,并且失效本地中断,如果没有获得锁,它什么也不做。  因此如果能够立即获得锁,它等同于spin_lock_irqsave,如果不能获得锁,它等同于spin_trylock。如果该宏获得自旋锁lock,那需要使用spin_unlock_irqrestore来释放。spin_trylo

2017-09-28 09:46:23 291

原创 五、自旋锁(spinlock)

自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。  由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。  信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_tryl

2017-09-28 09:45:33 295

原创 四、读写信号量(rw_semaphore)

读写信号量对访问者进行了细分,或者为读者,或者为写者,读者在保持读写信号量期间只能对该读写信号量保护的共享资源进行读访问,如果一个任务除了需要读,可能还需要写,那么它必须被归类为写者,它在对共享资源访问之前必须先获得写者身份,写者在发现自己不需要写访问的情况下可以降级为读者。读写信号量同时拥有的读者数不受限制,也就说可以有任意多个读者同时拥有一个读写信号量。  如果一个读写信号量当前没有被

2017-09-28 09:45:06 1345

原创 三、信号量(semaphore)

Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它绝不可能在内核之外使用,因此它与System V的IPC机制信号量毫不相干。  信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。  一个任务要想访问共享资源

2017-09-28 09:44:46 219

原创 高手进阶必读:Linux内核的同步机制

本文详细的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例  一、引言  在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。  在主流的Li

2017-09-28 09:44:13 347

原创 设备驱动模型之device-driver

前面我们分析了device、driver、bus三种类型,主要是三者的注册与注销,在sysfs中的目录与属性文件创建等内容。本节就来详细分析下,在设备注册到总线上时,总线是如何为其寻找对应的驱动的;在驱动注册到总线上时,总线又是如何为其寻找对应的设备的。本节的实现代码集中在drivers/base/bus.c和drivers/base/dd.c中。先来回忆下,在device_reg

2017-09-28 09:43:02 1069

原创 设备驱动模型之bus

前面我们分析了设备驱动模型中的device和driver,device和driver本来是不相关的东西,只因为bus的存在,才被联系到了一起。本节就来看看设备驱动模型中起枢纽作用的bus。本节的头文件在include/linux/device.h和drivers/base/base.h,实现代码主要在bus.c中。因为在bus中有很多代码时为了device找到driver或者driver找到dev

2017-09-25 11:17:10 301

原创 设备驱动模型之driver

上节我们分析设备驱动模型中的device,主要是drivers/base/core.c,可以说是代码量最大的一个文件。本节要分析的驱动driver,就要相对简单很多。原因也很简单,对于driver,我们能定义的公共部分实在不多,能再sysfs中表达的也很少。本节的分析将围绕drivers/base/driver.c,但头文件仍然是include/linux/device.h和drivers/bas

2017-09-25 11:16:39 481

原创 Linux原子操作 atomic_cmpxchg()/Atomic_read()/Atomic_set()/Atomic_add()/Atomic_sub()

所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。因此这里的原子实际是使用了物理学里的物质微粒的概念。原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。原子操作主要用于实

2017-09-25 10:37:45 4483

原创 设备驱动模型之device

linux的设备驱动模型,是建立在sysfs和kobject之上的,由总线、设备、驱动、类所组成的关系结构。从本节开始,我们将对linux这一设备驱动模型进行深入分析。     头文件是include/linux/device.h,实现在drivers/base目录中。本节要分析的,是其中的设备,主要在core.c中。struct device {      struct de

2017-09-25 10:37:36 591

空空如也

空空如也

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

TA关注的人

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