自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [Android] hidl实现完整c++示例

HIDL是Android8.0新出的一个技能,以service和client的方式实现hal接口,目的是想使Android系统和BSP解绑,使系统升级更加方便。HIDL的使用方法一般是先提供.hal文件,然后使用hidl-gen工具生成 框架源文件和Android.bp编译工具文件,之后填充生成的源文件和定制Android.bp编译文件。

2024-09-19 10:48:32 511

原创 [RK3568] [Android11.0] 解决rtl8852be不能正确加载的问题

代码位置:hardware/realtek/rtkbt/code/libbt-vendor/src/hardware_uart.c。8852be 模组换了模组厂,模组料号没有包含在蓝牙驱动里而导致的蓝牙固件不能正确加载的问题。

2024-09-18 15:41:23 189

原创 [C语言] 14--编译器、宏定义和头文件

一个可执行镜像文件可以由多个可重定位文件连接而成,比如a.o, b.o, c.o这三个可重定位文件链接生成一个叫x的可执行文件,这些文件不管是可重定位的,还是可执行的,它们都是ELF格式的,ELF格式是符合一定规范的文件格式,里面包含很多段(section),比如我们上面所述的hello.c变异生成的hello.c有如下的格式。一般来说我们C语言程序需要用到的很多的.c 文件,当某一些公共的资源需要在各个源文件中使用的时候,就可以把它写在头文件中,被其它的.c文件包含,可以避免编写同样的代码。

2024-09-09 14:18:09 1454

原创 [C语言] 13--联合体与枚举

结构体每一个成员都有一个独立的内存空间,但是联合体的每一个成员共用同一个内存空间因此联合体也被称为共同体。概念:枚举本质上一种范围受到限制的整型,比我们可以使用0-3表示4种状态(比如某个硬件的状态:打开、运行、暂停、关闭)枚举的作用提供了一个正确范围,使用一个有意义的单词来表示一个整型数字提高代码的可读性。可以在声明枚举常量列表的时候对他进行赋值,如果没有赋值则等于前一个常量值+1;enum 枚举标签{常量1, 常量2,常量3,常量4,};联合体的尺寸取决于,联合体中成员宽度最宽的。

2024-09-09 14:04:45 264

原创 [C语言] 12--结构体

定义与初始化实际为结构体分配内存空间 栈//普通成员初始化struct TieZhu c = { "Guide of Programming in the Linux Envirnment" , 3.59 , "张三" };// 指定成员初始化.Name = "张三",注意:①普通成员初始化: 写起来方便一点, 但是用起来麻烦一点,不利于代码的更新于迭代。②指定成员初始化:写起来麻烦一点, 但是用起来比较轻松, 有利于后期代码的更新迭代, 不会照成成员与成员之间初始化错位的问题。

2024-09-09 14:01:32 937

原创 [C语言] 11--存储期

概念:在堆内存中分配的变量(内存) , 都属于自定义存储期,他的申请与释放完全由用户自己把握。如何申请:如何释放:free如何清空:bzeromemset注意:malloc 只负责申请空间, 并不会清空内存,因此一般使用bzero 清空calloc 负责申请内存,并会默认清空为 0 .free 只负责释放,也不会清空 更不会让指针指向空, 因此free之后最好让指针指向NULL。

2024-09-09 13:46:25 263

原创 [C语言] 10--作用域

概念: 如果有多个不同的作用域互相嵌套,小的作用域的作用范围会临时掩盖大的作用域(标识符名字相同)。概念:在代码的外部定义,它的可见范围是可以跨文件可见的(可用头文件中进行extern外部声明)概念:在代码内不定义的变量,可见范围从定义语句开始直到该代码块的右括号右边结束 }③在内码块内部定义的标识符 , 在外面其它的代码块中是不可见,因此称为局部作用域。不可以被static修饰, 修饰之后就变成本文件可见(可见范围被缩小)。在C语言中非常重要的一个角色, 它在不同的场合表现的意义不一样。

2024-09-09 13:40:37 252

原创 [C语言] 09--常用字符串处理

haystack --> 需要查找的源字符串 ( “Hello Even” )c --> 需要查找的字符 (虽然是个整型,但是实质是是一个无符号的字符类型)needle --> 需要查找的字符串 (“Even”) 查找到的内容。s --> 需要分割的字符串 (需要可读写的内存地址)str --> 复制后的字符串(目标地址, 必须可读写)s --> 需要遍历寻找的字符串 (只读地址即可)s --> 需要设置的内存的入口地址 (可读写)dest --> 目标地址 (可读写的内存地址)

2024-09-09 11:53:04 603

原创 [C语言] 08--内存管理

①使用malloc 申请内存时 , 内存中的值时随机值 , 可以使用bzero清空②calloc 申请内存时 , 内存中的值会被初始化为 0③free 只能释放堆空间的内存,不能释放其它区域的内存释放内存的含义:④释放内存仅仅意味着,当前内存的所有权交回给系统⑤释放内存并不会清空内存的内容⑥也不会改变指针的指向,需要手动把指针指向NULL ,不然就成野指针了。

2024-09-09 11:49:09 1188

原创 [C语言] 07--函数

函数对外公开的接口信息。比如:void①函数的返回值,该函数运行结束后返回什么东西给你,比如:void②函数名,命名的规则跟变量一致。应该顾名思义。比如:驼峰法、下划线法或者两者结合法③参数列表,告诉用户该函数需要输入的数据以及类型,有可能有多个也可能没有。

2024-09-09 11:39:43 1181

原创 [C语言] 06--数组与指针的结合

当我们使用p2 进行指针加减运算的时候 ,由于指针是整型的,可以访问到数组中的下一个元素以及上一个元素。以上代码中 p指向的是 一个整型数组并有5个元素。因此在对p 进行加减运算时, 是加减一个数组。一开始定义p2并初始化让指针p2 指向数组中第3个元素的地址。指针数组: 专门用来存放指针的数组,称为指针数组。以上代码是通过指针p2 来访问数组中的元素。数组指针: 专门用来指向一个数组的指针。

2024-09-06 11:16:36 398

原创 [C语言] 05--指针

②不同的地址他从表面上看似乎没有什么差别,但是由他们所代表的内存的尺寸是不一样的(由内存中所存放的数据类型相关),因此我们在访问这些地址的时候需要严格区分它们的逻辑关系。①虽然不同的数据类型所占用的内存空间不同, 但是他们的地址所占用的内存空间(地址的大小= 指针的大小)是恒定的, 由系统的位数来决定 32位 / 64位。指针在加减运算的过程中, 加/减的大小取决于该指针他自己的类型,与它所执行的数据实际的类型没有关系。(2)常目标指针 修饰的是指针所指向的目标,表示无法通过该指针来改变目标的数据。

2024-09-06 11:07:36 1118

原创 [C语言] 04--数组

重点: 变长数组并不是说在任意时候他的长度可以随意变化, 实际上只是在定义之前数组的长度是未知的有一个变量来决定, 但是定义语句过后变长数组的长度由定义那一刻变量的大小来决定。数组在定义的时候必须确定他的大小。②在使用sizeof 运算符中 数组名表示整个数组的首地址(求得整个数组的大小)存储模式:一片连续的内存,按照数据的类型进行分割成若干个大小相同的格子。元素的下标与偏移量:以数组开头为基础的偏移的量(数据类型大小)概念: 定义是, 使用一个变量作为数组的长度(元素的个数)。

2024-09-06 10:50:59 402

原创 [C语言] 03--控制流

如果没有则会从条件满足的语句开始一条一条的往下执行,直到整个switch - case 结束或者遇到其它代码块中的break。逻辑: 与while 类似, 都是让程序中某一段代码块重复运行,但是for相对与while来说更加紧凑。①switch(num )语句中的num , 它必须是一个整型的表达式,也就是所switch只能判断整型的数据。while 则是先执行一次代码块 ,然后再判断条件是否成立(最少会执行一次代码块)② goto 语句是一个无条件跳转的语句, 不利于程序的可读性,一般不建议使用。

2024-09-06 10:34:10 547

原创 [C语言] 02--运算符

含义: 退出某一个函数(如果时在主函数遇到return 则退出程序进程结束, 如果不是主函数,则返回被调用的位置)但左右两边右相同的操作数时,可以使用符合运算符, 使得代码看起来更加简明,且可以在一定程度上提高效率。语法 : 表达式1 = (表达式2 , 表达式3 ,表达式4 , …在逻辑或的运算中, 如果左边为真则表达式直接判断为真, 右边的表达式将不会执行。在逻辑与的运算中,如果左边为假则直接判断为假,右边的表达式将不会执行。// 相当于 a = a % b;

2024-09-06 10:18:25 723

原创 [C语言] 01--数据类型

加1 --> 1111 1111 1111 1111 1111 1111 1001 1100。原码:正整数是直接使用原码进行存储的,比如100这个正整数,则直接把100转换成二进制直接存储。注意:整型数据在二进制存储时最高位(第31位)表示符号位,如果为1 则表示负数反之则表示正数。概念: 不可以被改变的内存,被称为常量,可以被改变的内存则称为变量。补码:负数则是使用补码来存储,补码 = 原码的绝对值取反 + 1。概念:布尔类型用来表示真/假(非零则真)数组(可读,可写):(存储)

2024-09-04 14:37:55 476

原创 [Aml-S905L3A] [Android9] 调试笔记---解决耳机播放声音过大,失真严重

/value1/2为左右耳道增益数值。播放0db 1KHz的标准音频,检测耳机输出波形发现正弦波变成方波。调整耳机输出增益,对比波形,最终将增益从251调至235。代码位置:common。

2024-09-04 14:29:17 434

原创 [Aml-S905Y4] [Android11] 调试笔记---解决CVBS色度亮度增益不等测试项fail问题

通过aml提供的cvbs调试文档,相关1b05寄存器值改为f8测试pass。

2024-09-04 14:24:21 132

原创 [Aml-S905Y4] [Android11] 调试笔记---解决系统启动后,开机视频未正常退出,导致开机时间延长

系统ready后,就正常退出开机视频的播放,无需等待视频播放结束再退出。

2024-09-04 14:21:16 348

原创 [Aml-S905Y4] [Android11] 调试笔记---修改屏幕像素点密度

该属性定义在device/amlogic/oppen/oppen.mk。相关属性 ro.sf.lcd_density=240。

2024-09-04 14:18:00 151

原创 [Aml-S905D3] [Android9] 调试笔记---recovery 取消屏幕上的log打印

删除在recovery模式下进行升级时屏幕上相关log的打印信息。

2024-09-04 14:10:11 143

原创 [Hi3798mv320] [Android9] 调试笔记---遥控器在recovery时响应 向上,向下,确定键的适配

适配电信遥控器在recovery时响应 如:向上,向下,确定键。

2024-09-04 14:03:45 268

原创 [RK3568] [Android11] 调试笔记---内核添加ntfs配置,实现挂载ntfs格式的U盘

实现挂载ntfs格式的U盘。添加ntfs的内核配置。

2024-09-04 09:55:13 109

原创 [Aml-S905Y4] [Android11] 调试笔记---打开pl2303驱动内核配置

这个是usb转串口的驱动,插入usb转串口会生成/dev/ttyUSB0。打开pl2303驱动内核配置。

2024-09-03 09:22:22 213

原创 [Aml-S905L3A] [Android9] 调试笔记---屏蔽开机过程重复按enter/space等按键进入uboot

uboot启动过程中可以通过按键来选择进入uboot命令行,或者(默认)进入kernel;代码位置:bootloader/uboot-repo/bl33。移除enter/space键的判断,保留Ctrl+c组合键。

2024-09-03 09:13:44 157

原创 [Aml-S905Y4] [Android11] 调试笔记---修复烧录板卡报错的问题

timing文件的ddr配置错误导致的,我们的硬件是ddr4,注释掉LPDDR4放开DDR4就可以了。现象:一会打印ddr4,一会打印lpddr4。

2024-09-02 15:37:12 182

原创 [Aml-S928X] [Android11] 调试笔记---logo替换更新

1>挂载分区,mount-o rw,remount /mnt/vendor/odm _ext。2>删除/mnt/vendor/odm_ext/logo files目录下的bump.bmp。3>进入uboot查看ext4文件系统对应的分区。或者 run load_bmp_logo。1>查看logo.img的logo。2>查看ext4上的logo。实现logo替换更新。

2024-09-02 13:58:08 144

原创 [Aml-S928X] [Android11] 调试笔记---开机时实现对应引脚的拉高或者拉低

在BootLoader阶段拉高对应引脚的电平,需要注意该引脚有没有冲突,如果有冲突可能导致无法拉高对应的引脚或者一直反复重启的现象可以通dmesg打印内核查看。开机时在uboot阶段实现对应引脚的拉高或者拉低。

2024-09-02 12:40:58 198

原创 [Aml-S928X] [Android11] 调试笔记---待机后反复自动唤醒

rtc唤醒源导致的,关闭该唤醒源。

2024-09-02 11:54:32 176

原创 [Aml-S928X] [Android11] 调试笔记---reboot无法软重启

板子移除了SD卡,初始化SD硬件模块时出错,导致reboot无法软重启,需要在对应的dts文件中找到sd卡后disabled。

2024-09-02 11:43:30 196

原创 常见的加密解密算法

双向加密又称为可逆加密,即生成密文后,在需要的时候可以反解为明文;eg:RSA、AEC、DES系列。对称加密算法:也成单密钥加密,对称式加密就是加密和解密使用同一个密钥;非对称加密算法:非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和。单向加密又称为不可逆加密,即生成密文无法反解的一种加密方式:eg:MD5和SHA系列、HMAC。eg:RSA、DSA、Ecc、Rabin和Elgamal。双向加密又包括非对称加密和对称加密。加密分为单向加密和双向加密。

2024-09-02 10:44:53 462

原创 [Android] Android启动流程

Zygote进程是Android系统的关键进程,负责fork出应用进程,是所有应用进程的父进程。init进程会解析init.rc配置文件,该文件描述了系统在启动时需要进行的各种操作,包括启动系统服务、挂载文件系统等。Zygote进程是Android系统中的一个重要进程,是所有应用程序的起点,任何新应用程序的进程都是由Zygote进程来孵化和启动的。在系统启动过程中,init进程首先会创建和挂载所需的文件目录,这些目录包括根目录、/proc、/sys等,以确保系统能够正常运行和提供所需的资源和环境。

2024-09-02 10:43:24 1454

原创 [Android] init进程的介绍

第二阶段主要是初始化属性系统、解析SELinux的匹配规则、启动属性服务、解析init.rc来启动其他进程如Zygote进程。属性带有前缀如.ro表示只读属性、.persist表示用来保存程序的设置项修改属性的请求一般由init进程完成。服务Service,以service开头,由init进程启动,一般运行在init的一个子程序,所以启动。通过触发器,即以on开头的语句来决定执行相应的service的时机,具体的时机如下。init进程是系统中用户空间的第一个进程,进程号为1,该进程启动分两个阶段。

2024-09-02 10:34:54 291

原创 ROM与RAM的区别

ROM只读存储器,计算机中的ROM主要用来存储一些系统信息,或者启动程序uboot程序;RAM和ROM最大的区别是RAM在断电后保存在上面的数据会自动消失而ROM不会自动消失;RAM随机存储器,是与CPU直接交换数据的内部存储器,它可以随时读写,而且速度很快。,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介;

2024-09-02 10:31:32 153

原创 [Android] JNI技术

JNIEnv是一个与线程相关的代表JNI环境的结构体JNIEnv实际上就是提供了一些JNI系统函数,通过这些函数可以调用Java的函数,操作object对象很多事情。通过JNIEnv操作jobject和jstring从C/C++到Java的调用(回调)1.生成Java对象,可以使用函数NewObject();2.调用Java类的方法,例如,方法的返回值是int型,则需要调用函数callIntMethod()。3.存取Java类的域变量(得到、设置非静态域变量;得到、设置静态域变量)

2024-09-02 10:28:20 434

原创 [Android] Android四大组件

started service(启动服务)是由其他组件调用startService()方法启动的,当服务是started。(1)started(启动):当应用程序组件(如activity)调用startSerive()方法启动服务时,(2)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于。使用bindService()方法启用服务,调用者与服务绑定在一起,调用者一旦退出,服务也就。服务(service),后台运行服务,不提供界面呈现;服务处于started状态。

2024-09-02 10:26:31 569

原创 [Android] logcat抓取日志

Android日志系统主要由logd守护进程进行管理,liblog提供读写日志的接口,longcat提供读取日志的参数命令;日志抓取前使用adb logcat -c命令来清除缓冲区。可以通过宏定义日志的标签,并通过adb logcat | crgep “标签”来抓取指定的日志信息。日志的过滤并重定向到文件中的例子:adb logcat *:E > test.log。logcat抓log方法:adb logcat命令,可以加条件过滤。main:查看日志缓冲区(默认),不包含系统和崩溃日志消息。

2024-09-02 10:23:25 632

原创 [AML-S905Y4][Android11 ] 使用adb重新挂载所有分区为可读可写

背景:mount单独挂载system、vendor报错。

2024-09-02 10:14:44 245

原创 adb连接开发板出错

开发板上重新挂载分区:mount -o rw,remount 分区(/system)shell终端显示开发板:adb shell(断开:exit)上传文件:adb push 本地原文件 开发板路径。下载文件:adb pull 开发板路径 本地路径。查看ip地址:ip addr、ifconfig。断开连接:adb disconnect ip。连接开发板:adb connect ip。查看连接设备:adb devices。或者执行以下命令来开启adb。

2024-09-02 10:02:55 306

原创 Android中Bionic模块

在可执行文件的装载过程中,所有装载进来的动态库对应的soinfo结构都会放到一个链表中,当新装载一个动态库时,会首先检查它是否已经存在于链表中,如果不存在才会继续装载。而linker伪造了一个libdl.so的soinfo结构,并放在了链表第一个元素的位置,因此程序中链接的libdl.so并不会真正的装载。Hook API的原理是利用ptrace函数把一小段代码注入目标程序中,这小段代码的任务是:装载自己开发的动态库到目标进程中,然后查找目标进程中特定函数在全局偏移表中的位置,替换成自己动态库的函数地址。

2024-09-02 09:52:46 1447

空空如也

空空如也

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

TA关注的人

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