自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android super.img 镜像解包

superimage解压

2022-06-22 13:41:32 2180

原创 Linux GIC代码分析

一、前言GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1~V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构)。目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC硬件及其驱动。具体GIC硬件的实现形态有两种,一种是在

2022-05-03 17:27:01 482

原创 Linux 驱动申请中断API

一、前言本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述。第三章主要描述了驱动申请 interrupt line接口API request_threaded_irq的规格。第四章是进入request_threaded_irq的实现细节,分析整个代码的执行过程。二、和中断相关的linux实时性分

2022-05-03 17:15:10 764

原创 linux kernel High level irq event handler

一、前言当外设触发一次中断后,一个大概的处理过程是:1、具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler2、machine driver对应的中断处理handler中会根据硬件的信息获取HW interrupt ID,并且通过irq domain模块翻译成IRQ number3、调用该IRQ number对应的high level irq event handler,在这个high level的handler中,会通过和i

2022-05-03 17:06:04 179

原创 Linux IRQ number和中断描述符

一、前言本文主要围绕IRQ number和中断描述符(interrupt descriptor)这两个概念描述通用中断处理过程。第二章主要描述基本概念,包括什么是IRQ number,什么是中断描述符等。第三章描述中断描述符数据结构的各个成员。第四章描述了初始化中断描述符相关的接口API。第五章描述中断描述符相关的接口API。二、基本概念1、通用中断的代码处理示意图一个关于通用中断处理的示意图如下:在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们

2022-05-03 16:54:22 551

原创 Linux kernel的中断子系统之二:IRQ Domain

一、概述在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。2、HW interrupt ID。对于interrupt controller而言,它收集了多个外设的interrupt request line并向上传递,因此,interrupt controller需要对外设中断进行

2022-05-02 17:56:27 442

原创 Linux kernel的中断子系统之一

一、中断系统相关硬件描述中断硬件系统主要有三种器件参与,各个外设、中断控制器和CPU。各个外设提供irq request line,在发生中断事件的时候,通过irq request line上的电气信号向CPU系统请求处理。外设的irq request line太多,CPU需要一个小伙伴帮他,这就是Interrupt controller。Interrupt Controller是连接外设中断系统和CPU系统的桥梁。根据外设irq request line的多少,Interrupt Controller可

2022-05-02 17:47:50 148

转载 bootloader启动过程

Bootloader启动流程分析从固态存储设备上启动的 Bootloader大多都是两阶段的启动过程。第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性。  一般而言,这两个阶段完成的功能可以如下分类:Bootloader第一阶段的功能硬件设备初始化首先需要设置时钟,设置MPLL,接着设置CLKDIVN地址为0x4C000014,写入0x05,表示设置分频系数为FCLK:

2022-05-02 13:24:56 3876

原创 Linux信号量

信号量信号量是一种用于保护临界区的常用方法,只有得到信号量的进程才能执行临界区的代码,而没有得到信号量的进程进入休眠状态。Linux系统中与信号量相关的操作主要有如下4种。1 定义信号量下面代码定义名为sem的信号量。struct semaphore sem;struct semaohore结构体在内核中定义如下:在/include/linux/semaphore.h目录下:struct semaphore{spinlock_t lock;unsigned int count;stru

2022-05-01 15:36:08 375

原创 Linux wakelock

Wake lock - wakelock在android的电源管理系统中扮演一个核心的角色,wakelock是一种锁的机制, 只要有task拿着这个锁, 系统就无法进入休眠, 可以被用户态进程和内核线程获得。这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动标准linux的那套休眠机制机制来进入休眠。wakelock在android的休眠唤醒机制中扮演着及其重要的角色,主要源码位于文件:kernel/kernel/power/wakelock

2022-05-01 15:34:41 1068

原创 Linux中断机制

中断机制1.中断的申请与释放:request_irq()free_irq()request_irq()的原型为:int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct pt_regs *regs),unsigned long irqflags,const char * devname,void *dev_id);irq是要申请的硬件中断号; // include/asm/arch-m

2022-05-01 15:31:51 995

原创 Linux中断与时钟

中断与时钟所谓中断是指 CPU 在执行程序的过程中,出现了某些突发事件时 CPU 必须暂停执行当前的程序,转去处理突发事件,处理完毕后 CPU 又返回原程序被中断的位置并继续执行。根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自 CPU内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助 CPU 内部的软件中断),外部中断的中断源来自 CPU 外部,由外设提出请求。根据是否可以屏蔽中断分为可屏蔽中断与不屏蔽中断(NMI) 可屏蔽中断可以通,过屏蔽字被屏蔽,

2022-05-01 15:30:13 718

原创 Linux 内核定时器

内核定时器1.源码位置:include/linux/timer.hkernel/timer.c2.遵守规则:1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中 断的进程没有任何联系。2) 不能执行休眠(或可能引起休眠的函数)和调度。3) 任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件。内核定时器的调度函数运行过一次后就不会再被运行了(相当于自动注销),但可以通过在被调度的函数中重新调度自己来周期运行。3.使用方法:内核定时器的数据结

2022-05-01 15:28:25 464

原创 Linux tasklet

1.声明自己的tasklet 既可以静态地创建tasklet,也可以动态地创建它。如果静态地创建一个tasklet(直接引用),使用<linux/interrupt.h>中的两个宏:#define DECLARE_TASKLET(name, func, data) /struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data }#define DECLARE_TASKLET_DISABLED(name, fu

2022-05-01 15:25:36 378

原创 Linux多路复用

多路复用IO多路复用之select总结基本概念IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。  (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。  (

2022-05-01 15:23:50 590

原创 Linux regulator

/*regulator 是驱动中电源管理的基础设施。要先注册到内核中,然后使用这些电压输出的模块get其regulator,在驱动中的init里,在适当时间中进行电压电流的设置.与 gpio 差不多? 一样是基础设施?*///Linux 内核的动态电压和电流控制接口功耗已经成为电子产品设计的首要考虑。//“LDO是 low dropout regulator,意为低压差线性稳压器”,是相对于传统的线性稳压器来说的。传统的线性稳压器,如78xx系列的芯片都要求输入电压要比输出电压高出 2v~3V

2022-05-01 15:21:03 751

原创 android remount of /system failed: Read-only file system原因及解决办法

遇到的问题:adb root (获取root权限)之后,执行adb remount (为系统文件/system, /vendor,/oem加上读写权限)报出:remount of /system failed: Read-only file system错误.解决方法:解决办法:1.adb disable-verity 会出现Verity disabled on /systemNow reboot your device for settings to take effect2.adb re

2021-10-07 15:17:33 492

原创 android去掉odex

去掉DEX优化编译的方法:1、mm WITH_DEXPREOPT=false2、Android.mk中增加:LOCAL_DEX_PREOPT := false

2021-10-07 15:14:35 572

原创 编译Android时遇到如下错误:ImportError: No module named Crypto.PublicKey

编译android时遇到如下错误:ImportError: No module named Crypto.PublicKey解决方法:sudo apt-get install python-pip (如果没有安装pip的话,需要这一操作)pip install pycrypto

2021-01-30 15:38:35 888

原创 使用dbus-glib编写通过dbus调用函数

使用dbus-glib编写通过dbus调用函数1.需要的头文件:#include <dbus/dbus.h>#include <dbus/dbus-glib.h>函数实现及注释:#define DBUS_FPDLINK_SERVICE "com.syberos.camerautils" //sercice名称#define DBUS_FPDLINK_PATH "/camerautils/interface"//path

2021-01-26 14:16:11 295 1

空空如也

空空如也

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

TA关注的人

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