自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Eliot_shao的专栏

勤于思考让我走的更远!

  • 博客(215)
  • 资源 (16)
  • 收藏
  • 关注

原创 Concurrency in the Kernel(内核中的并发处理)

原文来自:《Essential Linux Device Drivers》 chapter2 With the arrival of multicore laptops, Symmetric Multi Processing (SMP) is no longer confined to the realm of hi-tech users. SMP and kernel preemption ...

2018-12-18 18:25:16 751

翻译 Linux内核组件——completion接口(一种内核线程的同步机制)

下面的内容翻译来源:《Essential Linux Device Drivers》 chapter3 Completion Interface。Many parts of the kernel initiate certain activities as separate execution threads and then wait for them to complete. The co...

2018-12-17 16:26:47 483

原创 Linux内核事件通知链(notifier chain)

详细原理参考:https://blog.csdn.net/wuhzossibility/article/details/8079025 Linux内核基础--事件通知链(notifier chain)简介:内核许多子系统之间关联紧密,因此在一个子系统发生或者检测到的事件信息很可能对其他子系统来说也是有价值的。为了满足其他子系统对这些事件信息的需求,即在某个子系统内发生或检测到事件时,其...

2018-12-13 16:42:03 1997

原创 Device driver development manual simplified version

Description:linux device driver model is regular ,Stand in the angle of the device driver users,just makes nodes in /dev(udev) or /sys(sysfs) .so just operate file system to build a bridge from user space file

2015-03-26 10:53:17 1321

原创 The Linux device model

一提到kobject很多人就不想看了,千篇一律。但是使用这个结构,我们可以建立设备驱动模型,所以必须明白。开发驱动程序对我来说,也就是建几个目录,创几个属性文件。内核的设备驱动架构已经打好了,调几个函数来用就可以了。在sysfs文件系统里,kobject对应目录,属性(attribute)对应文件。

2015-03-19 17:05:21 1627 3

原创 编译原理-链接实例分析

If the section has a specific VMA address, then this is used as the LMA address as well.

2023-01-16 14:41:01 1161 1

原创 链接脚本和可执行文件

1,可执行程序都是由数据段,代码段,bss段等组成。2,每个段对应有两个地址:虚拟地址(运行地址),加载地址(存储地址),

2022-11-06 17:28:46 1384

转载 从上帝视角看进程调度

中断驱动OS这个死循环的运行。

2022-06-11 08:51:00 334

转载 AUTOSAR架构的CAN通讯

原文地址:AUTOSAR架构的CAN通讯 (qq.com)https://mp.weixin.qq.com/s/C_C9pX87CpdZFTFmhajoIA1.AUTOSAR概念关于AUTOSAR概念之类的内容不在此展开,权威资料请参见AUTOSAR官网。引自:AUTOSARAUTOSAR(AUTomotiveOpenSystemARchitecture) is a worldwide development partnership of vehicle manufacturer...

2022-05-24 16:17:12 1453 1

转载 CAN协议标准及相关内容

原文地址:CAN协议标准及相关内容 (qq.com)https://mp.weixin.qq.com/s/dC5GPowxvuTGr-La33auRwCAN协议标准及相关内容当要深入CAN通讯功能时,就必须得介绍下CAN2.0协议标准和ISO 11898标准。为什么呢?因为只有通过这些协议标准才能掌握CAN通讯的基石,更好地了解CAN通讯功能的硬件与软件。当去了解这些协议标准时,发现CAN通讯框架是基于OSI参考模型来设计。那么什么是OSI参考模型?它有什么作用?接下来从OSI参考模型开始了解。

2022-05-24 16:12:58 2887

转载 ARP协议及抓包分析

ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射,为上层将底层的物理地址差异屏蔽起来,这样上层的因特网协议就可以灵活地使用IP地址进行通信了。ARP协议的基本功能是使用目标主机的IP地址,查询其对应的MAC地址,以保证底层链路上数据包通信的进行。为了实现在网络接口物理地址与IP地址间的转换,ARP协议中引入了ARP缓存表的概念。ARP缓存表中记录了一条一条的<IP地址,MAC地址>对,他们是主机最近运行获得的关于周围其他主机的IP地址到物理地址的绑定,当需要发送I

2022-03-14 13:16:01 4878

转载 以太网帧结构

下图是一张以太网帧的结构图。这个结构图很清晰地描述了整个以太网帧每个部分组成。对我们来说能抓到的或者能看到的报文帧,基本上是在目标MAC地址到IP数据包。上图中的前导码和帧开始符主要做一些底层的数据传输和编码流的二进制流,它们本身不会被网卡捕获,网卡一般抓包的时候就已经将前导码跟帧开始符解析掉了。还有帧后面的校验码,其主要是通过CRC校验判断帧是否有效或者发生篡改或错误,当网卡能收到数据帧并通过抓包工具可以抓到的,就说明该帧没有问题,是有效的,当帧是有效的后,就说明CRC就已

2022-03-14 10:49:37 9036

转载 如何看懂UDS诊断报文

UDS介绍UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现。UDS协议的应用层定义是ISO 14229-1,目前大部分汽车厂商均采用UDS on CAN的诊断协议。UDS本质上是一系列的服务,共包含6大类26种。每种服务都有自己独立的ID,即SID。SID

2022-02-12 13:47:25 6743 1

原创 汽车CAN总线学习

2022-02-11 15:29:50 409

原创 ADAS 基础知识

序号 术语 英文全称 中文全称1 LDW Lane Departure Warning 车道偏离报警2 FCW Front Collision Warning 前碰撞预警3 PCW People Collision Warning 行人碰撞预警4 ICM Instrument Cluster Module 组合仪表5 BCM Body Control Module 车身控制器6 CGW Central Gateway 中央网关7 EPS/EHPS Electronic Power Steeri

2022-01-28 11:02:16 1164

原创 free rtos 任务切换的理解

rtos 系统运行的几个要素:本质上,系统的运行依靠sys tick/PendSV 中断 驱动 任务管理程序完成任务切换执行不同任务程序。除sys tick/PendSV 中断 以外的中断程序执行。以及任务任务运行过程引发的任务阻塞,挂起,恢复。所以占有cpu的优先级:高优先级中断>sys tick/PendSV 中断>高优先级的任务>低优先级任务,cpu在各个代码跳来跳去。如图:引起任务阻塞的api:Tasks can enter the Blocked state...

2021-11-12 16:25:47 560

转载 FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪任务,任务切换的代码通常都是精心设计的,甚至会用到汇编指令或者与硬件相关的特性,比如Cortex-M3的CLZ指令。因此任务切换的大部分代码是由硬件移植层提供的,不同的平台,实现发方法也可能不同,这篇文章以Cortex-M3为例,讲述FreeRTOS任务切换的过程。FreeRTOS有两种方法触发任务切换...

2021-11-10 16:36:26 1070

转载 Linux 进程控制——等待队列详解

一、什么是睡眠 对于一个进程"睡眠"意味着什么? 当一个进程被置为睡眠, 它被标识为处于一个特殊的状态并且从调度器的运行队列中去除. 直到发生某些事情改变了那个状态, 这个进程将不被在任何 CPU 上调度, 并且, 因此, 将不会运行. 一个睡着的进程已被搁置到系统的一边, 等待以后发生事件. LDD3说得很玄乎,睡眠是“自愿调度”,其实就是将当前进程的状态设置为 TASK_INTERRUPTIBLE 等状态,然后schedule() 让出CPU1,让调度器重新选择一个进程来执行。...

2021-09-10 09:36:04 343

原创 往recovery添加应用程序

背景项目有个心跳功能,在正常模式下5s一个心跳,超过30s未收到心跳系统强制重启。但是进入recovery升级模式后,没有心跳功能,造成升级失败,需要添加心跳的应用程序。添加过程如下。打开串口logRecovery的日志是调试的关键,默认会在cache/recovery下面看到,但是里面是空的,没查到原因。遂把串口log等级跳到7,也可以看到日志。修改启动参数(dts里面,dts编译下载后会放在一个固定位置,uboot和kernel都可以访问):bootargs = "earlyco..

2021-07-28 10:21:25 620

原创 FreeRTOS的心跳

2021-05-18 09:05:03 577

原创 Linux系统的实时性测试-cyclictest

测试环境:# uname -r4.14.139 没有打开CONFIG_PREEMPT_RT10个内存读写任务,CPU使用了90%,内存使用率80%左右。测试工具及指令:cyclictest -t 5 -p 90 -n -i 1000 -l 10000运行结果:结论:Linux4.14.139 没有打开CONFIG_PREEMPT_RT情况下,系统进程延时最大2.3ms左右。...

2021-04-29 10:32:44 844

原创 FreeRTOS 中断使用信号量和任务同步失败

问题:在os的中断中使用信号量,和另外一个task进行同步,一段时间后会出现信号量获取失败,任务一直处于就绪状态但是无法继续运行。其他任务不受影响。测试方法:使用调试器:在isr中全局变量int_count计数和task中的全局变量int_count1基数对比,发现int_count1在运行一段时间后会停止,isr中int_count计数还在继续。ISR:int32_t CAN_IRQnCallBack(uint32_t event, uint32_t wparam, uint32_t lpa

2021-04-23 17:43:55 3459 1

转载 eMMC 原理 3 :分区管理

1. Partitions OvervieweMMC 标准中,将内部的 Flash Memory 划分为 4 类区域,最多可以支持 8 个硬件分区,如下图所示:1.1 概述一般情况下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都为 4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP) 则在出厂时默认不被支持,即不存在这些分区,需要用户主动使能,并配置其所要使用的 GPP 的容量大小,GPP 的

2020-12-17 11:19:20 611

转载 (三)Linux进程调度器-进程切换

原文转自链接1. 概述进程切换:内核将CPU上正在运行的进程挂起,选择下一个进程来运行。ARM架构中,CPU上一次只能运行一个任务,内核需要为任务分配运行时间来进行调度,以便同时能处理多个任务请求。如下图所示:当进行任务切换的时候,思考下两个问题: 怎样通过抢占来实现进程的切换? 当进程切换的时候,到底切换的什么,是怎么实现的? 这两个问题,也是本文探讨的主题了。2. 抢占2.1 用户抢占2.1.1 抢占触发点 可以触发抢占的情况很多,比如进程的时.

2020-11-30 10:23:49 323

原创 Select/poll 原理-中断

Select/poll 原理-中断Linux应用程序如果想判断一个设备是否可读可写,可以通过轮询的方式(io操作三种方式轮询,中断,dma),每隔一段时间去访问该设备 判断该设备是否可读可写,如果不行就返回,过一段时间再判断一次。也可以阻塞时的等待,此时进程就会睡眠。那么当有100个任务想要读写一个设备的时候,如果创建100个进程去阻塞或者轮询这个设备文件也挺夸张的。所以引入了select/poll机制(多路复用机制),只需要创建一个任务,将100个连接的句柄收集起来,传给操作系统,..

2020-11-03 17:10:51 1136

转载 linux系统删除空间后系统分区空间仍不释放问题

总结的原因:1、删除文件文件后没有清空回收站;2、删除的文件不在系统分区,在其他分区上;3、删除的文件被保留在了/tmp分区下,而/tmp分区不是独立的分区,是在根分区/的基础上划分出来的分区;4、删除文件的进程delete一直在后台运行,仍然无法对该文件进行读写常用指令总结:du -h --max-depth=1   查看目录深度为1的目录或文件所占空间大小lsof |grep deleted      获得一个已经被删除但是仍然被应用程序占用的文件列表df ...

2020-08-26 08:58:41 594

原创 android 双触摸屏(touchscreen)实现--kernel driver

背景本文主要实现一个Android系统,调试两个相同的TP设备,使用同一个TP的驱动。最终实现结果,两个TP都可以控制Android,正常报点。实现过程:硬件连接介绍:软件实现:在dtsi文件添加两个TP设备(名字不一样):LA.UM.5.6\kernel\msm-3.18\arch\arm\boot\dts\qcom\msm8937-pmi8937...

2020-07-28 17:04:58 6514 4

转载 ramdisk initrd ramfs initramfs区别与联系

原文地址:https://www.cnblogs.com/smartjourneys/articles/9515498.html问题:当Linux内核启动时,必须找到并执行第一个用户程序,通常是init。用户程序存放在文件系统,故Linux必须找到并挂载第一个文件系统。通常,可用的文件系统都列在/etc/fstab,所以mount可以找到它们。但是/etc/fstab本身存在与文件系统中。因此,这类似鸡生蛋蛋生鸡的问题。为解决该问题,内核开发者建立了内核命令列表选项root=,用来制定ro.

2020-06-05 09:38:12 672

转载 How to use initramfs.

原文地址:http://www.landley.net/writing/rootfs-howto.html#footnote1By: Rob LandleyLast time, we covered why initramfs was created: because it saves memory, gives the user more control over the boot process, and simplifies the kernel's internal implement.

2020-06-04 15:44:32 292 1

转载 initramfs和initrd的异同

转载地址:https://blog.csdn.net/z1026544682/article/details/88364725一、简介(1) initrd 在早期的linux系统中,一般只有硬盘或者软盘被用来作为linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的嵌入式系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,u-disk等等。因此把这些设备的驱动代码全部编译到内核中显然就不是很方便。 为了解决这一矛盾,于是出现了基于ram..

2020-06-04 15:42:12 745

转载 Driving E-ink display-epd协议(不是edp)

Digital signalsThe screen already has a few chips mounted on glass alongside the edges of the panel. These are the source and gate drivers, which allow us to address individual pixels of the scre...

2020-04-17 09:00:26 1711

原创 学写驱动抽象层

驱动的抽象层其实类似一个管理层,管理多种资源,使资源之间更加有序,高效的工作。使软件的复用性和鲁棒性更强。其核心思想是面向对象的编程思想,创建抽象的概念,增加抽象层之间的逻辑给更高层,屏蔽底层的“杂乱无章”。理清芯片之间的关系和逻辑硬件上8541e通过mipi和i2c连接到9288,9288通过gmsl信号线连接到96705编串器上,96705和0144是通过dvp接口连接,包含...

2020-04-11 10:47:41 1072

原创 gmsl摄像头Android平台调试思路

配置max9288的i2c通信,可读取id 配置max96705的i2c通信,可读取id 配置ar0144的i2c通信,可读取id 以上三步i2c如果不同请排查硬件配置,测量电源是否正常,i2c地址是否配对等问题。 配置ar0144为color bar模式,测量并口信号是否正常,可以测量波形尽量频率等数据,计算和分辨率是否吻合。 完成第四步,配置96705和9288,测量9288的csi...

2020-04-09 11:08:36 2945

原创 Mipi-csi2 初探

Overview of CSI-2The CSI-2 Specification defines standard data transmission and control interfaces between transmitter and receiver. Two high-speed serial data transmission interface options are de...

2020-04-07 09:09:34 1061 1

原创 DVP协议

What is a digital video port?Camera的并口传输方式很多地方叫做dvp接口,但是并没有统一的标准。As far as I know, there is no DVP spec but the pinout seems to be something of a de facto standard, even though part manufacturers ...

2020-04-07 08:55:22 7626 2

原创 LINUX CMA 初探

一、什么是CMACMA,Contiguous Memory Allocator,是内存管理子系统中的一个模块,负责物理地址连续的内存分配。一般系统会在启动过程中,从整个memory中配置一段连续内存用于CMA,然后内核其他的模块可以通过CMA的接口API进行连续内存的分配。CMA的核心并不是设计精巧的算法来管理地址连续的内存块,实际上它的底层还是依赖内核伙伴系统这样的内存管理机制,或者说CMA...

2020-01-21 14:51:40 1181

转载 驱动模块传参

#define module_param(name, type, perm) \  module_param_named(name, name, type, perm)name:参数的名字type:参数类型perm:权限---对参数的操作权限  0 文件系统不可见--只能当前模块使用该参数  0444 world-readable 所有用户可读  0644 root可写...

2020-01-20 15:46:19 354

转载 为什么linux的可见物理内存比实际内存要小

最近在做系统剪裁,发现可见物理内存为103MB(128M),其中有24M内存消失了,表示对这一现象很是奇怪,下面讲述了我找这24MB的心路历程。目标板子配置:板子为ARM架构、板子上有256MB内存,内核版本为4.9.54Linux version 4.9.54 ([email protected]) (gcc version 6.3.1 20170109 (Lin...

2020-01-10 08:44:37 1755 1

原创 Linux spi master dev驱动及测试例程

spidev设备: spidev@0{ compatible = "xxx,spidev"; reg = <0>; spi-max-frequency = <1000000>; spi-cpha; spi-cpol; };驱动:kernel/linux-4.14/drivers/spi/spidev.c(由...

2019-12-03 08:31:31 1591

转载 Linux电源管理-Runtime PM

前言1. 什么是Runtime PM?Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。也就是"各人自扫门前雪"。2. 为什么需要Runtime PM?system suspend需要很长时间完成,其中还可能出现失败。比如freeze t...

2019-11-18 08:59:58 1187

00008889-RTL9000AA_AN-VB_Datasheet_DRAFT_V1.4_136293.pdf

从代理FAE 处获取的00008889-RTL9000AA_AN-VB_Datasheet_DRAFT_V1.4_136293.pdf datasheet 仅供学习参考。仅供学习参考。仅供学习参考。仅供学习参考。仅供学习参考

2020-08-27

AP6212最新驱动源码 bcmdhd.1.579.77.41.x.7z

AP6212最新驱动源码 bcmdhd.1.579.77.41.x.7z 从FAe获得,亲测移植可用,有需要的请下载,仅限学习使用。

2020-05-07

adv7280-datasheet.pdf

adv7280-datasheet.pdf FAE提供的官方规格书 仅供参考学习使用。adv7280-datasheet.pdf

2020-04-23

RN6752M_DSv0.3.pdf

RN6752M_DSv0.3.pdf RN6752M_DSv0.3.pdf 规格书规格书,FAE官方提供的规格书,仅供参考学习使用。

2020-04-23

Advance Information AR0144AT Developer Guide1/4−Inch CMOS Digital Image Sensor

ar0144开发手册(不包含register),含有dvp协议介绍,写的较为清晰可以参考,Advance Information AR0144AT Developer Guide1/4−Inch CMOS Digital Image Sensor

2020-04-07

cc.bat Go安装交叉编译器

cc.bat Go安装交叉编译器,放在C;\go\src下面执行

2014-09-16

mingw-get-setup.exe

交叉编译器,在windows下面编译arm和linux程序

2014-09-16

liteidex23.windows.zip

liteidex23.windows.zip, windows版本的GOlang开发IDE,支持开发环境的文本配置,交叉编译。支持ARM。不过编译器需要另行安装。

2014-09-16

go1.3.windows-386.msi

go1.3.windows-386.msi Go语言windows安装包,GO语言WINDOWs编译器。

2014-09-16

Linux2_6内核设备模型分析_李正平

内核设备模型 分析的博士论文,比较规范。

2013-08-02

l3g4200-linux

l3g4200-linux 驱动程序,可移植、

2013-08-02

3DDisplay_USCICT_SIGGRAPH2007[1]

3DDisplay技术,通过对实体的三维数据竞相整合,以动态的方式扫描投影,显示三维效果。

2013-08-02

linux kernel map 内核结构图

linux kernel map 内核结构图 一张大图,图上有资源出处,很不错的网站。

2012-12-17

Device Driver Architecture

Device Driver Architecture,讲设备驱动体系结构,是英文版的。

2012-12-17

PID控制原理及编程方法

详细解释了PID控制原理及编程方法,较为正式的资料。

2012-10-14

makefile解读

该文档详细描述了makefile的工作原理,比较全面,可以参考!

2012-10-14

空空如也

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

TA关注的人

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