自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陈子陌的博客

相信奇迹的人,本身和奇迹一样了不起。

  • 博客(37)
  • 收藏
  • 关注

原创 Type-c接口及其协议介绍

本文主要介绍Type-c接口的pin脚定义和角色说明。

2022-09-09 14:19:00 26922 3

原创 安卓开机启动流程

安卓手机启动流程

2022-06-22 18:15:13 2074

原创 Linux驱动开发之杂项(MISC)驱动

一、前言misc的意思是混合、杂项的,因此misc驱动也叫杂项驱动。当我们板子上的某些外设在无法进行分类的时候就可以使用该项驱动。二、MISC驱动简介所有的杂项驱动都共用一个主设备号(10),不同的子杂项驱动使用不同的子设备号。与字符驱动不同的地方在于,misc设备驱动会自动地去创建cdev,因此,在我们需要去创建一个字符设备的时候,其实完全可以用misc设备驱动去替代它。misc设备驱动,实际上就是向Linux内核,也就是利用misc驱动core提供的接口去注册一个miscdevice

2021-12-03 14:44:06 1526

原创 Linux驱动开发之触摸驱动

一、引言前一篇文章介绍了Input子系统的基本架构和驱动编写流程。这一篇文章来介绍一下在实际项目中,我们应该来如何编写触摸驱动。二、触摸(TP)驱动1、触摸原理在学习如何编写触摸驱动之前,我觉得有必要先对触摸原理有一定的了解。TP芯片就是触摸芯片,它一般都被放置在触摸面板上,当用户点击显示屏,TP芯片内部固件程序会计算出对应的坐标值数据,然后会将对应中断脚给拉低。硬线中断拉低,会通过信号线透传到Cpu的INT脚上,Cpu感受到INT脚被拉低,触发硬件中断,这时候通过提前注册好

2021-09-02 12:19:17 2072

原创 Linux驱动开发之Input子系统

一、引言在Linux驱动开发的学习过程中,Input子系统绝对是你绕不开的一道关卡。在Linux系统中,不论是按键、鼠标、键盘,亦或者是触摸屏,统统都使用Input子系统来处理输入事件。二、Input子系统1、Input子系统概述Input就是输入的意思,因此Input子系统就是管理输入的系统,和Pinctrl、Gpio子系统一样,都是Linux内核针对某一类设备而创建的框架。不同的输入设备在Input子系统所代表的含义不同,比如按键、键盘就是代表按键信息,鼠标和触摸屏则是代表坐标信

2021-09-01 20:13:03 862

原创 Linux驱动开发之LCD显示驱动调试

一、引言在实际项目中,LCD显示驱动调试是一件十分平常却又十分重要的事情,但因为每个项目的LCD屏都不同,所以每换一个项目都需要重新调试。而对于带LCD屏的项目,又分为两种类型,一种是一体机,一种是分体机。一体机:视频信号直接由信号线从cpu连接到屏端的TCON显示芯片。分体机:视频信号先由cpu到主板的串行器,再由串行器加串,途经LVDS差分信号新到达屏端的解串器,屏端解串器解串LVDS信号,最终将其输入到屏端TCON显示芯片上去。不过,不管是一体机还是分体机,都需要设置屏参。二、

2021-08-26 11:16:51 2461

原创 嵌入式开发之Nand-Flash和Nor-Flash的区别

一、引言在嵌入式开发中,想来每一个嵌入式开发工程师不可避免地都会听到或者接触到Flash这个东西。但是对于一部分人来说,他们并不清楚Flash还有Nand和Nor之分,因此就更不清楚这两者的区别了。今天偶然想起这个问题,于是查询资料,写下这篇博客,做个简单的笔记。二、Flash介绍FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通地过程序可以修改数据,即平时所说的“闪存”。Flash又分为NAND-Flash和NOR-Flash二种。U盘和MP3里用的就是这种存储器。

2021-07-09 11:30:29 4010

原创 安卓音频架构简述

一、前言从入职深圳这边的公司之后,已经做了两款声卡codec的移植了。想着今天没事,我又从网上搜索了一些资料,大概介绍一下安卓平台下的音频架构。二、安卓音频架构Linux早期的时候,内核所支持的音频框架叫做OSS,后面被ALSA框架所取代。安卓音频架构正是基于ALSA框架所建立的一套音频体系架构。大致框架如下:Java服务AudioManager作为服务端,本地服务AudioFlinger作为客户端,两者通过Binder机制交互。AudioFlinger对硬件功能的具体实现(比如

2021-07-02 17:14:20 560

原创 Linux驱动开发之RGB565转RGB888

一、前言在前面介绍FrameBuffer子系统曾说过一帧的概念:“我们将铺满一个lcd屏幕的数据称为一帧”。那么,在每一帧数据中又由许多个像素点构成。这些像素点就是本文的正题——RGB数据。所谓RGB数据,就是按照RED、GREEN、BLUE这样顺序排列的图像数据。而RGB565和RGB888这些英文字母后面的数字则是代表每种颜色的数据占据多少位了,所以RGB565在内存中占据16位,而RGB888在内存中占据24位。在实际项目中,一些平台因为不支持RGB888,只支持RGB565,

2021-06-22 11:34:26 953

原创 Linux驱动开发之USB驱动深入学习(三)——USB2.0ECHI驱动注册

一、USB1、概述USB(Universal Serial Bus)即“通用外部总线”,在各种场所已经大量使用。它的接口简单(只有5v电源和地、两根数据线D+和D-),可以外接硬盘、键盘、鼠标、打印机等多种设备。USB总线规范有1.1版和2.0版。USB1.1支持两种传输速率:低速1.5Mbit/s,全速12Mbit/s,对于鼠标、键盘、CD-ROM等设备,这样的速率够了。但是在访问硬盘、摄像机时,还是稍显不足、为此,USB2.0提供了一种更高的传输速率:高速,他可以达到480Mbit/s。US

2021-05-31 18:08:19 1586

原创 Linux驱动开发之FrameBuffer子系统学习

一、引言之前在调显示驱动的时候,主要是根据平台设计好的套路来——也就是调屏参,但从来没有想过更底层的原理。随着工作的深入,也开始慢慢接触所谓的显示驱动——FrameBuffer子系统,简称fb驱动。接下来,就跟着我来了解一下Linux的显示驱动到底是怎样一个原理。二、FrameBuffer子系统1、FrameBuffer的字面意思FrameBuffer。从字面意思我们知道,也就是帧缓存。缓存我们清楚,那就是一段内存,用以存储某些东西。那么,什么是帧呢?我们将铺满一个lcd屏幕的数

2021-05-07 18:11:06 508

原创 Linux驱动开发之USB驱动深入学习(二)——USB2.0协议

一、引言上一周,趁着空余时间,大概看了一下USB2.0的中文协议,对USB的相关概念又有了一定的深入了解。因为公司不是专门搞USB驱动的,因此也没有相关方面的专家,一切都只能靠自己摸索。目前来说的话,感觉要对USB驱动深入学习的话,那么它的协议还是很有必要学习的。二、USB2.0协议分享因为协议内容很多,但又感觉都比较重要,所以就不一一写出来了,有兴趣的小伙伴们自己下载下来看。百度云盘链接:链接:https://pan.baidu.com/s/1MzSXhRSI84aOpMYdr4l

2021-04-06 10:09:10 552

原创 Linux驱动开发之USB驱动深入学习(一)——USB驱动架构

一、引言随着工作的时间增加,不知不觉就快要工作一年了。从实习,跳槽,再到试用、转正,也做过一些项目,算是在Linux驱动开发这一行入了门。一些简单的外设自己也有能力编写了,但一些复杂的驱动还是需要原厂支持。每到这个时候,就感觉自己特别的废物,就会想到,怪不得那些大厂喜欢深度学习的人才。想来,只有深度学习,了解驱动的架构及原理,才能不依赖他人。自己可以不造轮子,但要有造轮子的能力。所以,我选了很常见的,但也同样复杂的Linux内核驱动——USB。立一个flag,接下来两年之内,我要对Linux

2021-03-31 10:08:06 2532 1

原创 Linux驱动开发之USB设备检测流程

一、引言最近工作中,因为工作需要,特地学习了一下USB设备的检测流程,做个笔记。二、大致流程从中断响应到probe对应的usb设备驱动:hub_irq -> kick_hub_wq -> queue_work -> hub_event -> port_event -> hub_port_connect_change -> hub_port_connect -> usb_alloc_dev -> choose_devnum -> hub_p

2021-02-25 10:56:02 2146

原创 嵌入式学习之shell脚本

一、引言该博客旨在记录shell一些常用的语法规则。二、Shell脚本中$0、$?、$!、$$、$*、$#、$@1. $$Shell本身的PID(ProcessID)。2. $!Shell最后运行的后台Process的PID。3. $?最后运行的命令的结束代码(返回值)。4. $-使用Set命令设定的Flag一览。5. $*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。6. $@所有参数列表。如"$@"用「

2021-02-23 09:34:01 228

原创 Linux嵌入式开发之内存占用

一、引言内存是嵌入式系统中的关键资源,内存占用主要是指软件系统的内存使用情况。本篇博客将介绍如何分析内存使用以便进行进一步优化内存占用相关的基础概念和相关工具。二、内存占用内存占用是应用程序运行时内存的使用或引用数量。对于开发者而言,可以使用的内存量决定了程序使用的复杂性。较大的应用程序需要更多的内存来存储数据和源代码,例如微软软件Microsoft office比之于Hello World应用程序必须使用更多的内存。由于硬件成本的考虑,嵌入式系统的内存资源远远少于PC环境。因此,在嵌入

2021-02-19 11:43:35 1448

原创 Linux驱动开发之DEVICE_ATTR调试技术

一、功能介绍1、简介在sysfs中添加device属性文件,可以动态控制device或者获取device信息。2、相关函数、宏原型及功能2.1、DEVICE_ATTRDEVICE_ATTR宏定义在kernel/include/linux/device.h文件中。原型如下:#defineDEVICE_ATTR(_name,_mode,_show,_store)\structdevice_attributedev_attr_##_name=__ATTR(_...

2021-01-30 10:34:55 1937 2

原创 飞思卡尔IMX6之TLV320ADC310X系列声卡驱动移植

一、前言在介绍音频总线I2S总线博客的前言里,我就已经说过,后面会把这次移植声卡驱动的前后经过分享出来。这次,终于忙里偷闲,写出这篇博客来。众所周知,Linux对于音频,是有自己的一套驱动框架的,那就是——ALSA。以往,像V4L2视频框架、I2C总线框架、INPUT子系统等,我还耐心研究过,但这套音频框架我却甚至都没有时间去研究。深圳的工作节奏相比较重庆的工作节奏快太多了,每天都有事情做,忙的不行。这里我分享一个链接,里面对于ALSA框架介绍的挺清楚的,大家可以去看一下。提醒:

2021-01-28 17:15:22 2044 10

原创 音频总线之I2S总线介绍及相关协议

一、前言两周前接到任务,项目换了一个codec芯片,需要重新移植声卡驱动。因为之前没有做过声卡驱动移植,所以对音频相关的知识都不怎么了解,为此,在网上搜索了很多资料

2021-01-25 17:43:43 7182

原创 I2C时序分析及模拟实现I2C主设备驱动

一、前言对于做嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置。不过,使用I2C协议,对时序的掌握,无疑不是重中之重。我们只有正确掌握时序,才能使用普通的GPIO模拟实现出一个功能正常的I2C主设备。在我们分析I2C的时序之前,先来了解一下I2C协议的相关基础知识。注意:本文源码都是基于STM32。二、I2C1、I2C总线I2C总线是由Philips公司开发的一种简单、双向二线(SDA数据线和SCL时钟线)制同步(同步的意

2021-01-05 15:27:59 1447

原创 U-BOOT学习之2014.4版Uboot启动流程分析

一、前言老大给我布置了一个任务:某某项目uboot开发之usb增强ic驱动。不知道大家看到这个任务懵不懵,反正我最开始是蒙的。后来又问了一下,才明白到底要做啥。任务是这样的:因为这个项目的usb线比较长,为了避免usb升级的时候读取u盘失败,所以我们采取的方案是硬件提供一个有i2c支持的usb增强ic。因此,我就需要在车机界面点击升级,车机重启进入uboot启动流程的时候去调用我写的驱动去初始化这个i2c,以此保证usb能正常读取到u盘内容,完成升级。所以,学习uboot的启动流程就很有必要

2020-12-31 17:10:50 631 1

原创 安卓车机Secure boot原理与实现

一、Secure Boot概述1、相关术语Secure boot:安全启动 efuse:一次性可编程熔丝技术。有些SoC 集成了一个efuse 电编程熔丝作为OTP(One-Time programmable,一次性可编程)存储器。efuse 内部数据只能从0 变成1,不能从1 变成0,所以只能写入一次。 CA:Certificate authority,证书颁发机构。 非对称加密算法:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。可用于加密交换数据或者数字签名。常见的非对称加密算法:

2020-11-27 14:46:37 5074 2

原创 SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析

一、引言上一篇博客大概介绍了MMC子系统和SDIO相关知识及架构,这一篇博客则大致分析安卓的WLAN架构及上层如何调用WLAN驱动的流程。虽然我工作的开发环境是安卓系统,但由于我不是专业的安卓应用/框架开发工程师,所以对安卓层的一些代码并不是特别熟悉,只能大致梳理流程,不专业的地方请谅解。本文部分内容摘抄自网络,若有侵权,请联系删除。二、安卓WLAN架构1、应用框架(Application framework)在应用程序框架级别是应用程序代码,它使用各种android.net..

2020-11-26 18:04:46 3592 1

原创 SDIO_WiFi驱动学习之SDIO架构介绍及源码分析

一、引言因为WiFi驱动比较复杂,所以WiFi驱动的博客将分为两篇来写。本篇博客主要介绍Linux下的SDIO架构及源码分析。二、SDIO WiFiSDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。对于SDIO接口的WiFi,首先,它是一个SDIO的卡设备,然后具备了WiFi的功能。所

2020-11-24 15:49:22 6400

原创 Linux安全机制之Selinux

一、引言1.1、什么是SelinuxSelinux是一种MAC(强制访问控制)安全机制,是对传统DAC(直接访问控制)机制的加强,而非替换,定义传统进程对文件对象的访问权限,如果不满足则无法执行,不管当前是什么用户。Selinux是一种MAC(强制访问控制)安全机制,是对传统DAC(直接访问控制)机制的加强,而非替换,定义传统进程对文件对象的访问权限,如果不满足则无法执行,不管当前是什么用户。本文下面讲的类似内容,有安卓源码的小伙伴可以到类似目录(android/device/softwinne

2020-11-20 10:54:58 3877

原创 安卓平台下的GPS架构介绍及驱动移植记录

一、前言我的工作是关于汽车车机BSP部分。汽车车机,其实基本和人们日常所用的手机一样,也是安卓平台的。所谓安卓,就是一层安卓服务包裹着Linux内核所形成的操作系统。BSP组,主要工作内容就是负责soc的Linux系统部分的驱动移植、调试,及BUG解决。从毕业到现在,工作也有大半年了。跟着前辈学习GPS模块的移植、调试,和BUG解决也有差不多两个月了。心里想着,是时候写一篇关于GPS驱动移植学习的总结和笔记了。于是今天,我尝试着动手开始梳理这两个月来的所学所知。二、U-blox m8l导航模

2020-11-09 15:27:40 7941 13

原创 GPS数据包相关笔记

一、GPS数据包类型 GPGSV:可见卫星信息 GPGLL:地理定位信息 GPRMC:推荐最小定位信息 GPVTG:地面速度信息 GPGGA:GPS定位信息 GPGSA:当前卫星信息二、数据包格式1、GPRMC Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息。 标准格式:$GPRMC,<1>,<2&...

2020-11-05 17:23:30 3236

原创 Linux驱动开发之工作队列

一、什么是工作队列 工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。二、源码分析struct xx_test{ int irq; unsigned char gpio; struct work_struct work; struct workqueue_struct *changan_mf...

2020-11-02 15:20:07 1179

原创 Linux软件编程之I/O模型与多路复用

一、前言 工作大半年了,就在昨天,一个朋友突然说起多路复用,于是懵了。虽然还大概记得一些东西,比如select,比如epoll等。但要我清晰地解释多路复用是啥,我却怎么也开不了口。显然,对于之前学习过的知识,我已经要忘得差不多了。 果然,知识要时常温故,才能不忘记。于是,才有了写这篇博客的想法。 为了不钓大家胃口,我先在这里把多路复用的概念简要跟大家提一下,看完之后若有不懂,再继续往下看。 以阻塞I/O举例,我们知道,常规的阻塞I/O模型只能阻...

2020-10-29 14:19:40 194

原创 git 常用命令

查看git仓库状态:git status提交代码流程:1、git status 查询状态,找到修改需要提交的文件2、git add your_file 将你的文件添加进入提交名单3、git commit 提交4、git review -c 提交到山水服务器上5、登陆grrit 申请评审,your->你的提交->add reviewer从远程仓库更新代码:git pull查看提交历史:git log查看某次提交详细内容:git show 单号还原仓库到上次.....

2020-10-28 15:53:30 199 1

原创 Linux驱动框架之i2c驱动框架解析

一、引言 本文会通过简要的文字描述和源码分析,为大家分析梳理出Linux下的I2C驱动架构。 不喜欢看文字描述的,可以直接跳过去看源码分析(文本所有代码都是经过删减的,所以不要纠结和源代码有出入的地方)。二、I2C总线 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。 它只需要两根线(时钟线和双向数据线)即可在连接于总线上的器件之间传送信息。三、Linux下的I2C驱动开发思路 目前,在Linux下开...

2020-10-26 10:53:42 2387 1

原创 C语言学习之二级指针与指针数组的关系

一、引言 指针,对于C语言学习者,可能是最困难的知识点了。 因为指针与内存有关,所以理解起来颇为晦涩难明,想要学好指针,还是要将基础知识巩固,通过数形结合的方式理解学习指针。二、基础知识 指针:在C语言中,指针是一种变量,在64位机中占8个字节 一级指针:存储普通变量的地址的指针 二级指针:存储一级指针地址的指针 数组:包含给定类型的一些对象,并将这些对象依次存储在连续的内存空间中。 一维数组:相对于多维数组,只有一维,用数学的思维,可以...

2020-10-19 15:22:05 1744 2

原创 Linux驱动框架之v4l2视频驱动框架解析

一、简介 v4l2是专门为linux设备设计的一套视频框架,其主体框架在linux内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备以及移动端、个人电脑设备上面,市面上的编码产品类如:SDV、手机、IPC、行车记录仪都会用到这个框架来进行视频采集。二、V4l2框架的结构 v4l2的核心源码位于linux/drivers/media/v4l2-core。2.1、相关对象 v4l2驱动框架主要的对象有vi...

2020-10-19 14:36:38 4958

原创 Linux内核驱动内存分配之kmalloc函数分析

一、kmalloc函数的原型及参数介绍 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 参数: kmalloc的第一个参数是要分配的块的大小,第二个参数是分配标志。 size参数: 用户空间malloc是基于堆内存分配,内核负责管理系统物理内存,物理内存只能按页面进行分配, 因此,kmalloc是基于页进行分配。另外需要注意的一点是内核只能分配一些预定义的、固定大

2020-10-15 14:18:28 1164

原创 U-BOOT学习之u-boot.lds简要分析(带源码)

对于不少新人朋友来说,可能想问,u-boot.lds这个文件是干什么的?其实,它的作用很简单,那就是:定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。接下来,我们根据具体的源码进行简要的分析。OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")//指定输出可执行文件是elf格式,32位arm指令,小端储存OUTPUT_ARCH(arm)//指定输出可执行文件所运行平台为arm

2020-08-24 11:25:26 482

原创 Python学习之路(二):利用PyQt5、PyAudio、wave制作一款简易录音机和播放器

直接上代码,代码中有比较详细的注释。如果有不懂的,欢迎评论留言。audio.pyimport wavefrom os import path, system, popenfrom time import strftime, localtime, timefrom sys import argv, exitfrom pyaudio import PyAudio, paInt16from PyQt5.QtWidgets import QMainWindow, QApplication,

2020-07-29 21:21:23 2051

原创 Python学习之路(一):python环境安装

什么是python?可能对于很多朋友来说,经常会在刷抖音,浏览网页时看到学习python的广告。 那么,到底什么是python呢?百度百科定义:“Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。” 其实,对于小白,这段定义尽管已经解释得十分准确,但理解起来还是十分抽象的。因此,小白学习者也...

2020-06-08 23:21:33 274

空空如也

空空如也

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

TA关注的人

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