自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lee_jimmy的博客

个人博客

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

原创 OPPO内推

长期OPPO内推,岗位多多,覆盖软硬件,前后端等等。工作地点覆盖一线城市和杭州成都等热门二线城市,有意者可以私聊,或者发送简历到我的邮箱:[email protected]走内推流程的好处就是帮你问进度,避免无效的等待。...

2021-07-21 17:32:19 756

原创 [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 4416

原创 上传本地工程到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 384

原创 [silicon][EmberZnet]router响应write attribute命令并读取存储的attribute值

前言最近在研究芯科平台zigbee cluster的扩展,之所以要扩展标准的cluster,是因为我司的zigbee开关需要做一些定制的功能,扩展的方案大致如下:clusterattributenametypeRangeAccessDefaultreset Keep0x00060x8000Modeuint80x00-0xffRW0x00yesMode attribute用来描述继电器是否跟随开关动作的值:0 = 继电器模式(按下开关,控制继电器

2020-11-12 16:47:41 636 2

原创 [silicon][EmberZnet]router向coordinator发送特定的reporting数据包

前言最近接到一个需求就是,需要在router端检测到coordinator端的信号强度,并告诉coordinator。ZCL标准中有一个cluster可以诊断链路的信号质量,也能知道接收到的信号的强度。正文获取RSSI值Cluster IdentifiersIdentifierName0x0b05Diagnostics这个cluster就是用来诊断链路质量的,其中有个attribute可以获取接受到的信号的强度IdNameTypeRangeAccDe

2020-11-03 18:19:55 765

原创 芯科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 1394 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 1966 3

原创 zigbee设备入网流程分析

下图片展示的是一个zigbee设备的入网流程下面是一个router设备连接到coordinator的过程:1、router发送beacon requestrouter会在每一个信道发送一个beacon request(用的地址是0xffff的广播地址),直到有人回复他。我们可以看到在beacon request的包后面,有三个beacon类型的包,这是不同的coordinator回复的,里面会包含不同的信息,包括是否允许你入网可以看到router收到的第一个beacon包是不允许其入网的,直到

2020-10-19 16:22:05 3182 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 2961 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 1237

原创 mt8167s温湿度传感器框架分析——framework到vendor层

mt8167s温湿度传感器框架分析——framework到vendor层关键字:mt8167s、Android 9.0、AHT10前言​ 本来如果只是给传感器写个驱动并提供能读取温湿度数据的节点,是一件比较轻松的事情,但是最近上层应用的同事要求我们按照安卓标准的流程来,这样他们就能通过注册一个服务直接读取传感器事件数据了。这样做的好处就是第三方的应用也能正常读取温湿度的数据并展示。正文​ 网上分析安卓9.0 sensor相关的资料不多,下面找到了一位大神对安卓9.0整个sensor框架总结

2020-05-23 13:46:08 1651

原创 安卓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 1312

原创 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 1811 1

原创 I2C设备驱动书写框架

前言在正式介绍I2C驱动框架之前,我们先了解一些基础知识。内核有两种i2c驱动程序的编写方式。分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。但是legacy的方式已经过时了,较新的内核版本已经无法编译通过,之前也写过legacy方式的驱动,可以参考下面的连接:I2C驱动程序。本文是介绍new style的编写方式。正文1、struc...

2020-04-10 17:04:56 773

原创 【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 1402 1

原创 Linux系统中的dvfs功能

前言最近硬件的同事需要我们提供的版本能动态调频,何为动态调频呢?对于CPU来讲,功耗和性能是一对不可调和的矛盾,通过调整CPU的电压和频率,可以在功耗和性能之间找一个平衡点。由于调整是在系统运行的过程中,因此这种功能也称作动态电压/频率调整(Dynamic Voltage/Frequency Scaling,DVFS)。说白了,就是在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,...

2020-01-29 17:34:37 2784

原创 对nand flash设备进行升级

前言这段时间在给板子开发一个升级的功能,板子的Flash使用的是nand flash,使用mtd去管理分区。在正式开始讲升级部分之前,我们先了解一下nand flash和mtd的基本知识,最后我还会说一下怎么升级ubi格式的rootfs分区。正文1、nand flash参考链接:https://blog.csdn.net/lee_jimmy/article/details/8208...

2020-01-29 17:02:09 2399

原创 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 1971

原创 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 1749

原创 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 6488

原创 git学习

虽然工作中一直有用gitmin,但都是用的很简单的那几个命令,下面链接的教程挺好的,先mark一下,需要的时候翻翻看:https://git-scm.com/book/zh/v2

2019-12-15 10:32:23 112

原创 vmstat命令

vmstat命令是常见的Linux系统的监控小工具,它可以显示系统的CPU、内存以及IO的使用情况.vmstat命令通常带有两个参数,第一个参数采用时间间隔,单位是s,第二个参数采用采样次数。比如,"vmstat 2 5"表示2s采样一次,并且连续采样5次。$ vmstatprocs -----------memory---------- ---swap-- -----io---- -...

2019-11-10 19:55:43 610

原创 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 288

原创 一个suspend的问题分析

前言最近遇到一个待机问题,系统一直无法正常suspend,跟了一下代码,发现在PSCI的最后阶段返回了一个错误码。这篇文章我们是延续上一篇《Linux系统的suspend流程分析》,继续揭开psci的神秘面纱。正文从《Linux系统的suspend流程分析》一文我们可以看到,suspend的最后会调用到下面的函数static int psci_cpu_suspend(u32 st...

2019-10-28 00:00:48 1755

原创 Linux系统的suspend流程分析

第1和第2节的参考链接:http://www.wowotech.net/pm_subsystem/suspend_and_resume.html第3节开始的参考链接:https://www.cnblogs.com/arnoldlu/p/6344847.htmlhttps://blog.csdn.net/tiantao2012/article/details/72621155ht...

2019-10-27 23:51:40 2824

原创 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 2965

原创 Ubuntu系统上编译和安装perl和cpan模块

前言最近在Ubuntu系统的服务器上编译代码的时候,突然报错了,百度了好几天都没有头绪,后面自己想到了一个方法,希望能帮到后面也遇到相关问题的人。正文先看一下编译错误的打印:Your Perl installation is not complete enough; at least the followingmodules are missing: E...

2019-10-20 19:18:32 5135

原创 tasklet使用方法

tasklet的概念我这里就不多讲了,因为网上的文章很多,我这里只介绍怎么在我们的驱动程序中使用tasklet提供的接口函数。一般,从定义到最后注销,一共有4步,下面我们分别介绍这4个接口函数。静态定义taskletstatic void my_tasklet_func(unsigned long data);DECLARE_TASKLET_DISABLED(tasklet, my_...

2019-09-05 23:01:36 1238

原创 Linux驱动中并发问题的相关函数

前言目前我们接触到的复杂点的系统都是SMP(对称多处理器)和preempt(抢占式)的。这篇文章我们会讲解好几种情况下,处理驱动并发问题的函数应该怎么使用,避免大材小用或者用得不巧当造成没有效果。正文1、进程和中断上下文,单CPU,非抢占内核这种情况比较简单,因为是非抢占的,所以同一个CPU上的两个进程之间不用相互顾忌对方,而且又是单CPU的,又不用怕其它CPU的中断来打扰,所以只...

2019-09-04 23:24:53 191

原创 Linux设备模型之——注册接口的使用

前言平时写驱动或者看一份驱动代码的时候,经常被各种注册接口函数搞晕,到底什么时候用哪一个呢?这个问题必须要在理解了Linux的设备模型后才能有个清晰的概念,本文只是在阅读了网上一些大神的博客后的一些小小的总结。不过本文暂时不会对Linux的设备模型有过多的深入,只是在自己的理解上,理清一下注册接口之间的关系。正文先来看一下我们在驱动开发过程中,最常接触到的两个结构体。1、devic...

2019-08-11 15:32:18 615

原创 compat_ioctl和unlocked_ioctl的使用场景

背景接上一篇《蓝牙遥控器连接流程分析》,我们这次正式开始蓝牙遥控器的调试。按理来说,有了上一篇文章的理论支撑,要调试一款蓝牙遥控器应该就不难了,实际也是这样。但是调试过程中,还是遇到了一些问题,在此记录一下。正文在上一篇文章我们可以看到,以前在安卓平台想要创建/dev/input/eventX和/dev/hidrawX节点,蓝牙协议栈中一般有一下操作:int fd = open(...

2019-08-11 14:52:00 1912

原创 手把手教你移植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 14956 32

原创 free命令

free命令是Linux使用者最常用的查看系统内存的命令,它可以显示当前系统已使用和空闲的内存情况,包括物理内存、交换内存和内核缓存区内存等信息。free命令的选项也比较简单,常用的参数命令如下。-b 以Byte为单位显示内存使用情况-k 以KB为单位显示内存使用情况-m 以MB为单位显示内存使用情况-g 以GB为单位显示内存使用情况-o 不显示缓冲...

2019-07-20 23:22:40 184

原创 蓝牙遥控器连接流程分析

背景最近在一个Linux系统的ARM板子上移植一款蓝牙芯片,因为我们做的是机顶盒,所以首要功能就是能连接上蓝牙遥控器,并且能正常的接收按键。之前在安卓平台,连接上蓝牙遥控器后,会自动创建/dev/input/eventX和/dev/hidrawX节点,通过读取这两个节点,能看到我们机顶盒接收到的按键数据。但是最近在Linux平台,连接上蓝牙遥控器后,并没有创建什么节点,所以我也不知道怎么将遥控...

2019-07-13 22:24:58 4973 1

原创 内核中的模块参数

前言最近在看kernel源码的时候看到了下面这个宏定义module_param_named(name, name, type, perm)记得之前在买的书《奔跑吧 Linux内核——入门篇》中看过这方面的内容,现在就将它摘抄出来,以方便日后查看吧,权当一个学习笔记吧。正文内核模块作为一个可扩展的动态模块,为Linux内核提供了灵活性。但是有时候要根据不同的应用场景给内核模块传...

2019-06-12 23:39:36 1305

原创 IIS协议和UDA1341TS音频编解码芯片简述

前言 今天学习韦老师的驱动视频,写到了IIS协议相关的内容,虽然目前工作中没有直接用到,但是也做个记录吧,万一以后用到,也方便快速回忆。下面的章节内容大概分为:(1)IIS协议介绍(参考链接:https://blog.csdn.net/q2519008/article/details/80413695)(2)IIS是音频数据传输的协议标准,只负责传输声音数据,控制数据传输的...

2019-05-26 20:56:48 5110

原创 字符设备的新写法

前言之前我写的字符设备中,用到的分配主设备号的函数是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 317

原创 I2C驱动程序

I2C驱动程序框架 I2C的协议流程在I2C协议原理简述一文中写过,这里就不再讲解。为了更好的书写I2C客户驱动程序,我们先理一理I2C驱动程序的框架,才能更好的写出属于我们自己的驱动程序。 上图中的I2C总线驱动程序(也就是I2C适配器驱动程序)是芯片商为我们实现的,知道如何收发数据;而需要我们自己实现的I2C客户驱动程序,则知道数据的具体含义。 ...

2019-04-27 21:44:06 3196

原创 文件系统学习笔记

目录项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 266 2

原创 位置无关码的含义

今天学习的过程中又遇到了“位置无关码”这个概念,竟然一时间想不起来什么意思了,所以证明之前并没有完全搞懂啊!!!再次百度了一下别人的文章,总算又加深了一遍印象。 这篇文章讲的通俗易懂,可以借鉴一下:代码重定位和位置无关码。其中讲到位置无关码的含义就是,在我们写的裸板程序时,链接地址的起始地址是从0x30000000,比如下面所示:SECTIONS{ ...

2019-03-31 11:51:20 361

空空如也

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

TA关注的人

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