自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android10 高通平台 softap热点基本流程2

上一篇讲到SoftApManager.IdleState状态中处理CMD_START消息,这个消息用来打开热点功能。我们从这里继续看热点功能基本流程。public boolean processMessage(Message message) { switch (message.what) { case CMD_START: WifiConfiguration config = (WifiConfiguration) message.obj;

2020-10-13 10:50:50 2530 1

原创 Android10 高通平台 softap热点基本流程1

softap的入口在ConnectivityManager.java中,作为连接的一部分。老版本Android的入口在WifiManager.java中。应用启动softap时,调用ConnectivityManager.startTethering()开始。 @SystemApi @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int type

2020-10-13 10:49:43 3266

原创 TCP协议seq,ack理解

通过分析TCP报文数据,可以得出以下结论:seq表示本次发送数据的偏移量,ack表示回复已经接收到的数据量。seq可以防止乱序,重复数据等功能,ack可以回复已经接受数据,下次对端发送从ack出偏移位置处发送,防止数据丢失。比如建立后,客户端seq=1,ack=1,服务端seq=1,ack=1客户端发送4字节:客户端seq=1,ack=1,len=4客户端在发送4字节:客户端seq=5,ack=1,len=4服务端回复ack:服务端:seq=1,ack=9,len=0服务端发送4字节数据:se

2020-08-03 11:32:01 8014

原创 1.高通SEE 虚拟sensor分析

在SEE中,处理硬件sensor,高通实现的platform sensor,还有一类是通过硬件sensor等各种数据计算,抽象出来的虚拟sensor。我们以高通提供的参考为例,看如何添加一个虚拟sensor和虚拟sensor执行流程。1.pb协议文件定位sensor类型数据在Non-HLOS\adsp_proc\ssc_api\pb\sns_oem1.proto中定义了oem1这个虚拟sensor的sns_oem1_msgid和sns_oem1_data。syntax = "proto2";imp

2020-06-03 21:12:16 4983

原创 android4.4 自动休眠简介(1)

在分析电源管理时,提到设备休眠时,由应用写/sys/power/state来实现休眠。在Android系统中,当系统因为一次网络包唤醒后,将会很快再次进入休眠,已达到节省电量目的,这次休眠是系统自动发起的。我们现在分析这次自动休眠的流程。在PowerManagerService.java中,有检测亮灭屏的一个类DisplayBlankerImpl。在DisplayBlankerImpl中,通过检...

2019-10-23 16:36:05 783

原创 Android7 Linux3.18设备休眠过程

在编写设备驱动的时候,我们会填写device_driver的pm方法, 这些方法是必须要有的,系统无法正常休眠,设置导致死机。驱动实现例如:static const struct dev_pm_ops raydium_ts_pm_ops = { .suspend = raydium_ts_suspend, .resume = raydium_ts_resume...

2019-09-25 21:48:24 1047

原创 Android没有图标的APK打开方法

在安装完成一个APK后,发现没有生产图标,但是需要马上使用,要如何而处理呢?以下所有指令在adb shell中完成。1.找到APK的包pm list packages执行该指令,找到APK的包,比如我安装的是一个指南针应用,通过该指令找到这个包:memsic.compass_rev42.找到APK包的MainActivitydumpsys package | grep "compa...

2019-09-19 12:01:57 6577

原创 Android DTO和dtbo简介

在做Android8时,发现在dts中引入了dto。设备树叠加层(DTO)可让主要的设备树(DTB)叠加到设备树上。使用DTO的引导程序可以维护系统芯片(SOC)DT,并动态叠加针对特定设备的DT,从而向树中添加节点并对先用树中的属性进行更改。也就是SOC的设备节点作为DTB,其他设备作为DTO,DTO可以对DTB中的节点进行引用和修改。实现DTO包括分割设备树,编译,分区和运行。分割DT首先...

2019-08-27 22:20:07 17990

原创 Android临时和永久关闭selinux

当我们想要临时关闭selinux时,如果可以获得root权限,通过adb如下指令可以临时关闭selinux:setenforce 0如果需要长期关闭,则需要用其他方法,先看slinue启动的位置:Android启selinux从init开始。在init.cpp中有:static void selinux_initialize(bool in_kernel_domain) { Ti...

2019-08-02 21:42:35 23690 1

原创 高通WCNSS驱动简析

在加载WIFI驱动之前,首先需要把WCNSS(Wireless connectivity subsystem)运行起来,这就需要wcn驱动的帮助,通过wcn驱动来启动wncss,让wcn chip和和ccpu工作起来。wcn驱动程序在kernel目录/kernel/driver/net/wireless/wcnss/wcnss_wlan.c。驱动入口:static int __init wcn...

2019-07-17 17:07:09 7435 2

原创 kobject,ktype,kset解析

1. kobject 结构Linux内核中有大量的驱动,而这些驱动有类似的结构,从面相对象的思想来看,总可以抽象出一个基类。在Linux中,这个基类就是kboject。内核中kobject结果定义如下:@/kernel/include/linux/kobject.hstruct kobject { const char *name; struct list_head entry; ...

2019-06-08 16:54:58 604

原创 高通Android7.1 WIFI国家码问题

20:12:08.774420 [20:12:03.149290] [000000002A1ADFB1] [wpa_s] wlan: [I :HDD] hdd_driver_command: Received COUNTRY CN cmd from Wi-Fi GUI***20:12:08.774457 [20:12:03.149318] [000000002A1AE1BC] [wpa_s]...

2019-05-25 11:53:25 5605

原创 Android源码中的C/C++交叉编译工具使用

Android源码中有编译C/C++程序所需的编译工具链和libc等库文件。具体使用方法如下:1.找到使用的编译工具链目录通过在源码所在的主机中输入指令:echo $ANDROID_TOOLCHAIN可以查看工具链路径,我的为:/data/home/zl/aos4I13-3/HLOS/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/...

2019-04-21 11:57:04 1717

原创 从NDK获取Android C/C++交叉编译工具

我们经常需要将一些C/C++源码编译成本地二进制文件,直接在Android的Linux内核上运行,这就需要进行交叉编译。由于Android的运行环境和普通Linux有区别,所以常规针对ARM进行交叉编译得到的二进制,无法直接在Android环境运行。此时需要基于Android环境进行交叉编译,这是有两种方式:一种是编写Android.mk,在安装源码结构下依靠Android的编译系统搞定;另一种是...

2019-04-21 11:53:44 2988

原创 poll原理及调用过程分析

我们以Android获取TP报点为例,分析poll过程。poll系统调用功能是检测设备是否有可读等对应事件发生时,调用read系统调用实现对设备的无阻塞访问。现在我们来分析poll的基本调用流程。首先看应用如何使用poll:int main(int argc, char* argv[]){ int res; int nfs; int pollres; int i; struct i...

2019-03-30 16:03:23 1727

原创 Linux I2C设备regmap机制简析

在Linu 3.1开始,Linux引入了regmap来同意管理内核的I2C, SPI等总线,将I2C, SPI驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。用一个I2C设备为例,在3.1之前的I2C设备驱动,需要各自调用i2c_transfer来实现读写,比如:static int raydium_i2c_pda2_write(struct i2c_client *client...

2019-03-17 22:08:48 5313 3

原创 ConnectivityService处理wifi连接

ConnectivityService用来管理系统中所有网络,谁能连接,谁需要断开。在连接一个网络是,收集网络信息,通过ConnetivityManager提供给应用使用。在WIFI连接过程中,到链路层L2ConnectedState状态时,有:class L2ConnectedState extends State { @Override public void en...

2019-03-17 19:25:50 2582

原创 Android固件firmware使用方法

1.kernel/drivers/base/firmware_class.c@@ -299,6 +299,8 @@ static void fw_free_buf(struct firmware_buf *buf) static char fw_path_para[256]; static const char * const fw_path[] = { fw_path_pa...

2019-02-14 17:24:09 7351

原创 Linux固件加载过程简析

Linux内核模块使用固件程序时,正确的做法是使用request_firmware_nowait()一类固件接口来获取固件数据。在使用firmware前,必须对内核做如下配置。Device Drivers —> Generic Driver Options —> <*> Userspace firmware loading support 否则会出现: Unkn...

2019-02-14 17:20:17 3627 4

原创 TP驱动调试过程的几个问题

TP点击不能正常唤醒系统。在TP休眠时,irq使用enable_irq_wake()方法,保证IRQ在休眠状态可以唤醒系统,在中断唤醒系统后在进行I2C读写操作。TP电量是不能正常上报POWER KEY。在写上报点时,需要设置上报事件包括key__set_bit(BTN_TOUCH, input_dev->keybit);然后key里面包括power key。input...

2019-01-30 17:55:22 2249

原创 3 高通LCD上下电过程简析

上下电代码位于mdss_fb.c中。在mdss_fb_register()函数中会设置fb用户空间操作函数:fbi->fbops = &mdss_fb_ops;static struct fb_ops mdss_fb_ops = { .owner = THIS_MODULE, .fb_open = mdss_fb_open, .fb_release = mdss_fb_r...

2018-11-28 16:26:17 2334

原创 2 MDP,DSI,FB代码分析

MDP分析MDP主要对使用的硬件资源进行初始化,同时在fb设备中注册mdp的使用接口。MDP使用的设备树在:msm8909-mdss.dtsi主要代码:static int mdp3_probe(struct platform_device *pdev){ int rc; /* 创建msm_mdp_interface结构体,里边包含mdp的初始化等,这些函数会在fb初始化时调用 *...

2018-11-28 16:24:43 10957

原创 1.高通LCD简介

MDP mobile dispaly processorLCD设计驱动文件:mdp3_ctrl.cmdp3.cmdss_dsi.cmdss_fb.cLCD的设备树@msm8909-mdss.dtsi&soc { mdss_mdp: qcom,mdss_mdp@1a00000 { compatible = "qcom,mdss_...

2018-11-28 16:23:48 1172

原创 Linux内核 __setup宏分析

在解析cmdline时,我们经常会使用到__setup宏,用来处理kernel的cmdline。#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setup_str_##unique_id[] __in...

2018-10-19 10:26:38 6013 1

原创 Android源码编译之 lunch命令分析及user和userdebug编译选项区别

不同厂商在编译Android系统时,会选择不同产品和编译版本。在Android编译过程中,通过source,lunch来选择。1、souuce build/envsetup.sh:加载命令2、lunch:选择平台等编译选项3、make:编译我们按照编译步骤分析编译过程,最终添加自己的平台编译选项。1、souuce build/envsetup.shenvsetup.sh定义了众多命令,...

2018-10-17 09:50:43 11869 1

原创 Linux内核线程(kthread)创建过程

我们在内核中创建并运行内核线程,直接调用kthread_run宏就可以实现。其原型为:/** * kthread_run - create and wake a thread. * @threadfn: the function to run until signal_pending(current). * @data: data ptr for @threadfn. * @namefm...

2018-10-16 20:03:42 4579

原创 Android7 WIFI系统 PNO机制流程详解和隐藏BUG修改

WIFI启动过程,WifiStateMachine加载驱动固件,连接上wpa_s的socket并检查好配置文件后,进入到DisconnectedState状态。在DisconnectedState状态下启动了mWifiConnectivityManager.handleConnectionStateChanged(WifiConnectivityManager.WIFI_STATE_DISCONN...

2018-09-08 15:39:13 4338

原创 Android源码和Linux内核源码在线浏览地址

一个实时更新的Android&Linux源码在线浏览地址,支持函数跳转等功能。看源码时,配合使用挺方便,以下为地址:http://androidxref.com/

2018-08-08 21:04:47 796

原创 隐藏SSID和STA搜索隐藏SSID原理

1、AP隐藏时MAC帧的表现扫描隐藏SSID,和非隐藏SSID,STA端只有在wpa_supplicant.conf有一点不同:network={ ssid="Xiaomi_B908"

2017-11-14 15:11:18 9505 2

原创 单例模式

单例模式: 单例模式(Singleton):保证一个类只有一个实际,并提供一个访问它的全局访问点。有时我们需要一个类在进程中只有一个实例对象,比如我们点击一个图标,打开一个程序,再次点击图标时,因为程序已经打开,就不再重复打开。这时候我们就需要只有一个程序对象被实例化。通常我们可以让一个全局变量使得一个对象被访问,但他不能防止你实例化多个对象。一个最好的办法是,让类自行负责保存它的唯一实例对象。这

2017-08-20 10:45:01 272

原创 组合模式

组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得单个对象和组合对象的使用具有一致性。组合模式可以优化递归或者分级数据结构。比如在文件系统中,每一个目录都可以装内容,目录的内容可以是文件或者目录。这个过程就可以用组合模式来描述。组合设计模式组成: 抽象构建角色(component):组合中的对象声明借口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理

2017-08-12 12:55:09 289

原创 命令模式

命令模式: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可测销的操作。在软件系统中,行为请求者和行为实现者通常是一种紧耦合的关系,但在某些场合,需要对请求做记录,有撤销等处理时,这种紧耦合就难以处理,需要用到一个接收者(Invoker)。命令模式组成: 抽象命令角色(Command):定义命令的接口,声明执行的方法;具体命令角色(Conc

2017-08-12 12:47:58 239

原创 适配器模式

适配器模式(Adapter): 将一个类的接口转换成客户端想要的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。比如在生活中,我们的笔记本电脑使用的电压大概在20V左右,但我们的生活用电电压在220V。怎么办呢?于是我们会使用一个电源适配器,将220V电转成20V电给笔记本电脑使用。适配器就是将一个功能类似但接口不同的类转成客户端能够使用的接口。适配器模式组成:

2017-07-30 18:39:30 268

原创 状态模式

状态模式: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到不同的状态的一系列类当中,实现把复杂逻辑简化和逻辑间解耦。状态模式组成: 、1、抽象状态角色(State):定义一个接口以封装与Context的一个特定状态相关的行为。2、具体状态角色(ConcretState):继承自

2017-07-28 20:31:27 398

原创 桥接模式

桥接模式: 将抽象与它的实现分离,使它们都可以独立的变化。桥接模式组成: 1、抽象角色(Abstration):抽象类或者接口,多维度变化的其中一个维度,抽象角包含实现角色的对象。抽象角色中的操作方法通过调用实现角色中的方法实现。2、实现角色(Implementor):多维度变化的其中一个维度,实现角色定义具体的操作方法模板。3、被提炼的抽象角色(RefinedAbstraction):继承自抽

2017-07-25 23:06:11 291

原创 观察者模式

观察者模式: 观察者模式又叫发布-订阅(Public/Subscirbe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题对象。这个主题对象状态发生改变时,会通知所有观察者对象,使他们能够完成自我更新。观察者模式组成: 在一个软件系统中,常常要求一个对象的状态变化时,某些其他的对象状态也相应的发生改变。观察这模式可以用来处理这种情况。 观察者模式组成: 1、抽象

2017-07-20 23:17:16 225

原创 建造者模式

建造者模式: 将一个复杂对象的构建也它的表示分离,使得同样的构建过程可创建不同的表示。 创建者模式组成: 1、抽象建造者角色(Builder):为创建一个Product对象的各个部件指定的抽象类或接口。2、具体建造者类(ConcreteBuilder):实现Builder接口,构造和装配各个部件。3、产品角色(Product):产品角色类。4、指挥者角色(Director):根据需求使用Bui

2017-07-16 18:38:27 241

原创 外观设计模式

外观设计模式: 为子系统中的一组接口提供一个一致的界面,此模式定义一个高层接口,这个接口使得这个子系统更加容易使用。引入外观模式后,客户端只需要和外观接收交互,而不需要于子系统交互,从而降低客户端于子系统的耦合度。外观设计模式组成: 1、外观角色(Facade):是外观设计模式的核心类,知道子系统的功能,负责和客户端交互,并根据客户端已有的需求预定几种功能组合。2、子系统角色(SubSystem

2017-07-16 10:17:55 555

原创 模板方法模式

模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些步骤。模板方法组成: 1、抽象类:一个抽象模板,给出一个顶级逻辑骨架,而逻辑的组成步骤在相应的抽象操作中,推出到子类实现。 2、具体类:继承抽象类并实现一个或多个抽象方法。 使用一份试卷,测试人员抄写题目并作答的代码为例:// 试卷抽象类public a

2017-07-14 23:47:46 197

原创 原型模式

原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 类图: 原型模式主要用于对象的复制,其核心是Prototype类。JAVA中Prototype类具备以下两个条件: - 实现Cloneable接口。JAVA中有一个Cloneable接口,作用是通知虚拟机可以安全的在实现了此接口的类上使用clone方法。在JAVA中,只有实现了Cloneable才能使用clone方

2017-07-12 23:32:32 182

自行实现的Linux内核USB鼠标驱动

自己实现的一个linux usb鼠标驱动,能够基本完成鼠标的功能,驱动中加入了比较详细的注释和readme使用说明。

2017-09-23

Linux下USB驱动开发笔记

USB驱动开发文档,结合代码,分析的很详细,希望对大家有用。

2017-03-03

空空如也

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

TA关注的人

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