![](https://img-blog.csdnimg.cn/20200530133330540.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux Device Driver
我还是不知道linux为啥这么牛逼,我只会喊666。
1byte ≠ 8bit
大家好,我是黑客,我本来想盗这个哥们的账号的。但是我看这老哥平时就是乐于分享,积极进取,尊老爱幼,与人为善,关键还长的帅,不禁泪水就模糊了双眼。真的,希望大家多多鼓励他,支持他,没事给他支付宝转点钱,激发他的创作热情,让世界充满爱。
展开
-
[Linux Device Driver] 内核通用加 log方法
if 1#endif。原创 2023-11-28 11:38:56 · 271 阅读 · 0 评论 -
Android获取开机时间的方式(进launcher)
获取android log的关键log。原创 2022-07-01 23:30:00 · 2314 阅读 · 0 评论 -
端口不稳定抓logcat方法
有时候会遇到设备的端口不稳定,或者端口有限,比如要分析type-c耳机相关的问题,但是没有别的端口抓logcat log了,可以用以下方法抓logcat log:adb shelllogcat > /data/logcat.txt &复现问题之后,从/data/logcat.txt路径下面导出log即可。...原创 2022-02-08 11:48:32 · 435 阅读 · 0 评论 -
[Linux Device Driver] 看门狗
0. 背景&原理我们假设有一个芯片,它自己能不间断的产生脉冲信号(隔一段时间产生,时间由硬件决定),它理所当然有自己的信号时序;比如说,它在每次脉冲前面都要有一个别的信号来通知它,“嘿,老兄,一切正常,请继续保持工作”,基于这样的约定,有人通知它,它就发脉冲;那万一在约定的时间内没人通知呢,那它就不产生脉冲了,直接“躺尸”,在这个芯片产生“躺尸”想法的时候,他会给外界发送一个信号。很常见的就是高低电平,比如本来高电平,芯片凉了,那就把一个信号线拉低变成低电平。大家比较喜欢把这种行为,称为原创 2021-03-25 18:02:40 · 2824 阅读 · 3 评论 -
[Linux Device Driver] 通过设备节点的方式控制GPIO
直接上代码了,Kconfig、defconfig、makefile那些请自己配置。0. vendor/qcom/proprietary/devicetree-4.19/qcom/lagoon-mtp.dtsi&soc { ...... logo_led { compatible = "qcom,logo-led-v2"; qcom,msm-logo-enable-gpio = <&tlmm 87 0x00>; };};1. kernel/m原创 2021-03-21 19:31:36 · 1009 阅读 · 1 评论 -
[Linux Device Driver] 分区大小导致的adb remount失败解决方法
0. 背景这个问题一般是系统组来搞,但是adb remount失败,特别影响audio/camera干活,于是我请教了下大佬,学习了一下。对比log如下:正常remount成功的设备:Disabling verity for /systemUsing overlayfs for /systemDisabling verity for /system_extUsing overlayfs for /system_extDisabling verity for /productUsing ov原创 2021-02-09 11:58:05 · 5889 阅读 · 0 评论 -
[Linux Device Driver] QXDM diag命令发送方法
通过USB连接设备之后,以下面格式在Command里面输入:send_data 0xff 0xfe 0xfc 0xf1 0xf3 0xf4 0xf5原创 2020-12-18 11:06:32 · 1563 阅读 · 2 评论 -
[Linux Device Driver] 解包super.img
0. 背景最近新项目,烧录的时候没有system分区了,听大佬说是被大佬进了super分区; 于是决定研究一波,这里直接采用最简单粗暴的方式,直接对其进行解包,看看包含哪些东西。img镜像文件有两种,分为raw和sparse两种格式。raw ext4 image,即raw image,使用file可以看到它是一个完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载。而sparse image是一个非常普通的data文件,是通过将raw ext4进行稀疏描述得到的,因此尺寸原创 2020-11-26 20:44:31 · 5981 阅读 · 9 评论 -
[Linux Device Driver] 高通平台分区学习
1. 分区名字 && 作用ssd ———ssd diag模块的分区,存储加密的RSA密钥 persist ———其中包含在设备出厂后不应该更改的数据,例如:芯片的校准数据(WIFI,bt,相机等),证书和其他与安全性相关的文件。可以进行高级恢复或安卓系统维护工作。misc ———Miscellaneous的简称,cpu加电之后,启动bootloader,就会读取MISC分区获得来自Main sy原创 2020-11-26 17:20:11 · 4204 阅读 · 0 评论 -
[Linux Device Driver] TP手套模式代码分析
0 设备树配置goodix@5d { compatible = "goodix,gt1x"; reg = <0x5d>; ...... goodix,default-config0 = [ 41 A0 05 D0 02 0A 05 0C 20 E1 8E 05 50 32 05 01 00 32 00 00 28 00 00 00 08 04 03 00 0F 14 3C 44 00 22 00 00 00 00 00 40 00 00原创 2020-11-02 20:12:35 · 964 阅读 · 0 评论 -
[Linux Device Driver] 标准IO
文件类型 bcd_lsp文件的常见操作:fopen/fclosefgets/fputsfgetc/fputcfwrite/freadFILE指针:每个使用的文件都在内存中开辟一段区域,用来存放文件的有关信息,这些信息背包寻到一个结构体中,该结构体的类型由系统定义,取名FILE。标注Io操作对象是stream,在标准IO中,流由FILE*描述流又分为文本流(以ascii存放)和二进制流(以二进制存放)标准i偶的缓存方式分为全缓存,行缓存,不带缓存。使用函数setbuf() setvbuf(原创 2020-10-28 13:51:32 · 176 阅读 · 0 评论 -
[Linux Device Driver] 组合按键
0. 背景本文我已分享过同事,现在也分享给大家。平台: SM6350、android 10、kernel version:msm-4.191. 代码开机组合键需实现3个功能:1. Power + Volume Up进入recovery模式2. Power + Volume Down进入Fastboot模式3. Power + Volume Up + Volume Down进入edl模式2. 为啥这样改这个是根据打印的log,然后改的,可能有的平台代码默认是好的。代码路径:boo原创 2020-10-16 17:43:26 · 1710 阅读 · 4 评论 -
[Linux Device Driver] SM6350 端口修改为9091方法
1. 把这个文件导出adb pull ./vendor/etc/init/hw/init.msm.usb.configfs.rc C:\Users\Administrator\Desktop\a2. 修改直接检索: write /config/usb_gadget/g1/idProduct 0x90DB然后修改成: write /config/usb_gadget/g1/idProduct 0x90913. 导入adb push C:\Users\Administrator\Deskto原创 2020-10-15 16:47:10 · 1484 阅读 · 0 评论 -
[Linux Device Driver] android 11电池温度过高导致设备反复重启
0. 背景之前有个项目要升级android 11,但是设备一直反复重启,然后他们觉得是音频导致的,还让我一个小兄弟周末也来加班。。原因是看到了音频的报错log一直在刷新:android.hardware.soundtrigger@2.0::ISoundTriggerHw/default[ 1240.972777] healthd: battery l=78 v=4079 t=82.8 h=3 st=4 c=0 fc=3581000 cc=0 chg=u[ 1241.570246] init: C原创 2020-10-15 15:57:57 · 2992 阅读 · 0 评论 -
[Linux Device Driver] 如何检索按键键值
1. 抓log在adb shell 里面输入 getevent –l,然后按对应的按键,比如说这里查找音量+键的键值。出现以上log,然后在代码里面检索KEY_VOLUMEUP。2. 检索代码一般位置处于device下面,也可能在kernel下面,grep -rsnw "KEY_VOLUMEUP" ./device ./kernel/可以查到键值为115...原创 2020-10-15 15:30:38 · 789 阅读 · 0 评论 -
[Linux Device Driver] Hello World under Linux OS
0. 无题如图片所示,我们需要修改三个文件。1. kernel/msm-3.18/drivers/Makefile在此文件的最后加一句话:+obj-y += helloworld/2. 添加helloword相关的代码在以下路径LA.UM.5.6\kernel\msm-3.18\drivers添加文件夹helloworld,这个就对应刚才加的Makefile的修改。然后在helloworld里面新增加两个文件,一个是helloworld原创 2020-10-15 10:49:35 · 183 阅读 · 0 评论 -
[Linux Device Driver] 打开内核debug
#if 1#define DEBUG#undef dev_dbg#define dev_dbg dev_err#undef pr_debug#define pr_debug pr_err#endif在想 debug的c文件开头加上这些即可。原创 2020-09-17 16:19:56 · 276 阅读 · 0 评论 -
[Linux Device Driver] Android10关机闹钟错过问题解决办法
0. 背景好久没写博客了,我今天又来吹逼了。。。debug版本,会导致开机时间过长,然后闹铃不能在预设的时间响;User版本因为有优化就没有这个问题,然后测试部大佬就很纠结;不行,你必须给我改。。。其实解决这个问题 ,要两个方向,一个是优化开机速度,不过话说回来debug版本优化开机速度没必要吧,本来就是内部debug用的。。。(其实主要是懒,搞开机优化一看工作量就大-_-++)网上能找到其他前辈的方案,比如这个:高通平台关机闹钟设置不过我只找到适应Android8之前的,他的方法不适用An原创 2020-08-03 20:11:44 · 553 阅读 · 0 评论 -
[Linux Device Driver] 系统软重启无效
0. 背景问题表现是系统,系统关机状态下插入USB线,按power设备不能开机;同时还有一个现象,关机插入USB充电状态下,拔掉USB,系统无法shut down;log如下:[ 153.742220] <<GTP-DBG>>[gt1x_power_switch:371]GTP power off.[ 153.811749] <<GTP-INF>>[gt1x_suspend:2253] Suspend end...[ 160.339053]原创 2020-07-03 11:32:30 · 810 阅读 · 0 评论 -
[Linux Device Driver] 调整串口log打印等级命令
这两个命令我老忘,干脆写篇博客,当做了笔记。echo “8 8 8 8”>/proc/sys/kernel/printkecho “0 0 0 0”>/proc/sys/kernel/printk原创 2020-06-08 19:45:41 · 1360 阅读 · 0 评论 -
[Linux Device Driver] Android10 关闭Selinux权限方法
0. 背景C:\Users\Administrator>adb shellsdm660_64:/ # getenforcegetenforceEnforcing这个表明Selinux权限存在。1. 抓开机log抓一份开机串口log,检索SELinux[ 7.085097] init: Loading SELinux policy这句log是重点,从init可以判断这句代码是从system下面找到的。2 关闭权限然后我们去grep:~/android_10/LA.UM原创 2020-05-30 15:55:03 · 3411 阅读 · 7 评论 -
[Linux Device Driver] android开机流程中,关于kernel运行的时间段
时间戳为0则内核开始跑起来:[ 0.000000] Booting Linux on physical CPU 0x100[ 0.053253] SELinux: Initializing. // SELinux初始化......[13.009046] SELinux: // 类can_socket未在策略中定义。[13.013766] SELinux: ...原创 2020-02-21 10:12:37 · 376 阅读 · 0 评论 -
[Linux Device Driver] 内核EXPORT_SYMBOL宏定义分析
0. 背景EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。在模块函数定义之后使用“EXPORT_SYMBOL(函数名)”来声明。在调用该函数的另外一个模块中使用extern对之声明。//经观察内核里面使用EXPORT_SYMBOL声明之后,很多不需...原创 2020-04-21 12:43:34 · 730 阅读 · 0 评论