- 博客(52)
- 资源 (2)
- 收藏
- 关注
原创 Selinux机制介绍与添加流程
Selinux机制介绍与添加流程一.Selinux机制介绍二.Selinux问题分析步骤三.Selinux添加步骤;3.1 添加/dev/ttyHSL1 串口字符设备selinux权限;3.2 添加/sys/class 虚拟设备文件selinux权限;3.3 添加proc/class 文件selinux权限;3.4 添加开机脚本的selinux权限;四.Selinux编译及验证;...
2019-08-09 15:02:56
3386
5
原创 framework修改快速验证
framework层代码调试时,需要快速编译,因此有必要了解不同目录源码生成的目标文件。验证:如下代码保存.bat。验证:如下代码保存.bat。
2025-12-02 17:26:44
299
原创 Linux中I2C常见问题三
前摄、红外模组硬件挂在i2c1, Eeprom设备地址都是0xa0,导致设备地址冲突;dtsi中eeprom模块将slave-addr改为0x20。硬件i2c总线与dtsi配置的i2c pin不一致;芯片方向贴错,导致 i2c scl, sda 不对;dtsi中配置的slave addr和模组不一致;修改将前摄设备地址从0xa0改成0xa2;分析:查看IO模式是否为scl/sda。
2025-10-19 21:25:20
280
原创 Linux中I2C常见问题二
文章摘要:针对模组reset问题分析发现两类故障:1)当reset引脚悬空时,会导致CCI总线通信错误,解决方案是引出reset引脚;2)reset信号拉高后延迟时间不足(2ms)会导致s5kjn1传感器识别失败,将延迟时间调整为5ms后问题解决。两种故障均通过调整reset相关时序参数得到有效解决。
2025-10-19 21:12:17
309
原创 Linux中I2C常见问题一
摘要:调试I2C设备常见问题包括电源电压异常、复位时序不当等。典型案例:1)马达模块未供电导致EEPROM无响应,需补全上电时序;2)DVDD电压不足(1.02V低于1.15V规格)引发I2C通信失败,通过调整软件设置至1.225V解决;3)多路电源未完全就绪时提前复位导致初始化失败,需增加5ms延时确保AVDD/DVDD/IOVDD稳定。解决方案涉及硬件走线优化、电源时序调整及驱动代码改进。(149字)
2025-10-19 20:50:14
696
原创 Linux中pinctrl使用
摘要:本文介绍了高通平台上使用Pinctrl配置GPIO的方法。当IO为EGPIO时,需通过Pinctrl配置为GPIO模式才能正常读写。文中给出了Pinctrl接口的使用方法,包括获取设备句柄和状态查找等操作。通过设备树示例展示了如何定义GPIO104在活动/休眠状态下的配置参数(驱动电流、上下拉等),并在驱动代码中实现状态切换。该方法适用于需要动态切换引脚功能的场景,如唤醒时配置为无上拉、休眠时配置为下拉模式。
2025-10-18 22:20:07
204
原创 Linux中双向链表介绍
本文介绍了双向链表的结构和基本操作API。双向链表每个节点包含数据和前后指针,支持双向遍历。主要操作包括:list_add()在头部添加节点,list_add_tail()在尾部添加节点,list_del()删除指定节点,以及list_for_each_entry()遍历链表。其中list_del()通过修改前后节点的指针实现自我删除。各函数参数包括节点指针、链表头指针等,可实现对双向链表的增删查操作。
2025-10-18 21:37:03
345
原创 Linux中互斥锁
本文介绍了互斥锁在多线程/多进程环境中的应用,包括其初始化(mutex_init())、上锁(mutex_lock())和解锁(mutex_unlock())三个关键API。同时强调了使用注意事项:必须初始化后再使用,且禁止在中断上下文中调用上锁和解锁操作。互斥锁能有效保护共享资源,确保线程安全。
2025-10-18 21:21:54
373
原创 Linux中工作队列使用
摘要:Linux内核2.5版本引入工作队列机制,用于延时任务处理。通过<linux/workqueue.h>提供的API(如create_workqueue、INIT_DELAYED_WORK、queue_delayed_work等)可实现任务延时执行和周期性调度。示例代码展示了工作队列的创建、延时任务初始化(5秒间隔执行)、内存释放等完整流程,包含错误处理和内核日志输出功能。该机制适用于需要异步延时执行的场景,如驱动开发中的定时操作。
2025-10-18 20:54:51
797
原创 中断IRQ 上半部 VS 下半部
Linux中断处理分为上半部(紧急任务)和下半部(耗时任务)。上半部需立即执行且时间极短(us级),禁止中断;下半部可延迟执行(ms级以上),允许中断和调度。若在上半部执行耗时操作(如长循环、大量I2C读取),会导致系统超时重启。实际案例显示,中断函数中20次循环或I2C读取操作都可能触发系统reboot。正确做法是将耗时任务交由下半部处理。
2025-10-17 21:22:45
194
原创 中断IRQ 上半部 VS 下半部
Linux中断处理采用上下半部机制:上半部处理紧急任务(实时性高、执行时间短、中断禁用),必须立即响应否则可能触发系统重启;下半部处理耗时任务(允许延迟、可中断)。上半部要求严格:循环次数少、延迟时间短、数据读取量小,以确保快速响应。该机制有效平衡了实时响应与任务处理的矛盾需求。
2025-10-17 19:36:44
147
原创 Kernel5.4 Timer定时器使用
本文介绍了Linux内核定时器的实现方法,主要包含三个部分:1.需求说明:设置60ms定时器,超时后触发按键弹起事件并重新初始化定时器;2.API接口:使用timer_list结构体、timer_setup()初始化、mod_timer()设置超时、del_timer()删除定时器;3.代码实现:通过my_timer_function()处理超时事件,在中断中重置定时器以避免冲突。关键点包括60ms超时设置、按键状态上报机制以及定时器与中断的协调处理。
2025-10-16 17:22:48
309
原创 dts中status权限范围
本文分析了Rockchip OK3576-C设备树中i2c3总线的状态设置影响。根节点下的status属性决定整个i2c3总线的通断,若设为disabled则总线完全不通。而子节点下的status仅影响该子设备,如cam2_ov5645设为disabled时,仅该设备失效,i2c3总线上其他设备仍可正常工作。这种层级化的状态控制机制实现了对总线及设备的精细化管理。
2025-09-20 15:17:53
127
原创 展锐平台修改产品信息、设备信息、厂商信息
【Android设备信息修改指南】针对Android 10和13系统,修改设备参数需调整不同配置文件:1. Android 10(UIS7862S)需修改device路径下的.mk文件,设置PRODUCT_BRAND(品牌)、PRODUCT_MODEL(认证型号)和PRODUCT_MANUFACTURER(制造商);2. Android 13(UIS7885)则需修改var.mk文件定义ro.product属性,并在buildinfo.sh中设置销售型号和设备名称(如MG9)。不同系统版本的关键参数配置路径
2025-09-11 14:50:43
337
原创 Android系统更换壁纸
摘要:本文介绍了Android系统壁纸替换的规范流程。首先需手动验证壁纸效果,确保无敏感内容(如公司名称等);确认无误后,针对不同Android版本进行替换:A10系统替换路径为frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg,A13系统则为device/sprd/mpool/module/product/defaultwallpaper/moverlay/product/base/frameworks/base/core/r
2025-09-11 14:31:06
168
原创 UIS7885 + Android13平台修改开机Logo、开机动画
文章介绍了在UIS7885+A13平台上修改开机Logo和动画的方法。修改Logo有两种方式:直接替换指定路径的bmp图片或制作logo.bin文件。后者需先确认屏幕尺寸,替换对应目录的bmp文件,再通过工具转换为logo.bin。替换开机动画需制作特定格式的zip文件,将其拷贝至system/media目录并配置相关mk文件。两种修改都需要在vendor/sprd/release/pac_config/uis7885_2h10.ini中进行相应设置。
2025-09-11 14:25:30
996
原创 五.产线相机问题分析思路
产线4pcs模组出现脏污划痕问题,经分析确认直接原因为IR滤光片破碎,根本原因是工人装配时挤压镜头。通过交叉验证和模组厂分析,发现IR玻璃破碎划伤芯片,追溯发现半成品无异常,问题发生在DVT装机环节。解决方案包括临时更换手改IR模组和长期优化装机工艺。经小批量验证后,后续200套PVT装机未再出现同类问题。
2025-09-05 11:44:52
346
原创 二. Flare、Ghost和光斑介绍
摘要:本文分析了手机摄影中常见的三种光学现象:炫光(光源周围雾化)、鬼影(对称光斑)和光斑(强光下的空心光圈),其成因是光线在镜头模组内多次反射。解决方案建议:严重情况可更换650nm波段的蓝玻璃滤光片(对比案例显示效果显著),一般情况可通过镀膜改善但无法根除。实验对比证实蓝玻璃材质能有效消除鬼影和光斑现象。(150字)
2025-09-04 09:47:58
446
原创 Android.mk中赋值语句
Android.mk文件中的赋值语句使用不当导致Camera360移植失败。问题表现为系统无法开机,报错显示缺少libc++_shared.so库。经分析发现代码中使用了":="覆盖赋值,导致所需库未被正确包含。解决方法是将赋值语句改为"+="追加赋值,确保必要的库文件被正确添加。这验证了Android.mk中四种赋值语句的区别:基本赋值("=")、覆盖赋值(":=")、追加赋值("+=")和条件赋值(&qu
2025-09-03 08:35:06
240
原创 全志T507平台GPIO 控制(二)
本文主要介绍了基于T507芯片的GPIO控制配置修改,重点涉及PE13和PE16引脚的电源控制功能。通过对board.dts设备树文件的修改,实现了对PE13(5V输出控制)和PE16(12V输出控制)引脚的配置调整,包括注释掉原有配置并添加新的GPIO控制逻辑。同时,在传感器驱动代码中增加了对VAHD_EN(PE16)和POWER_EN(PE13)引脚的初始化、高低电平设置及时序控制,完善了传感器电源管理功能。这些修改涉及GPIO模式设置(输入/输出)、上下拉配置、驱动能力等参数调整,为系统提供了更精确的
2025-07-29 14:01:13
323
原创 全志T507平台GPIO 控制(一)
本文介绍了T5平台的GPIO控制方法。该平台包含9组GPIO端口(PA-PL),其中GPIO-E的内部结构包括功能配置、输出数据、驱动能力和上下拉设置。驱动能力通过PMOS/NMOS管导通实现,高电平时导通PMOS,低电平时导通NMOS。在pinctrl节点控制部分,可通过/sys/kernel/debug/sunxi_pinctrl/目录查看和修改PE13等引脚的4种属性(功能、数据值、驱动能力、上下拉),并提供了具体命令示例进行GPIO电平控制和上下拉配置。
2025-07-29 11:47:46
415
原创 三. C语言IF语句
C语言if语句执行条件总结:当括号内值为非零(如1、-1或x>3成立)时执行代码块,为零则跳过。常见错误包括:1)误用赋值运算符=代替比较运算符==;2)中断处理中未加else导致异常情况无法及时返回,引发系统崩溃。改进方案是在for循环内添加else{continue}确保及时返回,避免中断阻塞。正确使用if语句需注意逻辑判断和中断处理完整性。
2025-07-09 10:32:16
359
原创 Android.mk拷贝文件、文件夹
摘要:Android预编译过程中,通过PRODUCT_COPY_FILES指令实现文件和目录的拷贝。单个文件拷贝(如uis7862s_1h10.xml)需指定源路径和目标路径;目录拷贝使用find-copy-subdir-files函数,自动查找源目录下所有文件并复制到目标目录(如将barcode/bin下文件复制到system/bin)。该机制用于将设备特定文件部署到系统镜像的指定位置。
2025-07-08 10:22:05
302
原创 四.低级错误:编译验证
代码验证需注意编译方式差异:1)cameratuning参数验证时,应优先采用编译成.so/.bin的方式,工具推送(如ISPTOOL)在展锐平台调整结构体或模块时可能失效;2)库文件移植时,单编(mmm)后推送易引发系统Fatal signal 11错误,需先clean再整编(make)确保稳定性。两种场景均提示编译方式选择直接影响验证有效性。(98字)
2025-07-08 09:51:13
127
原创 三.低级错误:串口Log
系统休眠唤醒问题分析建议优先抓取串口Log而非kernel.log。串口抓Log需注意电压匹配(1.8V或3.3V),可用万用表测量确认。建议设置正确串口号和波特率(通常115200)。相比kmsg日志,串口Log在休眠唤醒场景下能提供更准确的信息,避免kmsg常见的冗余信息干扰分析。特别是深度休眠时,串口Log是获取内核信息的可靠途径。
2025-07-08 09:31:02
303
原创 一. 相机模组摆放原理
相机开发时经常出现因模组摆放问题,导致相机成像方向异常。轻则修改软件、模组返工,重则重新修改堆叠,影响相机调试进度。因此,设计一个模型实现模组摆放纠错很有必要。旋转摄像头模组直到:模组长边 平行于 屏幕长边;确认屏幕长边、摄像头模组长边;摄像头模组人头在上、脚在下;3.1 前摄:正对屏幕。人头在上、脚在下;3.2 后摄:正对后盖。
2025-03-26 10:25:56
737
原创 二. 基于C语言fread实现读取xtc.bin数据
EERPOM READ FAIL. INVALID CRC OR HEADER. 后模组厂提供一个xtc.bin文件用于。打开文件:fopen打开/data/vendor/cameraserver/xtc.bin 文件。读取文件:fread读取文件内容后保存至xtc_data_buf_otp。/***从data分区文件读取xtc数据保存至buffer中***//*******数据传给remosaic接口******/关闭文件:fclose关闭文件。
2025-02-08 11:43:10
407
原创 一.基于C语言fwrite实现dump Eeprom数据
打开文件:fopen创建一个新文件/data/vendor/cameraserver/s5kjn1_xtc.bin;/**将xtc数据写入/data/vendor/cameraserver/s5kjn1_xtc.bin **//**从Eeprom中读取数据、筛选xtc数据保存至xtc_data_buf_otp**///筛选出xtc数据保存至xtc_data_buf_otp。写入数据:fwrite将xtc数据写入上述文件中;筛选数据:从buffer中筛选出xtc数据;/****设置dump开关***/
2025-02-08 10:56:14
760
原创 一.低级错误:patch合错
鼠标右键copy、粘贴,合入后部分代码没有完全拷贝过来。将修改后的代码文件发给patch源头进行review;间接后果:高通CE用了1周时间分析,占用人力;提CQ给高通后,高通CE在系统释放修改代码。对修改后的代码进行double check;若代码多,让对方提供正式patch;displaly渲染影响相机显示,且未进行double check。直接现象:现象依然存在;若代码少,就手动敲代码;
2025-02-07 15:22:09
208
原创 二.低级错误:patch漏合
基于展锐UIS7885+A13平台调试50M sw remosaic时,remosaic_process()无法调用。4.2 使用beyond compare对比修改前后差异点,是否全;展锐释放的patch包含:1个.diff文件、2个修改前后文件夹。4.1 git apply --reject 强制打patch;4.3 其它人进行double check或review;实际合入时cam_core.c文件有2处代码漏合;直接现象:50M拍照时相机卡在;间接后果:项目进度推迟了9天;
2025-02-07 15:09:32
356
原创 UIS7885+A13添加宏开关控制libcamera目录
宏:CAMERA_IR_CONTROL不生效4.1 在一个变量后去掉;编译是否报错?#endif-》不报错4.2 使用其它宏CONFIG_CAMERA_4IN1 ,编译是否报错?#endif-》报错,宏生效;4.3 全局搜索CONFIG_CAMERA_4IN1, target_board_camera_4in1-》device/sprd/mpool/module/odm/camera/main.mk 还有定义同时CAMERA_IR_CONTROL 未定义;
2025-01-16 10:33:15
534
原创 SN7326矩阵按键功能移植与适配(三)
{0x6C, 0x2C, KEY_F3}, //DAT:数字、符合切换键。{0x40, 0x0, KEY_F2}, //FN:数字和符合切换。{0x64, 0x24, KEY_SPACE}, //空格键。{0x73, 0x33, KEY_CAPSLOCK},//大小写切换键。{0x74, 0x34, KEY_DOT}, //符合.{0x4E, 0xE, KEY_BACKSPACE}, //删除键。//只上报Fn,Up,down。//单按键时取原始数据。
2024-08-17 17:06:41
619
原创 SN7326矩阵按键功能移植与适配(二)
key_report_value()函数只有if,else if没有else异常处理代码:互刷版本上报的键值无法识别后程序代码卡在for循环里无法return即中断函数无法return,触发系统reboot;IRQ配置成Top端,若IRQ无法立即return就会触发系统reboot;原因:按下按键个数>6时,IRQ处理函数会一直读取按键内部0x10状态寄存器,直至其值bit7为0。复现:使用全键盘机器,同时按下多个按键>6个,解决:只处理2个按键,缩短中断函数处理时间。解决:添加else 语句。
2024-08-17 16:57:58
376
原创 SN7326矩阵按键功能移植与适配(一)
输出:bsp/out/androids/uis7863_6h10_Natv/dist/modules/archive/sn7326_i2c.ko。bsp/bootloader/u-boot15/include/linux/input.h //定义键值。0101 0000= 0 00 1 0 0 00 :无自动清除、输入端去抖使能、去抖时间2倍、关闭长按键;若为1,说明有多个按键按键按下,只有fn,up,down这3个按键其中一个按下时才上报键值;若为0,说明只有1个按键按下,无条件上报键值;
2024-08-17 16:40:16
1169
原创 使用addr2line分析MTK6765机器重启(三)
非规范区域:0x0000_7fff_ffff_ffff到0xffff_0000_0000_0000。用户空间:0x0000_0000_0000_0000到0x0000_7fff_ffff_ffff。内核空间:0xffff_0000_0000_0000到0xffff_ffff_ffff_ffff。-》3090ffe89de08a38在内核空间、用户空间的非法区域;
2024-08-17 14:03:14
362
原创 使用addr2line分析MTK6765机器重启(二)
查看vmlinux.txt文件查找0xFFFFFF8008201724。System.map: 静态代码(kernel image)的符号表;objdump:将so,bin等二进制文件反汇编成.txt;objdump将vmlinux二进制文件转换成.txt文件。addr2line: 将系统崩溃地址对应到文件名和行号;在System.map查找报错函数的逻辑地址。6.3计算PC逻辑地址=PC基地址 +偏移量。vmlinux:内核镜像编译时生成;
2024-08-17 13:59:51
441
原创 使用addr2line分析MTK6765机器重启(一)
CPU SOC异常损坏,导致CPU访问非法指令、访问非法内存地址,触发系统Reboot.0x40/0x90:表示函数开始偏移量 (字节)、0x90:函数的大小。pc:当前CPU运行位置,lr:函数返回地址,以定位函数被调关系。5.1 更换Emmc:Memory + DDR: 测试2天复现;//Trace开始:调用栈,从下往上读,调用关系。PID: 进程/线程的PID:11008。LR:函数返回地址,以定位函数被调关系。PC逻辑地址=PC基地址 +偏移量。PC逻辑地址=PC基地址 +偏移量。
2024-08-17 11:50:04
941
Android平台修改开机画面
2022-04-28
批量、递归替换字符串名称
2024-06-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅