自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Peter的专栏

嵌入式人工智能,物联网,边缘计算,自动驾驶,机器人等专业技术分享和交流平台。

  • 博客(869)
  • 资源 (6)
  • 收藏
  • 关注

原创 ALSA子系统 | ALSA Buffer的更新

PCM 数据管理可以说是 ALSA 系统中最核心的部分。不管是录音还是播放,都要用到buffer管理数据。播放:copy_from_user 把用户态的音频数据拷贝到 buffer 中,启动 dma 设备把音频数据从 buffer 传送到 I2S tx FIFO。录音:启动 dma 设备把音频数据从 I2S rx FIFO 传送到 buffer, copy_to_user 把 buffer 中音频...

2022-11-28 08:08:28 1031 3

原创 引导内存分配器

linux内存三大分配器:引导内存分配器,伙伴分配器,slab分配器一、引导内存分配器1.引导内存分配器的作用因为内核里面有很多内存结构体,不可能在静态编译阶段就静态初始化所有的这些内存结构体。另外,在系统启动过程中,系统启动后的物理内存分配器本身也需要初始化,如伙伴分配器,那么伙伴分配器如何获取内存来初始化自己呢 ?为了达到这个目标,我们先实现一个满足要求的但是可能效率不高的笨家伙,引导内存分配...

2022-11-23 08:08:27 447

原创 一文搞懂DMA

DMA 传输是由 CPU 发起的:CPU 会告诉 DMA 控制器,帮忙将 source 地方的数据搬到 dest 地方。CPU 发完指令之后,就不管了。具体怎么搬,何时搬,完全由 DMA 控制器决定。

2022-11-22 23:07:19 637

原创 mmap的系统调用

一、内存使用方法二、mmap的系统调用一、内存使用方法1.创建内存映射#include<sys/mman.h>void*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);mmap:进程创建匿名的内存映射,把内存的物理页映射到进程的虚拟地址空间。进程把文件映射到进程的虚拟地址空间,可以像访问内...

2022-11-21 08:08:47 1146

转载 一文搞懂 | eBPF的来龙去脉

1. BPF2. eBPF2.1 eBPF 介绍2.2 eBPF 架构(观测)2.3 eBPF 的限制2.4 eBPF 与内核模块对比3. 应用案例3.1 Linux 性能分析 60 秒 (BPF版本)3.2 **slab dentry 过大导致的网络抖动排查**3.3 生成火焰图3.3 排查网络调用来源4. 编写 BPF 程序4.1 BCC 版本 HelloWorld4.3 BPFTrace4....

2022-11-16 07:58:21 479 2

原创 Buddy 内存管理机制(下)

作者简介:伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。内存释放内存分配gfp_masknode 候选策略zone 候选策略zone fallback 策略lowmem reserve 机制order fallback 策略migrate type 候选策略migrate fallback 策略reclaim waterma...

2022-11-15 08:08:33 624

原创 Buddy 内存管理机制(上)

作者简介:伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。Buddy 简介内存是计算机系统中最重要的核心资源之一,Buddy 系统是 Linux 最底层的内存管理机制,它使用 Page 粒度来管理内存。通常情况下一个 Page 的大小为 4K,在 Buddy 系统中分配、释放、回收的最小单位都是 Page。上图是 Buddy ...

2022-11-14 08:08:16 241

原创 Linux内存管理:memblock

内存管理是操作系统内核中最复杂的部分之一, start_kernel函数在内核启动第一个init进程前初始化了所有的内核特性(包括那些依赖于不同架构的特性),你也许还记得引导时创立的临时页表,但复杂的内存管理部分还没有开始,当start_kernel函数被调用时,我们会看到初期内存管理到更复杂的内存管理数据结构和技术的转变,为了更好的理解内核的初始化过程,我们需要对这些技术有更清晰的理解,今天我们...

2022-11-11 08:08:42 417

转载 摄像头ov13850移植笔记

大家好,我是Peter,除了内核外,后面会持续增加驱动的内容。今天推荐一篇。0、环境soc:rk3568board:EVB1-DDR4-V10软件:Android 11Linux:4.19.232一、ov13850简介1. 产品参数品牌:Omnivision型号:CMK-OV13850接口:MIPI像素:1320WOV13850彩色图像传感器是一款低电压、高性能1/3.06...

2022-11-08 23:42:52 1400 1

转载 CFS线程调度机制分析

本文是对CFS调度的深入总结,推荐大家阅读。对进程管理还没入门的朋友可以先阅读以下系列,入门后再阅读此文效果更加!Linux 进程管理之CFS负载均衡六万字 | 深入理解Linux进程调度一、前言操作系统上运作着各种应用、服务来满足用户需求,这些应用、服务实现的功能,通常都会依托一个个具体的线程来完成。在2022年的今天,无论是手机用户还是平台厂商,都不会容忍一台手机的功能仅限于单一的通信功能。手...

2022-11-06 08:08:10 384

原创 分享一篇DMA原理好文

DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU...

2022-11-02 08:08:37 295

原创 人人极客专访 | 我和我们的操作系统

最早通过陈老师的分享认识了自成,没想到他也关注了【人人极客社区】,今天他给大家介绍一下xbook的昨天,今天和明天。我和我们的操作系统偶然的开始“大家好,我是小骨头!”这句话,是我B站视频的开头,我经常在上面上传关于BookOS的视频。10年前,我还在上初一,在一个边远的小镇上。那年,家里买了一台台式电脑,对游戏很感兴趣的我,偶然的机会,学到了游戏开发。然后再有一次偶然的机会学习到了操作系统开发,...

2022-10-26 08:08:28 1274

原创 ARM平台下独占访问指令LDREX和STREX的原理

作者简介:Roland_Sun 职业旅程:Engineer->Senior Engineer->QA Manager->Project Manager->Senior Staff Engineer为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁。为了实现所谓的互斥锁的概念,一般都需要所在平台提供支持。在计算机领域里,如果要...

2022-10-24 08:00:45 328

原创 Linux电源管理之 Suspend

作者简介:Loopers,码龄11年,喜欢研究内核基本原理suspend 代码入口state_store函数分析pm_suspend函数分析enter_state函数分析suspend_prepare 函数分析suspend_devices_and_enter 函数分析dpm_suspend_start 函数分析suspend_enter 函数分析我们知道Linux电源管理存在的几种方式,如何查看...

2022-10-17 08:18:33 1968 1

原创 Linux电源管理之 Power Domain

作者简介:JuoJuo6,码龄7年,从事芯片行业嵌入式软件开发工作,主要负责kernel网络子系统模块最近工作上接触到了kernel power domain framework,kernel文档对这块的解释不多,网上的参考资料也很少,废话不多说,梳理一下,也让自己加深一下印象。什么是power domain?电源域(power domain)可以理解为多个模块共用一个电源,比如usb、gpio在...

2022-10-12 08:18:13 1524

转载 超硬核|第 17 届 CLK 大会完整议程全公布

【人人极客社区】很荣幸作为支持媒体参与到第17届CLK大会。自 2006 年以来,在国内 Linux 技术爱好者和行业公司的鼎力支持下,中国 Linux 内核开发者大会已走过 16 个年头,是中国 Linux 内核领域最具影响力的峰会之一。今年的中国内核开发者大会依然秉承历届理念,以“自由、协作、创新”为理念,以推动和普及开源技术为使命。旨在促进国内 Linux 内核开发爱好者的相互学习与交流,促...

2022-10-11 08:23:54 177

原创 Linux电源管理之Runtime PM

作者简介:Loopers,码龄11年,喜欢研究内核基本原理前言什么是Runtime PM?Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。也就是"各人自扫门前雪"。为什么需要Runtime PM?system suspend需要很长时间完成,其中还可能出现失败。比如f...

2022-10-09 08:18:22 774

转载 Linux 电源管理子系统

Linux 在消费电子领域的应用已经相当普遍,而对于消费电子产品而言,省电是一个重要的议题。Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对系统待机的支持和每个设备的运行时(Runtime)电源管理,可以说它和系统中的每个设备驱动都息息相关。对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图呈现了 Lin...

2022-10-03 12:42:01 759

转载 Linux 性能分析工具汇总

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。本文档主要是结合Linux 大牛,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性...

2022-09-29 08:40:55 374

原创 链接加载原理及ELF文件格式

作者简介:伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。原理概述为什么要研究链接和加载?写一个小的main函数用户态程序,或者是一个小的内核态驱动ko,都非常简单。但是这一切都是在gcc和linux内核的封装之上,你只是实现了别人提供的一个接口,至于程序怎样启动、怎样运行、怎样实现这些机制你都一无所知。接着你会对程序出现的一...

2022-09-23 08:18:20 402

转载 万字整理 | 深入理解Linux电源管理

作者简介:程磊,在某手机公司担任系统开发工程师,最大的爱好是钻研Linux内核基本原理。目录:一、电源管理框架 1.1 电源状态管理 1.2 省电管理 1.3 电源管理质量二、睡眠与休眠 2.1 冻结进程 2.2 睡眠流程 2.3 休眠流程 2.4 自动睡眠三、关机与重启 3.1 用户空间处理 3.2 内核处...

2022-09-22 08:40:40 1676 2

原创 为什么mmap之后访问地址仍然发生了缺页异常?

作者简介:viho he,ARM64专家,现供职于某芯片公司,专注于Linux内核、BSP、ARM64虚拟化以及与ARM64 SoC相关的各种底软技术问题简述在笔者的开发平台上,应用程序使用ION申请cma内存,并用mmap映射到用户地址空间去做写操作。重点代码摘要如下:客户希望提高node->var = some_value;这里的访问效率(实际代码要复杂些,是申请了一个大数组并往里循环读...

2022-09-21 08:18:03 344

转载 FreeRTOS 任务简介

一、FreeRTOS用途FreeRTOS一般被用于硬件设计上RAM大小存在一定限制(成本、资源、性能功耗比等)的平台之中,它是目前运用的比较多的实时操作系统之一。选用FreeRTOS作为项目应用一般从以下几方面考虑:实时性(时间约束):与多数的RTOS一样,每个时钟节拍,就绪的高优先级任务会抢占CPU(FreeRTOS是一个实时调度器,项目在此内核基础上构建满足硬实时的应用)。确定性(可预测):规...

2022-09-19 08:18:21 1086

原创 FreeRTOS学习笔记 | 基础知识体系梳理

我发现学习 RTOS 是学习 Linux 内核的好方法。大有弯道超车的可能。1. 任务堆栈1.1 任务栈大小确定1.2 栈溢出检测机制2. 任务状态3. 任务优先级3.1任务优先级说明3.2 任务优先级分配方案3.3 任务优先级与终端优先级的区别4. 任务调度4.1 调度器5. 临界区、锁与系统时间5.1 临界区与开关中断5.2 锁5.3 FreeRTOS 系统时钟节拍和时间管理一、 单任务系统(...

2022-09-18 16:51:15 839

原创 一文搞懂显示技术的底层框架

1. DPU与GPU的耦合是历史产物,完全可以独立出来2. DPU的原型设计2.1【DPU的四大组成部分】2.2【KSM与DPU】3. DPU的最新设计3.1【Source Suface Pipes or Overlays】3.2【Blender】3.3【Destination surface post-processor】3.4【Display Interface】4. 总结PC上DPU是嵌入在...

2022-09-09 08:18:32 2790 4

原创 这是我平时看的技术视频总结!

现在网上的学习资料是真的丰富,我上大学时除了图书馆借书看之外很难看到自己想看的知识,羡慕现在的大学生可以在网上搜到海量的学习资料,甚至可以去听清华北大等名校教授的课程,这对自己的职业发展是非常有好处的。我记得刚毕业的时候做嵌入式linux开发,市面上只能看韦东山和宋宝华等老师的书籍,遇到不理解的知识也很难找到人一起讨论,更不要说现在微信群里小伙伴们的学习。现在只要你想学习某方面的知识,除了各种网站...

2022-09-07 08:18:39 240

原创 万字整理 | systrace的实现

作者简介:伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享,个人微博CSDN pwl999。上图基本就能说清systrace的整个框架:1、systrace调用atrace抓取目标机的trace数据;2、systrace把trace数据和'prefix.html'、'suffix.html'、'systrace_trace_vi...

2022-09-05 08:23:30 551

原创 内存管理专栏 | 之内存管理架构

一、内存管理架构二、虚拟地址空间布局架构三、物理内存体系架构四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、内存映射原理分析一、内存管理架构内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如下所示:1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用...

2022-09-02 08:18:15 661 3

原创 文件系统专栏 | 之文件系统挂载

ext4文件系统挂载大家可以使用以下命令挂载一个u盘到 /mnt目录下:mount-text4/dev/sda1/mnt其中mount这个应用程序就是使用了mount函数进行系统调用,其系统调用为:SYSCALL_DEFINE5(mount,char__user*,dev_name,char__user*,dir_name,char__user*,type,...

2022-08-31 08:18:56 806

转载 芯片制作 | 和我一起来卷芯片

如果想把程序员当作长期职业,那我们就需要考虑:在哪些方面的努力是更有效率的,最终大家一致同意:搞好基础知识才是王道!任你技术风向怎么变,底层的理论依然还是操作系统、编译原理、计算机网络等东西。关注我公号的朋友大体了解,平时主要输出操作系统相关的内容,随着网络上操作系统学习资源的丰富,越来越多的人了解操作系统,但芯片和操作系统结合的内容缺很少,这也是我经常提及的软硬件融合是核心竞争力的说法。如果你和...

2022-08-28 20:14:50 285

原创 文件系统专栏 | 之文件系统架构

文件系统层次分析由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层用户层:最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。VFS层:我们知道Linux分为用户态和内核态,用户态请求硬件资源需要调用System Call通过内核态去实现。用户的这些文件相关操作都有对应的System Call函数接口,接口调用 VFS...

2022-08-26 08:18:42 783

原创 内核启动时为什么要做线性映射?

作者简介:周文嘉: 曾服务于ARM、阿里系子公司、HTC等公司。10年以上工作经验,主要从事系统软件开发,涵盖:系统库开发、指令集优化、Linux内核开发等。累计为某些开源社贡献过一定数量的patch。在 Linux 内核启动之后,对于 32 位的系统来说,他会把 0 ~ 896M 这部分低端内存(low memory)都做线性映射,不管这部分内存是否需要用到。对于 64 位的系统,内核会把所有的...

2022-08-25 08:18:29 446

转载 一个打通软硬件的极好资源

大家好,我是 Peter!今天宣布一个好消息。很荣幸和大佬们一起合写了本书《计算机系统开发与优化实战》,最近就要上市了。本书首先介绍通用处理器的架构,以及汇编和编译的技术;然后讲解 Linux 内存管理、 Linux 进程管理,以及 GDB、 trace、 eBPF、 SystemTap 等 Linux 系统开发工具;接着通过视频编解码主流技术和 NVIDIA 计算平台 CUDA 等讨论人工智能技...

2022-08-22 08:32:10 158

原创 万字整理 | 深入理解工作队列

伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享,个人微博CSDN pwl999,欢迎大家关注!1.1 worker_pool1.1.1 normal worker_pool1.1.2 unbound worker_pool1.2 worker1.2.1 worker处理work1.2.2 worker_pool动态管理work...

2022-08-21 21:40:10 1053

转载 一文搞懂 | ARM微架构的变化

一、引言伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构。从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76、Cortex-A77、Cortex-A78经典CPU核心架构。基于这几代CPU架构,芯片设计厂商也设计了多款性能优秀的处理器产品。本文从A76微架构开始学习,通过对比每一代的变化,让读者了解处理器微架构关键知识。下表给出...

2022-08-19 08:18:32 889

原创 万字整理 | 深入理解Linux时间子系统

作者简介:程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。一、时间概念解析1.1 时间使用的需求1.2 时间体系的要素1.3 时间的表示维度1.4 时钟与走时1.5 时间需求之间的关系二、时间子系统的硬件基础2.1 时钟硬件类型2.2 x86平台上的时钟2.3 ARM平台上的时钟三. 时间子系统的软件架构3.1 系统时钟的设计3.2 系统时钟的实现3.3 动态tick与定...

2022-08-15 08:18:40 692

转载 Linux内核性能剖析的方法学和主要工具

计算机科学的先驱Donald Knuth(高德纳)曾经说过:“过早的优化是万恶之源”,更详细的原文如下:“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should no...

2022-08-11 08:48:49 312

转载 六万字 | 深入理解Linux进程调度

作者简介:程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。目录一、进程调度概览1.1 什么是调度1.2 为什么要调度1.3 为什么能调度1.4 何时调度1.5 如何调度1.6 调度均衡1.7 调度器评价1.8 调度器历史二、进程调度框架2.1 调度队列2.2 进程唤醒2.3 调度时机2.4 调度流程2.5 调度算法2.6 进程优先级2.7 进程切...

2022-08-09 08:23:04 463

原创 万字整理 | 深入理解编译系统

作者简介:程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。一、编译系统的形成与发展1.1 手工硬件编程1.2 面向硬件编程1.3 高级语言编程1.4 编译系统的组成二、编译系统的逻辑结构2.1 狭义编译2.2 最狭义编译2.3 链接过程2.4 组建系统三、编译原理简介3.1 词法分析3.2 语法分析3.3 语义分析3.4 中间码生成3.5 中间码...

2022-08-06 22:14:16 647 1

转载 文末福利 | 性能领域:你知道的越多,不知道的也就越多

计算机性能是一门令人激动的,富于变化同时又充满挑战的领域。系统性能是对整个计算机系统的性能的研究,包括主要硬件组件和软件组件。所有数据路径上和从存储设备到应用软件上所发生的事情都包括在内,因为这些都有可能影响性能。对于分布式系统来说,这意味着多台服务器和多个应用。如果你还没有关于你的环境的一张示意图,用来显示数据的路径,赶紧找一张或者自己画一张。它可以帮助你理解所有组件的...

2022-08-03 08:23:50 149

git gerrit

git gerrit相关的知识讲解

2015-10-21

exynos4412_datesheet

关于exynos4412说明文档 密码是[email protected]

2014-03-15

alsa-lib alsa-utils移植到arm的脚本

alsa-lib alsa-utils移植到arm的脚本

2014-03-10

TS和M3U8的解析

在Android支持TS和M3U8的解析

2013-04-12

Homlet4.0开发指南

android第三方开发的说明指南

2012-07-09

空空如也

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

TA关注的人

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