- 博客(70)
- 问答 (1)
- 收藏
- 关注

原创 OPPO内推
长期OPPO内推,岗位多多,覆盖软硬件,前后端等等。工作地点覆盖一线城市和杭州成都等热门二线城市,有意者可以私聊,或者发送简历到我的邮箱:651074561@qq.com走内推流程的好处就是帮你问进度,避免无效的等待。...
2021-07-21 17:32:19
882
原创 [MT8167S][Android 9.0]MTK平台的LCM流程分析——lk层
前言在MTK平台点亮一块屏不是难事,因为MTK的LCM框架很完善,我们的屏驱动需要的工作不是很多。不过要想成为一个优秀的工程师,不能仅仅满足于此,至少要了解整个框架流程。MTK平台的lcm流程分为Lk和kernel两个阶段,这篇文章我们先来分析lk阶段的流程。正文lk阶段起来后,display相关的初始化主要在platform_init()函数中完成。vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt8167\platfo
2020-12-15 15:57:04
5861
1
原创 上传本地工程到gitlab
进入本地工程目录lijiaming@DESKTOP-EEU0RI1 MINGW64 /d/personal/项目/新唐MCU/projectMaster/MS51FB9AE (master)$ lltotal 0drwxr-xr-x 1 lijiaming 197121 0 9月 18 2019 Document/drwxr-xr-x 1 lijiaming 197121 0 9月 18 2019 Library/drwxr-xr-x 1 lijiaming 197121 0 9月 1
2020-12-07 14:16:41
447
原创 [silicon][EmberZnet]router响应write attribute命令并读取存储的attribute值
前言最近在研究芯科平台zigbee cluster的扩展,之所以要扩展标准的cluster,是因为我司的zigbee开关需要做一些定制的功能,扩展的方案大致如下:clusterattributenametypeRangeAccessDefaultreset Keep0x00060x8000Modeuint80x00-0xffRW0x00yesMode attribute用来描述继电器是否跟随开关动作的值:0 = 继电器模式(按下开关,控制继电器
2020-11-12 16:47:41
732
2
原创 [silicon][EmberZnet]router向coordinator发送特定的reporting数据包
前言最近接到一个需求就是,需要在router端检测到coordinator端的信号强度,并告诉coordinator。ZCL标准中有一个cluster可以诊断链路的信号质量,也能知道接收到的信号的强度。正文获取RSSI值Cluster IdentifiersIdentifierName0x0b05Diagnostics这个cluster就是用来诊断链路质量的,其中有个attribute可以获取接受到的信号的强度IdNameTypeRangeAccDe
2020-11-03 18:19:55
868
原创 芯科ZigBee Minimal Application入网流程分析
前言最近接触芯科的EFR32MG21A020F768型号的zigbee SOC,跑了一下simplicity studio 4.0上自带的ZigBee Minimal Application,顺便加点日志跟一下入网的流程。上电的流程已经有大神分析过,可以大致参考一下,这里只关注入网的流程:上电流程正文我这次编译的是一个router类型设备,上电后自动搜索附近的网关。流程大致如下:simple-main/simple-main.cint MAIN(MAIN_FUNCTION_PARAMETER
2020-10-21 18:05:08
1822
1
原创 泰凌微sampleLight代码流程分析
下面我们分析一下telink泰凌微的zigbee SDK中的sampleLight这个demo的代码流程。1、我们从main函数开始看apps/common/main.cmain()-> user_init() -> user_app_init() -> zcl_register(SAMPLE_LIGHT_ENDPOINT, SAMPLELIGHT_CB_CLUSTER_NUM, (zcl_specClusterInfo_t *)g_sampleLightClus
2020-10-19 16:47:28
2320
3
原创 zigbee设备入网流程分析
下图片展示的是一个zigbee设备的入网流程下面是一个router设备连接到coordinator的过程:1、router发送beacon requestrouter会在每一个信道发送一个beacon request(用的地址是0xffff的广播地址),直到有人回复他。我们可以看到在beacon request的包后面,有三个beacon类型的包,这是不同的coordinator回复的,里面会包含不同的信息,包括是否允许你入网可以看到router收到的第一个beacon包是不允许其入网的,直到
2020-10-19 16:22:05
3426
2
原创 recovery模式下支持ADB连接和串口操作
前言Android平台下我们有时候会进入recovery下做一些操作,不管是通过ADB连接还是通过串口操作,都需要你的平台支持,不支持的话可以按照我们这篇文章进行修改。正文ADB连接进入recovery后,我通过ADB连接会有如下报错exec "/system/bin/sh": No such file or directory根据提示,应该是需要把sh打包到recovery.img里面,不过这里要注意的是,recovery下执行的bin文件需要静态编译才行,所以我们需要修改sh编译的Andr
2020-07-24 16:45:43
3662
8
原创 mt8167s温湿度传感器框架分析——kernel层
前言前面我们已经讲解了sensor框架中的framework到vendor层,这篇文章我们将会讲解kernel层的内容。不过不同的芯片平台,kernel层中的sensor框架是不同的,这里针对的是mt8167s平台。不过这里提醒一下,MTK平台应该从kernel 3.x版本后就不支持温湿度传感器的框架了,不过幸好他们还保留了框架的雏形在,我们需要自行解决一下编译问题。正文我们先看一下代码的具体目录:drivers/misc/mediatek/sensors-1.0$ lsaccelerometer
2020-06-16 21:10:01
1504
原创 mt8167s温湿度传感器框架分析——framework到vendor层
mt8167s温湿度传感器框架分析——framework到vendor层关键字:mt8167s、Android 9.0、AHT10前言 本来如果只是给传感器写个驱动并提供能读取温湿度数据的节点,是一件比较轻松的事情,但是最近上层应用的同事要求我们按照安卓标准的流程来,这样他们就能通过注册一个服务直接读取传感器事件数据了。这样做的好处就是第三方的应用也能正常读取温湿度的数据并展示。正文 网上分析安卓9.0 sensor相关的资料不多,下面找到了一位大神对安卓9.0整个sensor框架总结
2020-05-23 13:46:08
1896
原创 安卓9.0马达框架分析
安卓9.0马达框架分析mt8167s;Android 9.0前言 最近需要将之前的一些驱动接口转为安卓标准接口,方便上层应用或者第三方应用去适配。这篇文章先从简单的马达框架入手进行讲解。正文 整个马达框架比较简单,安卓官方已经帮我们实现了framework到HAL层,我们需要实现的就只有驱动层。这篇文章我们梳理一下从上层到底层怎么流程。1、APP层import android.os.Vibrator;import android.widget.ToggleButton;pub
2020-05-23 13:04:27
1478
原创 FATAL: modpost: Section mismatches detected错误解决
如题,写完驱动后编译内核的时候碰到了这个错误,头一次看到这个编译错误,略懵逼,先给出完整的错误:WARNING: modpost: Found 2 section mismatch(es).To see full details build your kernel with:'make CONFIG_DEBUG_SECTION_MISMATCH=y'FATAL: modpost: Se...
2020-04-29 17:57:38
2186
2
原创 I2C设备驱动书写框架
前言在正式介绍I2C驱动框架之前,我们先了解一些基础知识。内核有两种i2c驱动程序的编写方式。分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。但是legacy的方式已经过时了,较新的内核版本已经无法编译通过,之前也写过legacy方式的驱动,可以参考下面的连接:I2C驱动程序。本文是介绍new style的编写方式。正文1、struc...
2020-04-10 17:04:56
879
原创 【rockchip PX30平台】uboot中读取I2C设备的寄存器值
前言最近项目中有块rockchip的板子需要同时适配两块TP,但是没看到RK平台本身有这个功能,所以我们想到通过TP本身提供的sensor id去判断,然后做相应的初始化动作。所以我们需要先看一下在uboot中怎么去获取TP的sensor id值。正文TP本身是有寄存器给我们去获取一些信息,包括sensor id:如红色框起来的地方,读取寄存器0x814A的低4位就可以知...
2020-03-28 16:47:26
1670
1
原创 Linux系统中的dvfs功能
前言最近硬件的同事需要我们提供的版本能动态调频,何为动态调频呢?对于CPU来讲,功耗和性能是一对不可调和的矛盾,通过调整CPU的电压和频率,可以在功耗和性能之间找一个平衡点。由于调整是在系统运行的过程中,因此这种功能也称作动态电压/频率调整(Dynamic Voltage/Frequency Scaling,DVFS)。说白了,就是在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,...
2020-01-29 17:34:37
3130
原创 对nand flash设备进行升级
前言这段时间在给板子开发一个升级的功能,板子的Flash使用的是nand flash,使用mtd去管理分区。在正式开始讲升级部分之前,我们先了解一下nand flash和mtd的基本知识,最后我还会说一下怎么升级ubi格式的rootfs分区。正文1、nand flash参考链接:https://blog.youkuaiyun.com/lee_jimmy/article/details/8208...
2020-01-29 17:02:09
3062
原创 Linux内核奔溃分析
前言最近遇到一个kernel奔溃的问题,错误日志开头一部分如下:[ 355.262451@0] Unhandled fault: external abort on non-linefetch (0x008) at 0xfe004328[ 355.264547@0] Internal error: : 8 [#1] PREEMPT SMP ARM[ 355.269632@0] ...
2020-01-18 17:12:09
2754
2
原创 gpio编号到描述符的转换
前言最近在调试一个新板子的LED驱动,LED灯用到了特定的GPIO引脚,而驱动中有一项工作就是需要占用某个GPIO资源并设置为输出引脚,调用的接口类似如下:#define GPIOAO_3 (3) /* GPIOAO_3这个引脚的id为3 */gpio_request(GPIOAO_3, OWNER_NAME); /* 占用GPIOAO_3这个GPIO的资源 */gpio_dir...
2020-01-18 17:04:02
2321
原创 Linux系统出现bus error错误
在使用memtester工具对DDR进行压力测试时,出现了一下的报错:# memtester 200M 1memtester version 4.3.0 (32-bit)Copyright (C) 2001-2012 Charles Cazabon.Licensed under the GNU General Public License version 2 (only).page...
2020-01-18 13:23:28
7320
原创 git学习
虽然工作中一直有用gitmin,但都是用的很简单的那几个命令,下面链接的教程挺好的,先mark一下,需要的时候翻翻看:https://git-scm.com/book/zh/v2
2019-12-15 10:32:23
139
原创 vmstat命令
vmstat命令是常见的Linux系统的监控小工具,它可以显示系统的CPU、内存以及IO的使用情况.vmstat命令通常带有两个参数,第一个参数采用时间间隔,单位是s,第二个参数采用采样次数。比如,"vmstat 2 5"表示2s采样一次,并且连续采样5次。$ vmstatprocs -----------memory---------- ---swap-- -----io---- -...
2019-11-10 19:55:43
789
原创 top命令
Top命令是最常用的查看Linux系统信息的命令之一,它可以实时显示系统中各个进程的资源占用情况。Tasks: 219 total, 1 running, 144 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st...
2019-11-10 18:58:39
348
原创 一个suspend的问题分析
前言最近遇到一个待机问题,系统一直无法正常suspend,跟了一下代码,发现在PSCI的最后阶段返回了一个错误码。这篇文章我们是延续上一篇《Linux系统的suspend流程分析》,继续揭开psci的神秘面纱。正文从《Linux系统的suspend流程分析》一文我们可以看到,suspend的最后会调用到下面的函数static int psci_cpu_suspend(u32 st...
2019-10-28 00:00:48
2149
原创 Linux系统的suspend流程分析
第1和第2节的参考链接:http://www.wowotech.net/pm_subsystem/suspend_and_resume.html第3节开始的参考链接:https://www.cnblogs.com/arnoldlu/p/6344847.htmlhttps://blog.youkuaiyun.com/tiantao2012/article/details/72621155ht...
2019-10-27 23:51:40
3246
原创 per_cpu的用法
作用在Linux操作系统中,特别是针对SMP或者NUMA架构的多CPU系统的时候,描述每个CPU的私有数据的时候,Linux操作系统提供了per_cpu机制。per_cpu机制就是让每个CPU都有自己的私有数据段,便于保护与访问。声明DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices);如何存取每个CPU的私有变量?...
2019-10-27 23:39:26
3263
原创 Ubuntu系统上编译和安装perl和cpan模块
前言最近在Ubuntu系统的服务器上编译代码的时候,突然报错了,百度了好几天都没有头绪,后面自己想到了一个方法,希望能帮到后面也遇到相关问题的人。正文先看一下编译错误的打印:Your Perl installation is not complete enough; at least the followingmodules are missing: E...
2019-10-20 19:18:32
6108
原创 tasklet使用方法
tasklet的概念我这里就不多讲了,因为网上的文章很多,我这里只介绍怎么在我们的驱动程序中使用tasklet提供的接口函数。一般,从定义到最后注销,一共有4步,下面我们分别介绍这4个接口函数。静态定义taskletstatic void my_tasklet_func(unsigned long data);DECLARE_TASKLET_DISABLED(tasklet, my_...
2019-09-05 23:01:36
1372
原创 Linux驱动中并发问题的相关函数
前言目前我们接触到的复杂点的系统都是SMP(对称多处理器)和preempt(抢占式)的。这篇文章我们会讲解好几种情况下,处理驱动并发问题的函数应该怎么使用,避免大材小用或者用得不巧当造成没有效果。正文1、进程和中断上下文,单CPU,非抢占内核这种情况比较简单,因为是非抢占的,所以同一个CPU上的两个进程之间不用相互顾忌对方,而且又是单CPU的,又不用怕其它CPU的中断来打扰,所以只...
2019-09-04 23:24:53
260
原创 Linux设备模型之——注册接口的使用
前言平时写驱动或者看一份驱动代码的时候,经常被各种注册接口函数搞晕,到底什么时候用哪一个呢?这个问题必须要在理解了Linux的设备模型后才能有个清晰的概念,本文只是在阅读了网上一些大神的博客后的一些小小的总结。不过本文暂时不会对Linux的设备模型有过多的深入,只是在自己的理解上,理清一下注册接口之间的关系。正文先来看一下我们在驱动开发过程中,最常接触到的两个结构体。1、devic...
2019-08-11 15:32:18
751
原创 compat_ioctl和unlocked_ioctl的使用场景
背景接上一篇《蓝牙遥控器连接流程分析》,我们这次正式开始蓝牙遥控器的调试。按理来说,有了上一篇文章的理论支撑,要调试一款蓝牙遥控器应该就不难了,实际也是这样。但是调试过程中,还是遇到了一些问题,在此记录一下。正文在上一篇文章我们可以看到,以前在安卓平台想要创建/dev/input/eventX和/dev/hidrawX节点,蓝牙协议栈中一般有一下操作:int fd = open(...
2019-08-11 14:52:00
2559
原创 手把手教你移植bluez 5.47蓝牙协议栈
目录背景编译bluez1、glib的编译1.1、编译zlib1.2、编译libffi1.3、编译glib2、DBUS编译2.1、编译expat2.2、编译DBUS3、readline的编译3.1、编译ncurses3.2、编译readline4、libical编译5、bluez的编译5.1、copy所有依赖库的pkg文件到一个公共的路径并...
2019-07-21 18:21:32
24440
31
原创 free命令
free命令是Linux使用者最常用的查看系统内存的命令,它可以显示当前系统已使用和空闲的内存情况,包括物理内存、交换内存和内核缓存区内存等信息。free命令的选项也比较简单,常用的参数命令如下。-b 以Byte为单位显示内存使用情况-k 以KB为单位显示内存使用情况-m 以MB为单位显示内存使用情况-g 以GB为单位显示内存使用情况-o 不显示缓冲...
2019-07-20 23:22:40
227
原创 蓝牙遥控器连接流程分析
背景最近在一个Linux系统的ARM板子上移植一款蓝牙芯片,因为我们做的是机顶盒,所以首要功能就是能连接上蓝牙遥控器,并且能正常的接收按键。之前在安卓平台,连接上蓝牙遥控器后,会自动创建/dev/input/eventX和/dev/hidrawX节点,通过读取这两个节点,能看到我们机顶盒接收到的按键数据。但是最近在Linux平台,连接上蓝牙遥控器后,并没有创建什么节点,所以我也不知道怎么将遥控...
2019-07-13 22:24:58
5711
1
原创 内核中的模块参数
前言最近在看kernel源码的时候看到了下面这个宏定义module_param_named(name, name, type, perm)记得之前在买的书《奔跑吧 Linux内核——入门篇》中看过这方面的内容,现在就将它摘抄出来,以方便日后查看吧,权当一个学习笔记吧。正文内核模块作为一个可扩展的动态模块,为Linux内核提供了灵活性。但是有时候要根据不同的应用场景给内核模块传...
2019-06-12 23:39:36
1536
原创 IIS协议和UDA1341TS音频编解码芯片简述
前言 今天学习韦老师的驱动视频,写到了IIS协议相关的内容,虽然目前工作中没有直接用到,但是也做个记录吧,万一以后用到,也方便快速回忆。下面的章节内容大概分为:(1)IIS协议介绍(参考链接:https://blog.youkuaiyun.com/q2519008/article/details/80413695)(2)IIS是音频数据传输的协议标准,只负责传输声音数据,控制数据传输的...
2019-05-26 20:56:48
6048
原创 字符设备的新写法
前言之前我写的字符设备中,用到的分配主设备号的函数是int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops); 这种方法是在内核2.6之前比较老版本中常用到的方法,调用register_chrdev后,系统会一次性为你的主设备分配0...
2019-05-11 15:07:08
366
原创 I2C驱动程序
I2C驱动程序框架 I2C的协议流程在I2C协议原理简述一文中写过,这里就不再讲解。为了更好的书写I2C客户驱动程序,我们先理一理I2C驱动程序的框架,才能更好的写出属于我们自己的驱动程序。 上图中的I2C总线驱动程序(也就是I2C适配器驱动程序)是芯片商为我们实现的,知道如何收发数据;而需要我们自己实现的I2C客户驱动程序,则知道数据的具体含义。 ...
2019-04-27 21:44:06
3399
原创 文件系统学习笔记
目录项dentrydentry结构体的定义:struct dentry { ... struct inode *d_inode; /* Where the name belongs to - NULL is * negative */ /* * The next three fields are touched by __d_lookup. Place ...
2019-04-21 21:38:20
354
2
原创 位置无关码的含义
今天学习的过程中又遇到了“位置无关码”这个概念,竟然一时间想不起来什么意思了,所以证明之前并没有完全搞懂啊!!!再次百度了一下别人的文章,总算又加深了一遍印象。 这篇文章讲的通俗易懂,可以借鉴一下:代码重定位和位置无关码。其中讲到位置无关码的含义就是,在我们写的裸板程序时,链接地址的起始地址是从0x30000000,比如下面所示:SECTIONS{ ...
2019-03-31 11:51:20
439
空空如也
make menuconfig出现的窗口界面显示不全
2018-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人