
android
Free飝Fly
这个作者很懒,什么都没留下…
展开
-
Android R adb remount 调用流程
说明adb remount并不是调用的/system/bin/remount,而是一个系统集成的函数实现的,相当于调用了一个remount系统函数 ,这也就明白为何adb remount没有走daemon_service_to_fd中的单独remount else if(调用的/system/bin/remount)在fs_mgr_remount.cpp添加log,编译remount二进制,发现执行串口remount和adb remount都会打印这个log,说明两条指令又走到一起了。原创 2025-03-28 16:35:50 · 801 阅读 · 0 评论 -
Android adb自身调试log开关
adb shell setprop persist.debug.adbd.logging service //打开LogType为service的log。adb shell setprop persist.debug.adbd.logging all //打开所有logtype。1.adb源码log是可以动态打开和关闭的,控制逻辑代码如下。trace log会保存在/data/adb/文件夹下。本文介绍下如何打开adb源码中的debug log。3.打开adb trace log方法。原创 2025-03-25 17:11:05 · 375 阅读 · 0 评论 -
Android adb shell一次执行多条指令
注意:adb shell中不能带>或|重定向和管道符,这些符号会优先被adb shell解释执行,不会传递到shell内部。以上几种方法一些是不进入到adb shell内部执行的,一些是先进到adb shell内执行的,跟据需要选择。说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功。说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,原创 2024-08-28 13:56:08 · 1065 阅读 · 0 评论 -
Android 启动时判断overlay fs是否挂载
这种文件系统在执行adb remount 后,修改system 、vendor分区内容并不是真正存储在原来的位置,而是单独利用super剩余空间或data分区存了一份新的,原来的文件并没有改变。这就带来一个问题,调试时使用adb push 更新了需要开机下载的固件,但是开机过程中不是一开始就挂载overlay fs的,这就可能导致加载的还是老的固件。所以只需要我们在init的第二个阶段去加载固件就可以保证overlay fs已挂载,加载的是新的固件。二、Init阶段overlay fs挂载前后阶段分析。原创 2024-08-28 13:25:12 · 897 阅读 · 0 评论 -
Android分区管理工具sgdisk使用
Android的sgdisk是从linux移植而来,使用方法和Ubuntu上的sgdisk基本一样,可以参考Ubuntu的help信息。11代表分区序号,即sda11,中间的0代表起始簇为第一个可用地址,最后的0代表结束簇为最后一个可用地址。通过上面的分区详情也可以看到userdata最后一个簇是14996479,接下来可以使用的簇就是14996480,与上面指令得到的一致。借助Android系统自带的sgdisk可以查看详细的分区信息,类似fdisk命令,sgdisk同样可以创建分区,功能也很强大。原创 2024-07-29 12:32:00 · 1548 阅读 · 0 评论 -
android R ext4 image打包脚本介绍
android编译log里执行是没有报错的,暂时原因未知。由此脚本输出log可以确认实际调用的还是mke2fs这个命令。0x460地址的53EF对应ext4文件系统,0x4A0地址存储的lable name,0x4B0地址存储的挂载点名字。系统:Windwos→windows,Mac→darwin,linux→linux。版本:platform-tools的版本名称(26.0.0,33.0.0...)(6)mkf2fsuserimg.sh 使用介绍。(5)mkuserimg_mke2fs使用举例。原创 2024-07-17 19:18:45 · 1254 阅读 · 0 评论 -
长虹55D3P (海思平台)kernel分区解包ramdisk重新打包
重新打包后发现新的ramdisk比原来的小了很多,原因是我们分隔出来的ramdisk尾部包含了很多垃圾数据,并不属于ramdisk的内容,当解压为cpio时,这些数据就已丢弃,重新打包也不会再包含这些数据。注:ramdisk解包打包可以借助原来的boot解包工具,里面包含了ramdisk解包打包的工具和指令。长虹电视部分海思平台并没有boot分区使用的kernel分区,无法使用网上的boot解包工具解包打包。如果无法开机,可能ramdisk后面的数据也是有用的,可以打包时仅替换ramdisk试试。原创 2024-07-01 16:14:41 · 879 阅读 · 0 评论 -
crc32 C语言参考源码
【代码】crc32参考源码。原创 2024-06-17 14:36:47 · 257 阅读 · 0 评论 -
Android单编模块报FAILED: ninja: unknown target ‘MODULES-IN-vendor错误解决
在检查Android.mk或Android.bp无误后,就要怀疑是不是这个目录的上级目录是不是没有包含这个目录的Android.mk,导致编译系统无法加载这个目录的Android.mk从而报unknown target错误。例如:我的模块路径为vendor/xxx/hardware/audio/external/alsa-utils-1.2.8/Android.mk。可以看到只有定义了VENDOR_USING_ALSA_LIB才会加载alsa-utils-1.2.8下的Android.mk。原创 2023-09-19 10:31:37 · 5669 阅读 · 0 评论 -
linux ALSA 驱动架构
各Driver Probe流程和machine相同,都是调用 devm_snd_soc_register_card和devm_snd_soc_register_component两个函数。首先配置dai-link,然后通过devm_snd_soc_register_card 调用snd_soc_register_card注册card并且解析dai-link,调用snd_soc_card_probe调用platform driver的dai_probe函数。sound:对应machine driver。原创 2023-02-10 15:08:47 · 1739 阅读 · 1 评论 -
Audio参数讲解
音频基础参数frame_bits 一帧数据的位数比如 :16bits 2ch frame_bits = 16*2sample_bits 采样位数 比如16bit 24bit 32bitperiod_size 指一个周期包含多少帧periods 每次处理AD/DA转换的间隔周期内核可以缓冲很多周期的数据,每个周期都会生成一个中断和一个副本,用户层可以间隔很长时间再处理一次,一次可以处理多个周期的数据buffer_size= period_size * periodsparams_p原创 2022-12-05 17:54:34 · 2613 阅读 · 0 评论 -
Android P/Q/R 版本快速制作recovey.img
快速制作recovery.img原创 2022-08-18 19:01:52 · 1010 阅读 · 0 评论 -
UFS/EMMC压力测试
EMMC,UFS 压力测试原创 2022-06-20 16:42:10 · 3672 阅读 · 2 评论 -
linux kernel spi write_and_read clk不间断
spi_write_and_read,一帧完成写和读,CS保持低,clk不间断原创 2022-04-29 14:34:20 · 3310 阅读 · 3 评论 -
Android编译模块报错的奇葩错误
移植编译alsa-util时遇到一个奇葩错误如下[ 98% 218/222] target C: aplay <= vendor/xxxx/bin/alsa-utils-1.1.9/aplay/aplay.cvendor/xxxx/bin/alsa-utils-1.1.9/aplay/aplay.c:3:1: warning: return type of 'main' is not 'int' [-Wmain-return-type]void main()^vendor/xxxx/bi.原创 2022-02-08 17:51:43 · 2160 阅读 · 0 评论 -
Kernel 中MakeFile 使用if条件编译
有时需要通过if else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例:案例一:来源:drivers/char/tpm/Makefileifdef CONFIG_ACPI tpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPM tpm-y += tpm_eventlog.o tpm_of.oendifendif案例二:来源:drivers/char/Mak...原创 2021-11-30 17:22:00 · 580 阅读 · 0 评论 -
MTK Android P/Q system/vendor/super快速打包
一、Android 新版本默认开启了动态分区,把system vendor product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机)二、快速生成system.img传统做法,使用系统自带打包命令:make snod ,这个命令在老版本an...原创 2021-11-17 17:17:45 · 4773 阅读 · 3 评论 -
MTK AndroidP/Q快速打包ramdisk
一、Android P/Q ramdisk与老版本的差异Android老版本的ramdisk是out下的root/ramdisk打包而来,里面包含了init /sbin init.rc default.prop等文件。是一个完整的ramdiskAndroid新版本ramdisk分为了out 下的ramdisk目录和root目录,init ,init.rc等文件大部分都放到了system下(当然这是基于把system作为跟目录的情况,但是现在默认应该就是这样配置了吧)。Android新版本...原创 2021-11-02 18:59:38 · 1922 阅读 · 0 评论 -
Android P/Q MTK平台无依赖打包boot.img
背景: 有时排查版本问题,需要用到替换img的方式来查找问题出现在哪个img,若出现在bootimg,那到底是kernel、DTB 还是ramdisk。此时就需要单独替换其中一个的方式来打包,之前直接make bootimage-nodeps就可以了,但现在发现执行这个命令无效了。下面就分析下新版本如何找到正确的打包命令。一、找到编译boot的命令之前Android编译log里就会把make boot等img的指令打印出来,现在这个log也没有了,那就只能自己修改Makefile 把...原创 2021-09-30 10:04:21 · 1288 阅读 · 0 评论 -
MTK平台DTBO如何生成的以及DWS生成DTS
一、MTK平台最初就是使用DWS来配置GPIO,非常方便、直观;但随着kernel版本升级使用设备树之后,硬件信息都由DTS来描述,但MTK仍然保留了DWS,下面看看MTK如何将DWS转换为DTSI的。kernel使用的DWS路径:drivers/misc/mediatek/dws/mt6752/mt6752_64.dws虽然vendor\mediatek\proprietary\custom\mt6752_64\kernel\dct\dct\codegen.dws也存在但默认不用这个DWS转换为原创 2021-08-06 17:29:46 · 4434 阅读 · 0 评论 -
MTK单编image
一、通用的单编指令支持的指令定义在build/core/main.mk具体这些image如何生成定义在build/core/Makefile自己新增image编译也就需要修改这两个文件,可以参考boot.img 和 system.img快速编译image,无需依赖定义在build/make/core/config.mk二、开启secure boot 即AVB feature情况若开启安全启动,需要生成带verified 的img,使用上述命令编译出的img烧录..原创 2021-07-27 18:45:46 · 1344 阅读 · 0 评论 -
Kernel编译使用系统环境变量
在编译Android代码时,有时想使用一个宏控制各个模块的功能开关(preloader、lk、kernel、android)。但是Android device下的project config mk配置默认只对android的代码有效。如果想全局有效,需要修改Google的默认设计。我们可以使用环境变量来实现,需要做的就是将环境变量转换为代码可使用的宏定义。kernel默认的宏定义就是Kconfig文件的定义,而且Kconfig文件是可以读取到系统环境变量的。实例:导出环境变量 expo.原创 2021-07-16 16:45:55 · 986 阅读 · 0 评论 -
Android.bp中编译强制静态可执行文件
有时我们想编译一个不依赖动态库的可执行程序,就需要添加强制静态的条件。Android.mk 中添加LOCAL_FORCE_STATIC_EXECUTABLE:=true即可那Android.bp如何编译呢?只需在Android.bp对应模块中添加stl: "libc++_static",即可例如:cc_binary { name: "img2simg", host_supported: true, srcs: ["img2simg.c"], static原创 2021-07-12 20:24:25 · 1722 阅读 · 2 评论 -
Android AB system之system_other.img
开启AB升级方案的项目,因为很多需要升级的镜像都有两份,所以存储空间比较浪费。为缓解此问题,有个针对odex的优化方案。 编译版本会生成两个system镜像:system.img和system_other.img,其中,system_other.img中存储的就是odex文件,这样system.img就能小很多,意味着可以为system分区划分较小的空间。 在首次开机时,假设system.img镜像存储在A s...转载 2021-06-21 14:52:32 · 1615 阅读 · 0 评论 -
通过HEX工具判断so文件是32位还是64位
查看开始的第5个字节,01 代表32位,02代表64位另外linux下可以通过file xxx.so或者通过readelf -h xxx.so 查看文件的ELF Header信息扩展知识:ELF文件格式介绍https://blog.youkuaiyun.com/mergerly/article/details/94585901https://blog.youkuaiyun.com/u012195899/article/details/52684368https://blog.c...原创 2021-03-04 16:22:34 · 1318 阅读 · 1 评论 -
RK平台调试串口改普通串口,FIQ串口改串口号
一、把调试串口即FIQ串口修改为普通串口Kernel部分:注释掉kernel config里的FIQ_DEBUGGER相关配置#CONFIG_FIQ_DEBUGGER=y#CONFIG_FIQ_DEBUGGER_NO_SLEEP=y#CONFIG_FIQ_DEBUGGER_CONSOLE=y#CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y#CONFIG_FIQ_DEBUGGER_TRUST_ZONE=y或者修改DTSI也可以&原创 2021-02-22 17:12:27 · 5233 阅读 · 2 评论 -
Linux USB Gadget 驱动开启调试信息
CONFIG_DEBUG_FS=yCONFIG_DEBUG_KERNEL=yCONFIG_USB_GADGET_DEBUG=yCONFIG_USB_GADGET_VERBOSE=y原创 2021-02-20 18:12:09 · 675 阅读 · 0 评论 -
XPOSED框架下载地址
虽然现在Xposd没有前几年那么火了,很多都用面具了,但有时还是想拿老手机来折腾下,发现曾经比较好找的资源现在也很难找了(分享的人少了,原来的下载链接被和谐或取消了)。那就把这些信息记录下来吧,方便以后查看XPOSED官网:https://repo.xposed.info/GitHub:https://github.com/rovo89/Xposed不同版本XPOSED卡刷包:http://dl-xda.xposed.info/framework/...原创 2021-02-18 16:02:36 · 35608 阅读 · 2 评论 -
【官方】下载最新adb及安装驱动的方法
Only adb:驱动:https://adbdriver.com/downloads/adb工具:https://adbshell.com/upload/adb.ziphttps://adbshell.com/downloadsGoogle官方platform_tool工具(包含adb)下载下载:https://developer.android.com/studio/releases/platform-toolsADB和Fastboot for Windowshtt.原创 2021-02-09 11:47:08 · 105399 阅读 · 1 评论 -
解决ADB自动连接网络adb设备
如果手动连接过网络adb设备,虽然使用的端口不是默认5555端口,adb还是会自动连接同端口的其他IP设备,有时在一个局域网内办公还是挺烦人的。可以添加环境变量ADB_MDNS 为 0,和ADB_MDNS_AUTO_CONNECT 为0试一试,我都添加了,不确定哪个会生效...原创 2021-02-07 10:24:27 · 2339 阅读 · 10 评论 -
RK Android平台RGA功能介绍和接口封装
RK RGA说明:⽬前实现的api功能涵盖拷⻉、旋转、裁剪、缩放、格式转换和合成,⽬前仅需要关注以下2个API即可,使⽤如下的2个函数就能满⾜上述功能。int RgaBlit(rga_info *src, rga_info *dst, rga_info *src1) ;int rga_set_rect(rga_rect_t *rect,int x, int y, int w, int h, int sw, int sh, int f);librga接口函数librga ...原创 2021-02-03 16:52:08 · 10054 阅读 · 5 评论 -
Linux/Android 实现CDC+MASS STORAGE复合设备
由于产品需要,需将设备枚举为CDC + MASS STORAGE 或 +ETHER 等设备,如果使用configfs的方式,由于没有提供复合设备功能,简单的复合(例如uac + adb)是不行的,因为uac cdc uvc这些都是gs节点,简单复合后虽然能枚举出来,但是会出现叹号,无法正常工作。除非自己写一个复合设备驱动。好在linux已经提供了一些常用的复合设备驱动,例如cdc + mass storage + ether,但是如何使用,并未做详细的说明,会出现加载驱动识别的情况,failed to.原创 2020-12-22 12:15:55 · 1231 阅读 · 4 评论 -
RK平台MJPEG硬编码接口函数实现
JPEG软编码比较耗时,可能满足不了帧率的需求,RK平台自带JPEG硬编码,支持NV12和RGB565格式编码为MJPEG ,下面是封装后的函数实现int hw_jpeg_encode_nv12(long input_phy_addr,long output_phy_addr,uint8* input_vir_addr,uint8* output_vir_addr,int width,int height,int picfmt,int quality,int thumbquality ){ Jp原创 2020-12-10 14:04:40 · 2947 阅读 · 0 评论 -
Android.mk 批量包含所需编译的源文件写法
SRC_FILS := $(wildcard $(LOCAL_PATH)/YUVlib/*.c)LOCAL_SRC_FILES := \ $(SRC_FILS:$(LOCAL_PATH)/%=%)原创 2020-11-16 18:58:17 · 269 阅读 · 0 评论 -
UVC webcam驱动添加分辨率
kernel webcam驱动默认只支持640*360 和 1280 * 720分辨率支持下面讲讲如何添加自己的分辨率,以添加640*960为例static const struct uvc_format_uncompressed uvc_format_yuv = { .bLength = UVC_DT_FORMAT_UNCOMPRESSED_SIZE, .bDescriptorType = USB_DT_CS_INTERFACE, .bDescriptorSubType = UVC_V.原创 2020-11-11 16:12:49 · 2700 阅读 · 0 评论 -
kernel config配置模块编译不生效的可能原因
有时我们想把一个驱动编译为模块形式,在kernel的config配置为m编译是报***配置项 creates inconsistent choice state 编译后发现驱动并没有被编译,检查kernel下的.config并没有该配置项就以CONFIG_USB_G_WEBCAM为例,单独将CONFIG_USB_G_WEBCAM配置为m就报USB_G_WEBCAMcreates inconsistent choice state的警告。出现这个问题的原因是Kconfig中有...原创 2020-11-03 12:16:18 · 4183 阅读 · 0 评论 -
Android initrc中执行shell脚本
由于initrc中支持的命令有限(不能支持system/bin下所有命令),而且不适合写比较复杂的逻辑(如传参、函数块 ),通常把这些功能放在shell脚本里来执行,但是shell脚本又需要放在initrc中来调用执行。因为随着Android版本更新,selinux的限制越来越多,在initrc中执行shell脚本肯能会遇到很多问题,即使设置selinux 为Permissive 也可能会遇到selinux问题。下面提供两个参考示例供参考service test_shell /syste...原创 2020-10-27 10:15:11 · 2600 阅读 · 0 评论 -
Android终端通过adb 配置静态IP和DNS
有时我们需要使用命令行来配置eth0的IP信息,这在linux系统是非常简单的,网上也有很多资料。但是在Android系统,就非常困难,因为Android精简掉了很多linux命令,而且配置的方法也和linux有区别,甚至不同Android版本,不同平台方法也不一样。 那如何解决这个问题呢?还是得借助busybox,busybox集成了很多linux的命令,只需要push这一个命令就可以解决,确实方便不少。下面说说具体方法。1.ifconfig 查看物理网卡名称,通常是et...原创 2020-10-26 12:50:06 · 17304 阅读 · 19 评论 -
展锐camera 调用流程
本文将要为您介绍的是【Camera专题】Sprd-深入浅出Camera驱动框架1(HAL层-Kernel层),具体完成步骤:一、前言 本文主要研究展讯平台Camera驱动和HAL层代码架构,熟悉展讯Camera的控制流程。 平台:Sprd-展讯平台 Hal版本:【HAL3】 知识点如下: 从HAL层到deiver层 1.Camera的打开(open)、初始化(init)和供电(power on)调用流程 2.预览(preview)调用流程 3.拍照(snapshot)调用流程 Camera软件架构 .转载 2020-10-21 13:50:04 · 6991 阅读 · 7 评论 -
RK平台关闭温度控制降频功能
策略切换到user_space:开机后输入echo user_space > /sys/class/thermal/thermal_zone0/policy或者把mode设置成disabled状态:echo disabled > /sys/class/thermal/thermal_zone0/mode解除频率限制:/* 具体有多少个cdev,根据实际情况修改 */echo 0 > /sys/class/thermal/thermal_zone0/cdev0/cur_s原创 2020-08-20 09:58:21 · 2153 阅读 · 0 评论