自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 内核使用浮点问题​

一、硬浮点与软浮点1. 硬浮点编译器将代码直接编译成硬件浮点协处理器(浮点运算单元FPU)能识别的指令,这些指令在执行的时候ARM核直接把它转给协处理器执行。FPU 通常有一套额外的寄存器来完成浮点参数传递和运算。使用实际的硬件浮点运算单元(FPU)会带来性能的提升2. 软浮点编译器把浮点运算转成浮点运算的函数调用和库函数调用(即用整数运算模拟浮点运算),没有FPU的指令调用,也没有浮点寄...

2020-04-12 12:52:20 4870 1

原创 LINUX 进程优先级与调度策略

1. 调度策略//https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14/include/uapi/linux/sched.h......./* * Scheduling policies */#define SCHED_NORMAL 0#define SCHED_FIFO 1#defin...

2019-11-02 16:28:35 3122

原创 Ext4及F2FS文件系统 Debug

CONFIG_F2FS_CHECK_FS再内核的config中可以使能这个宏,其会对F2FS文件系统进行更多的逻辑检查,如果检查到错误会触发bug on抓取 f2fs ftrace eventecho 0 > /d/tracing/tracing_onecho 204800 > /d/tracing/buffer_size_kbecho "" > /d/tra...

2019-11-02 16:05:50 2638

原创 Magisk root 原理分析之二 :Android Verified Boot (AVB)

1. Android Verified Boot (AVB) 或称 Verified Boot 2.0 简介官方解释:验证用户设备上运行的软件完整性。它通常从设备固件的只读部分开始,该部分加载代码并仅在通过密码验证代码是授权的并且没有任何已知的安全漏洞之后才执行代码。AVB 2.0 引入一个新的分区:vbmeta.img(verified boot metadata),其包含分区的哈希,下...

2019-11-02 15:31:36 15204

原创 Magisk root 原理分析之一 :Magisk Andorid Root 流程

在安卓8.0以后,比较通用的root方法就是使用Magisk工具进行破解,破解流程一般如下:解锁bootloader或者通过特殊方式绕过AVB校验。解锁bootloader方法进入开发者模式,选择允许OEM解锁重启进入fastboot,执行fastboot flashing unlock ,解锁后在启动过程如果出现镜像校验失败也会继续启动,因此就可以刷入非官方镜像注意:...

2019-11-02 15:12:39 11687 1

原创 安卓功耗分析 Battery Historian V2 使用

Battery Historian V2 使用写在前面,拿到一份问题Log日志,如何去分析日志,如何去定位一个问题,工程师之间的功力在这块体现的十分明显。尤其就Android来说,系统已经很庞大,一份Log里面会有很多信息,很多你不需要的信息,此时工程师就像一个侦探,如何能筛选出有用信息,如何通过Log中的其他信息来帮助自己去分析问题,如何根据已有Log信息去还原当时案发现场,还原当时系统的状态...

2019-04-28 19:24:40 1282

原创 Android 内存信息查看

内存信息查看手机内存分配Kernel Pre-allocation 内核预分配的 物理总内存 - MemTotal,包含各个模块reserved该部分可以在开机过程中内核中查看,也可以在开机log中看kernel的 code、rwdata、rodata、init、bss、reservedeg: Reserved memory: reserved region for node 'ext...

2019-04-21 16:47:09 2282

原创 ADB启动APK

ADB启动APK获取应用列表adb shell dumpsys package > package.txt在package.txt查找自己需要启动的包名,及main activity,如com.androlua.compass/com.androlua.Main找到之后用adb shell am start -n启动adb shell am start -n co...

2019-04-21 16:45:39 2516

原创 Android 存储信息查看

存储信息查看df查看不包含superblock包含内存文件系统SW:/ $ df -hFilesystem Size Used Avail Use% Mounted onrootfs 297M 2.7M 294M 1% /tmpfs ...

2019-04-21 16:44:29 756

原创 LINUX内核调试

LINUX内核调试BUG_ON and BUG在内核调试中用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。其会引发oops,导致栈的回溯和错误信息打印BUG()使用:if (bad_thing) BUG();但是常用BUG_ON()BUG_ON(bad_thing);WARN_ON会调用dump_stack,打印堆栈信息,但不会O...

2019-04-21 16:41:11 555

原创 Low memory Killer

Low memory Killer代码位置drivers/staging/android/lowmemorykiller.c控制节点sys/module/lowmemorykiller/parameters/adjadj_max_shiftcostdebug_levelenable_adaptive_lmkenable_lmklmk_fast_runminfree...

2019-04-21 16:20:07 592

原创 Android P SElinux权限调试

Android P SElinux权限调试在Android P上要开发一个开机过程中运行bin程序,在Android O上权限问题还算比较好解决,而在 Android P上面由于谷歌收紧了 Android SElinux控制,增加了许多neverallow规则,导致调试权限十分不便开发的bin程序由于要开机运行,因此需要通过init.rc去启动这个bin程序severe。而这个bin程序要去控...

2019-04-21 16:10:51 7170 4

转载 float double在内核转换为int

float double在kernel转换为int目前大多数CPU都支持浮点运算单元,但是对于低端的嵌入式处理器可能就会去掉浮点协处理器。在调试一个sensor就遇到这个问题,由于这个处理器是32位arm,比较低端,没有浮点运算,而在开发过程中又需要将float转为int,因此就需要软件模拟浮点运算来实现。存储结构存储方式是用科学计数法来存储数据的。Tip科学记数法 是一种以记下极大...

2019-04-21 15:40:24 1153

原创 Ftrace 调试linux内核

Ftrace 调试linux内核简介ftrace 是内建于 Linux 内核的跟踪工具,从 2.6.27 开始加入主流内核。使用 ftrace 可以调试或者分析内核中发生的事情。ftrace 提供了不同的跟踪器,以用于不同的场合,比如跟踪内核函数调用、对上下文切换进行跟踪、查看中断被关闭的时长、跟踪内核态中的延迟以及性能问题等。系统开发人员可以使用 ftrace 对内核进行跟踪调试,以找到内核...

2019-04-21 15:24:16 923

原创 SDcardFS文件系统浅析(五)- sdcardfs在文件系统调用中

SDcardFS文件系统浅析(五)- sdcardfs在文件系统调用中上一节从ftrace中可以看到在cat过程中sdcardfs调用顺序,我们知道了sdcardfs的调用流程,但是这些函数在整个文件系统的调用中是怎么配合的,怎么被串起来的?下面补齐缺失的trace,来看下其在整个文件系统调用中的位置。食用下面ftrace log需要有一定的文件系统基础,可以配合这个博客:open()在Lin...

2018-06-06 21:34:52 2652 1

原创 SDcardFS文件系统浅析(四)- cat 过程

SDcardFS文件系统浅析(四)- cat 过程我们暂时先跳过源码,通过在sdcardfs文件系统中cat一个文件的过程,来了解sdcardfs的调用过程,在对其调用流程有个清晰理解后再去看代码,会事半工倍。通过ftrace设置graph_function跟踪内核在cat 文件时sdcardfs的调用流程如下sdcardfs cat过程权限检查//权限检查,检查打开文件...

2018-05-24 22:01:48 2577

原创 SDcardFS文件系统浅析(三) - SDcardfs挂载过程

SDcardFS文件系统浅析(三) - SDcardfs挂载过程源码kernel/fs/sdcardfs/main.c挂载过程在init_sdcardfs_fs函数中,下面简要看下源码,分析下挂载过程init_sdcardfs_fs函数分析kernel/fs/sdcardfs/main.cstatic int __init init_sdcardfs_fs(void){in...

2018-04-07 16:29:19 4867

原创 SDcardFS文件系统浅析(二) - inode、dentry、super_block

SDcardFS文件系统浅析(二) - inode、dentry、super_block在开始之前,首先得理解文件系统中inode、dentry、super_block的含义,下面简单介绍下这三个结构的作用,但不做代码层面分析,有个大概认知即可,如果详细了解,可以Google或者百度inodeinode索引节点,操作系统读取硬盘的时候,不会一个个扇区地读取,而是一次性连续读取多个扇区...

2018-04-07 16:04:01 1925

原创 SDcardFS文件系统浅析(一) - sdcarfs历史

SDcardFS文件系统浅析(一) - sdcarfs历史由于安卓O的已经官方支持SDcardFS文件系统,在开发过程中也遇到一些问题,特此浅要分析下SDcardFS1、Fuse(Filesystem in Userspace)早期的android系统没有使用fuse文件系统后来android为了控制不同APP对文件访问的权限,使用了fuse文件系统。早期手机内置SD卡使用一个独立...

2018-04-01 18:09:21 14165

转载 MTK安卓启动流程

MTK安卓启动流程注:ARMv8架构中的EL0、EL1、EL2、EL3层级对应关系EL0 – appEL1 – kernel、lkEL2 – 虚拟化一般不用EL3 – ARM trust firmware、preloader启动流程boot rompreloaderlittle kernelkernel上电先启动boot rom —->复位SOC、初...

2018-04-01 17:04:07 1611

原创 platform设备模型

platform设备模型platform设备驱动,对与usb、iic等有总线依附的设备可以不用考虑,对于不依附于此类总线比较特殊设备,提供platform虚拟总线来完成,例如网卡、LCD这些。这些设备有一个基本的特征:可以通过CPU bus直接寻址(例如在嵌入式系统常见的“寄存器”)。由于这个共性,内核在设备模型的基础上(device和device_driver),对这些设备进行了更进一步...

2018-04-01 17:02:13 312

原创 Linux IIC驱动

Linux IIC驱动层次关系I2C core:对I2C总线、I2C adapter及I2C driver管理I2C adapter :针对不同类型的I2C控制器,实现对总线访问的具体方法I2C driver:针对特定I2C设备的具体操作,read、write、ioctl……core 简化对设备编程,不用考虑硬件的接口,提高驱动的移植性。I2C的core层的代码,就...

2018-04-01 16:44:13 696

原创 总线,设备,驱动之间关系

总线,设备,驱动之间关系再看I2C驱动迷茫时候看到《 从需求的角度去理解Linux系列:总线、设备和驱动 》,感觉豁然开朗,根据博客内容简单总结一下。1、总线总线代表同类设备需要共同遵守的时序,不同总线硬件的通信时序也是不同的,如I2c总线、USB总线、PCI总线……2、设备设备代表真实存在的物理器件,每个器件有自己不同的通信时序,I2C、USB这些都代表不同的时序,这...

2018-03-30 20:53:27 8373 2

原创 字符设备驱动

字符设备驱动1.1 主设备号与此设备号在构建字符设备驱动时候需要获得设备编号,类似于汽车牌照,没有没办法上路。主设备号标识设备对应的驱动程序,而次设备号由内核使用,用于确定/dev下的设备文件对应的具体设备。eg:虚拟控制台和串口终端有驱动程序4管理,而不同的终端分别有不同的次设备号。MAJOR(dev_t dev); 获取主设备号MINOR(dev_t dev); ...

2018-03-30 20:51:36 212

原创 安卓调试及抓log方法

安卓调试及抓log方法抓loglogcat使用Android对日志分为mian的日志、system的日志、event的日志,kernel的日志,Radio的日志:[adb] logcat [] … [] …-b 指定要查看的日志缓冲区,可以是system,events ,radio,main。默认值是system和main -c 清除屏幕上的日志. 抓取上层的日志:...

2018-03-30 20:49:37 6154

原创 Linux设备树

设备树组成DTS有一系列node(节点)和property(属性),节点可以包含更多子节点,DTS主要描述设备信息CPU的数量及类别内存基地址和size总线和桥外设连接中断GPIOCLOCK其有以下几种特性:每个设备树文件都有一个根节点,每个设备都是一个节点。节点间可以嵌套,形成父子关系,这样就可以方便的描述设备间的关系。每个设备的属性都用一组key-...

2018-03-30 20:38:53 430

原创 内核锁浅析

内核锁浅析1. 临界区临界区:访问和操作共享数据的代码段,在多线程并发访问同一资源时,有可能会导致数据读写异常,多线程之间相互竞争,并且问题不容易复现,调试困难,所以需要引入临界区保证代码段是原子性的,要么执行,要么不执行,不容许执行过程中被打断。2. 锁在许多cpu体系结构中,提供了简单的原子操作,例如:算数运算中的自增自减等原子操作。但是在体系结构中没有特定指令对 不定长度...

2018-03-30 20:35:00 448

原创 安卓源码目录分类

安卓目录源码目录 abi 应用程序二进制接口 art 全新的ART运行环境 bionic 系统C库 bootable 启动引导相关代码 build 存放系统编译规则及generic等基础开发包配置 cts Android兼容性测试套件标准 dalvik dalvik虚拟机 developers...

2018-03-30 20:28:41 2054

原创 SELinux权限

SELinux权限SELinux简介SELinux是2.6版本Linux内核中提供的强制访问控制系统,selinux默认配置在/etc/sysconfig/selinux。默认有三种级别enforcing Linux下 selinux所设置的安全策略都会被启用.所有与selinux安全策略有关的服务或者程序都会被策略阻止.也就是,所有操作都会进行权限检查。permissi...

2018-03-30 20:26:44 5879

原创 LINUX常用命令

LINUX常用命令硬件相关lscpu #查看的是cpu信息.cat /proc/cpuinfo #查看CPU信息详细信息free -m #概要查看内存情况,单位MB -g GBcat /proc/meminfo #查看内存详细信息lsblk #查看...

2018-03-30 20:23:29 588

原创 Git、Gerrit、Repo使用及其关系

Git、Gerrit、Repo使用三者各自功能gii,版本管理库,在git库中没有中心服务器的概念,真正的分布式。repo,repo就是多个git库的管理工具。如果是多个git库同时管理,可以使用repo。当然使用gerrit,就必须用repo。gerrit,提交审核代码,图形化的界面,简单的操作使用三者管理代码流程repo init xxx初始化repo sy...

2018-03-30 20:21:19 14401

原创 ADB&Fastboot常用命令

ADB&Fastboot常用命令分区解释system:系统分区.userdata:数据分区.cache:缓存分区recovery:Recovery分区.boot:存放内核和ramdisk的分区。hboot:这个是SPL所在的分区.很重要哦.也是fastboot所在的分区.刷错就真的变砖了.splash1:这个就是开机第一屏幕了.radio:这个是radi...

2018-03-30 20:12:18 20969

原创 质数因子

题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 最后一个数后面也要有空格详细描述:函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String输入描述: 输入一个long型整数...

2016-09-20 21:35:59 396

原创 进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )输入描述:输入一个十六进制的数值字符串。输出描述:输出该数值的十进制字符串。输入例子:0xA输出例子:10#include <stdio.h>#include <string.h>#include <math.h>int main...

2016-09-19 12:29:10 242

原创 计算字符个数

描述 题目描述写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符。输出描述: 输出输入字符串中含有该字符的个数。输入例子: ABCDEF A输出例子: 1 答案#include <stdio.h>#includ...

2016-08-25 20:54:34 385

原创 计算字符串最后一个单词的长度,单词以空格隔开

题目描述计算字符串最后一个单词的长度,单词以空格隔开。输入描述: 一行字符串,非空,长度小于5000。输出描述: 整数N,最后一个单词的长度。输入例子: hello world输出例子: 5答案#include <string.h>#include <stdio.h>void word_num(char *arr,int *num...

2016-08-25 20:25:30 975

转载 让Linux终端中执行的程序在后台运行

在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:  $ ./test.sh &  [1] 17208  $ jobs -l  [1]+ 17208 Running ./test.sh &  对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使...

2016-05-05 14:46:47 444

转载 fallocate快速创建大文件

以前创建文件我一般用dd来创建,例如创建一个512M的文件:dd命令可以轻易实现创建指定大小的文件,如dd if=/dev/zero of=test bs=1M count=1000会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源)但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢在...

2016-04-22 14:01:33 1496

原创 排序

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <stdbool.h>int midsearch(int x, int v[], int n);int midsearch_2(int x, int v[], int n);void shellsort_1(in...

2016-04-09 21:57:33 395

空空如也

空空如也

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

TA关注的人

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