Android/Linux的FEC浅析

FEC功能在40G和100G光模块中的应用和注意事项 在520这个温馨的节日里,易天光通信祝各位在工作和生活中都能感受到满满的爱与幸福。愿大家的爱情如同五月的鲜花般绚烂灿烂,甜蜜美好。同时,也希望在工作上能够不断进步,实现自己的理想和目标。 阅读详情

一、什么是FEC以及FEC的作用

FEC 是 Forward Error Correction 的缩写,中文译为前向纠错。

它是一种数据保护机制,通过在原始数据中添加冗余的校验信息,使得接收方在读取数据时,不仅能够检测到错误,还能在不重新读取的情况下,自动纠正一定数量和范围内的错误。

在 Linux 和 Android 的上下文中,FEC 主要被用作一种存储层的容错技术,主要用于系统分区的校验的场景

dm-verity 是 Linux 内核的一个设备映射器目标,主要用于只读分区(如 Android 的 system、vendor 分区)的完整性验证,防止设备启动时分区被篡改。通过dm-verity,系统分区被哈希树保护。在启动时,内核会逐块验证分区的哈希值,如果发现某个块的哈希值与预期不符,则说明该块数据被篡改或损坏。

标准的 dm-verity 在检测到错误时,会简单地返回 I/O 错误。对于 system 分区,这通常会导致设备无法启动,以确保安全。

为了增加鲁棒性,Android 在构建 dm-verity 镜像时,可以可选地加入 FEC 编码。它会为数据块生成 Reed-Solomon 纠错码。

  • 当 dm-verity 检测到某个数据块损坏时,它不会立即失败。

  • 它会先尝试使用 FEC 的冗余信息来重建和修复这个损坏的数据块。

  • 只有在 FEC 也无法纠正该错误时,dm-verity 才会最终报告 I/O 错误。

二、FEC是如何工作的

FEC(前向纠错)修复错误的过程像解方程,它利用额外的线索来还原丢失或损坏的数据。其核心是一种叫做 里德-所罗门码(Reed-Solomon)的数学算法

工作过程类比

假设我们想发送一组数字:[3, 5, 7]。

  1. 编码(添加冗余)
    使用一个简单的规则来生成两个额外的校验数字。假设规则是:
    P(x) = 3 + 5x + 7x²

    • 当 x=4 时,P(4) = 3 + 5*4 + 7*16 = 135

    • 当 x=5 时,P(5) = 3 + 5*5 + 7*25 = 203

    现在,存储或发送的完整数据包不再是 [3, 5, 7],而是 [3, 5, 7, 135, 203]。这里的 135 和 203 就是冗余的 FEC 校验数据。

  2. 传输(可能出错)
    假设在读取数据时发生了错误。我得到的数据变成了:[3, *, 7, 135, 203]。第二个数字 5 丢失或损坏(标记为 *)。

  3. 解码(修复错误)
    虽然丢失了一个原始数据,但我们还有两个完整的校验数据和另外两个原始数据。

    这变成了一个数学问题:我们有一个方程 P(x) = a + bx + cx²,其中:

    • a=3, b=?, c=7

    • 当 x=4 时,P(4)=135

    • 当 x=5 时,P(5)=203

    现在有了一个方程组:

    • 3 + b*4 + 7*16 = 135

    • 3 + b*5 + 7*25 = 203

    在这个简单的例子里,我们甚至只需要其中一个方程就能解出未知数 b:

    • 从第一个方程:3 + 4b + 112 = 135 -> 4b + 115 = 135 -> 4b = 20 -> b = 5。

    这样就成功修复了损坏的数据! 丢失的数字 5 被准确地计算出来了。

在技术实现中,这个过程要复杂得多,但原理相通:

  1. 数据分块与编码:

    • 系统将待保护的数据(例如一个 4KB 的文件系统元数据块)分割成多个符号

    • FEC 算法(如 Reed-Solomon)会取一定数量的数据符号(例如 k 个),然后通过复杂的数学运算(在伽罗瓦域上进行),生成 m 个额外的校验符号。

    • 最终,k 个数据符号和 m 个校验符号共同组成一个 FEC 码字。

    • 在 Android 的 dm-verity 中,这些校验数据会存储在专门的空间里;

  2. 错误检测:

    • 当需要读取数据时, dm-verity首先会检查数据的完整性。

    • 如果校验失败,则表明该数据块中存在错误。

  3. 错误纠正:

    • 一旦检测到错误,系统就会触发 FEC 纠错流程。

    • 它会从存储介质中读取整个 FEC 码字(包括剩余的正确数据符号和所有校验符号)。

    • FEC 解码器开始工作。它会尝试解决一个数学问题:“给定这些部分已知的数据和校验符号,最有可能的原始数据是什么?”

    • 解码器能定位错误发生的位置(? 在哪里)并确定其正确的值(? 应该是什么)。

  4. 返回结果:

    • 成功:如果错误数量在 FEC 的纠错能力范围内,解码器将计算出正确的数据,并将其返回给上层应用。整个过程对应用是透明的,它只会感觉到一次稍慢的读取。

    • 失败:如果错误数量超过了 FEC 的设计纠错能力(例如,校验符号太少,无法解出方程),则解码器会宣告失败,系统最终会返回一个 I/O 错误给上层。

IMX6ULL开发板网络不通?手把手教你修改Linux 5.4内核驱动适配LAN8720A 本文详细解析了IMX6ULL开发板在Linux 5.4内核下网络不通的问题,重点介绍了如何修改内核驱动和设备树以适配LAN8720A PHY芯片。通过硬件差异分析、设备树配置调整和内核驱动修改三个步骤,提供了完整的解决方案,帮助开发者快速恢复网络功能并优化性能。 阅读详情

相关推荐

libopus音频编解码器:从原理到实战的全面解析

音频编解码技术是现代实时通信和多媒体应用的核心基础,它通过压缩算法在保证音质的前提下减少数据传输量。其原理主要基于人耳听觉心理模型和信号处理技术,通过去除冗余信息实现高效压缩。这项技术的核心价值在于平衡音质、延迟与带宽占用,为互联网音频传输提供了可行性。在应用场景上,它广泛支撑着实时语音通话、在线会议、游戏语音和音乐流媒体等关键领域。本文聚焦的libopus,作为开源音频编解码器库的杰出代表,凭借其独特的混合编码架构(融合SILK语音编码和CELT音频编码)与强大的抗丢包能力,成为众多主流应用的底层引擎。通

cuanwei9356的博客 849

FEC 前向纠错

FEC 提供概率修复,只有当丢包是非连续的数据包造成时,它才有可能纠正5%的包。不同接受方的丢包率肺部均匀,不可能用单一的FEC流满足所有的丢包率。 奇偶校验FEC包格式 版本号、有效负载类型、序列号和时间戳以通常的方式分配。根据使用的RTP配置文件 动态分配有效负载类型;每发送一个FEC包,序列号增加1;时间戳设置为在传送FEC包时RTP媒体时钟的值。(时间戳不太可能等于前后RTP包的时间戳。)因此,FEC包中的时间戳是单调增加的,与FEC方案无关。 SSRC值与原始数据包的SSRC值相同.

Jarvis的博客 2227

Android AVB 分析(十七)程序员的FEC(Reed-Solomon)编码实战

上一篇《Android AVB 分析(十六)5个例子理解 FEC(Reed-Solomon) 的工作原理》中解释了 FEC 以及 RS(里德所罗门编码)的原理,并基于 Python 的 reedsolo 库提供了 5 个 RS 编码和解码的例子。通过对原始数据进行编码生成 FEC,以及对错误数据进行纠正还原数据。我相信如果您阅读了这篇文章,并亲自去做了这几个实验,那一定会对 RS 编码有一个比较切身的了解。也可能你还希望有一些补充,所以我个人觉得以程序员实践的角度为出发点的本篇同样可以让你有些收获。总体上,

洛奇看世界 431

FEC、CRC和失真修复的区别?

FEC和CRC的区别?

liyao1569的博客 1506

Android系统卡顿排查实战:当system_server卡在io_schedule(二)

摘要: i.MX8MM Android 9.0系统启动时界面卡死,排查发现system_server等进程因I/O等待阻塞。问题源于内核4.14.78中dm-verity与eMMC CQE功能冲突,导致文件系统死锁。关闭CQE后问题解决,虽略微降低eMMC性能,但系统稳定性显著提升。建议同步调整CPU电压配置以增强可靠性。该方案已通过测试验证,适用于同类硬件平台。

习惯就好zz的专栏 165

Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介

上一篇 《Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?》 分析了 bootloader 中是如何调用 libavb 函数库验证 vbmeta 和 boot 等分区的。接下来就打算写一篇介绍 dm-verity 原理的文章,然后再写一篇徒手 dm-verity 实践的文章,结果偶然发现了本篇的英文原版。写得太好,我觉得自己完全没有必要再写原理了。由于原文是英文,有些英语不太好的朋友不一定能完全理解。我花了点时间,结合 AI 将英语原文翻译成中文。

洛奇看世界 3595

system 镜像签名 fec等信息

system镜像的编译过程 verity_medadata.img的生成 fec 信息的生成

caopeng的专栏 4846

VS2019+EasyX图形库实战:手把手教你用C语言打造消消乐小游戏(附完整源码)

本文详细介绍了如何使用VS2019和EasyX图形库从零开始构建一个C语言消消乐小游戏。通过环境配置、数据结构设计、界面绘制、交互实现到游戏逻辑完善的完整流程,帮助开发者掌握图形编程和游戏开发的核心技巧,并附有完整源码供参考。

bush的博客 186

数据校验和错误检测

在数据通信和存储的过程中,保证数据的完整性和准确性至关重要。为此,采用了各种校验和错误检测方法,以提高数据传输的可靠性。本文将介绍校验位、循环冗余检查(CRC)和前向纠错(FEC)这三种常用的方法,并探讨更先进的错误检测和纠正技术。

weixin_47420447的博客 1032

Realtek RTD1319D芯片解析:H.266与AV1双解码的机顶盒SoC

视频编解码技术是数字媒体传输的核心,H.266/VVC作为新一代标准,相比H.265提升50%压缩效率,显著降低带宽需求。其实现原理依赖于专用硬件解码器和并行处理架构,在超高清视频传输领域具有重要价值。Realtek RTD1319D作为首款商用H.266处理器,采用异构计算设计,集成四核ARM CPU和独立视频处理单元,同时支持AV1解码,兼顾市场兼容性。该SoC特别适合4K机顶盒、数字标牌等应用场景,其HDMI 2.1a接口和DVB解调器为超高清内容传输提供完整解决方案。开发时需注意散热设计和内存配置优

weixin_42591413的博客 669

我用两个月时间,终于把优快云付费资源项目玩明白了!

关于项目的定位,这是一个知识付费项目,根据市场研究机构的数据显示,到2023年,全球知识付费市场规模将达到2000亿美元,所以说知识付费的前景是十分广阔的,当下互联网时代信息大爆炸,80后、90后、00后群体对知识付费的认可度也大幅提升,同时这群作为知识付费的主流人群已经具备了更强的消费能力,而且对于知识付费的需求更高。目前整个知识付费领域仍然在发展起步的初期,尽快在知识付费领域布局可以帮助我们在这波红利中获得一份不错的收益。而且个人认为,

白话机器学习 2万+

metaIPC2.0 SDK跨平台开发指南:如何在Linux/Android/Windows上实现低延迟语音对讲

本文详细解析了metaIPC2.0 SDK在Linux/Android/Windows平台上实现低延迟语音对讲的开发指南。通过混合通信模式结合MQTT信令和WebRTC媒体传输,开发者可构建跨平台语音系统,实现50-150ms的低延迟交互。文章涵盖环境配置、核心架构设计、音频优化及平台调试全流程,助力工业控制和智能终端设备的高效通信。

weixin_29278805的博客 173

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

fec I.mx6q平台sd卡下载映像脚本

Download Images with dd utility The linux utility "dd" on Linux PC can be used to download the images into the MMC/SD/TF card. Before downloading, make sure your MMC/SD/TF card partitions are created

Young的专栏 3112

JLINK/SWD/STLINK下载选项区别

摘要: 本文对比了JLINK/SWD/STLINK的6种下载模式:Normal(硬件复位)、Hot plug(无复位)、Under reset(持续复位后连接)、Software reset(软件复位)、Hardware reset(全复位)和Core reset(内核复位)。重点分析了各模式的操作逻辑、适用场景及注意事项,其中Under reset模式是解决SWD禁用/程序异常的首选方案。通过对比表归纳了复位范围、NRST操作等核心差异,并给出场景选择建议:排查连接问题优先选Under reset,常规调

亚洲程序员盟主得博客 394

保姆级教程:用R语言自动化处理FAERS季度数据(从文件合并到删除废弃Case)

本文提供了一份详细的R语言教程,指导如何自动化处理FAERS季度数据,包括文件合并和删除废弃Case。通过使用tidyverse、fs等R包,构建健壮的自动化流程,特别适合药物安全监测领域的数据分析师。教程涵盖环境准备、智能合并多季度数据、精准删除废弃Case等关键步骤,并提供了错误处理与日志记录的实用技巧。

weixin_42701915的博客 123

scrcpy v3.3.4:专业级安卓投屏与跨设备控制解决方案

scrcpy是一款功能强大的开源安卓投屏工具,能够在电脑上实时显示并完全控制安卓设备,提供低延迟、高质量的屏幕镜像体验。作为跨设备控制领域的专业解决方案,scrcpy支持完整的音视频传输、键盘鼠标模拟、游戏手柄映射等高级功能,满足开发调试、演示展示、游戏直播等多种应用场景需求。 ## 🎯 核心特性与技术优势 ### 极致的性能表现 scrcpy在设计上追求极致性能,能够在30-120fps的

gitblog_00597的博客 837

大模型——dify实战通过dify搭建你自己的图片识别服务

本文介绍了如何通过Dify平台搭建图片识别服务。首先创建工作流,添加支持图片上传的字段,并配置视觉模型qwen-vl-max-latest进行图像分析。文章详细说明了各步骤操作,包括字段设置、模型选择、提示词编写等。在测试阶段发现URL解析问题后,提供了解决方案:修改Dify的.env文件,调整FILES_URL配置并重启服务。最终成功实现上传图片或输入图片链接后,AI能够准确分析并返回简洁的图片内容描述。这一方案适用于需要快速部署图像识别功能的场景。

1921

Moonlight安卓端阿西西修改版:架构演进与性能突破的移动游戏串流技术深度解析

Moonlight安卓端阿西西修改版作为开源Moonlight项目的深度优化分支,通过架构重构与性能突破,重新定义了移动设备上的PC游戏串流体验。该项目专注于解决传统游戏串流方案在安卓平台上的三大核心挑战:网络延迟敏感度、设备性能差异化和输入响应一致性。基于硬件加速解码、动态网络自适应和预测性输入算法三大技术支柱,实现了从传统远程桌面到专业级游戏串流的技术跨越,为技术爱好者和安卓开发者提供了完整的

gitblog_00717的博客 804

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2166

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iMX6开发板MAC地址修改与批量配置实战

MAC地址作为网络设备的唯一标识符,在嵌入式系统组网中至关重要。其遵循IEEE 802标准规范,由OUI和厂商自定义部分组成。当多台设备MAC地址冲突时,会导致ARP异常、数据包丢失等网络故障,这在Android 4.4等早期系统中尤为明显。通过uboot环境变量设置、内核驱动修改和Android系统适配的三层架构方案,可彻底解决iMX6开发板的MAC地址冲突问题。该技术在智能家居、工业物联网等批量设备部署场景中具有重要应用价值,结合fastboot脚本和EEPROM烧录能实现高效的批量MAC地址配置。

weixin_27199085的博客 295

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

突破延迟壁垒:Sunshine 2025游戏串流技术路线图

Sunshine是一款自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上实现低延迟游戏串流体验。随着云游戏市场的快速发展,玩家对延迟控制、画质表现和跨设备兼容性的要求不断提高,Sunshine 2025技术路线图将围绕这三大核心方向进行突破,为用户带来更流畅、更高清的游戏串流服务。 [![Sunshine游戏串流服务宣传图](https://raw.gitcode.com/GitH

gitblog_00803的博客 1053

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

i.MX 8DV平台Android 6.0系统构建与烧录全流程实战指南

在嵌入式系统开发中,交叉编译是连接通用软件与特定硬件平台的核心技术,它允许开发者在一种架构的计算机上生成另一种架构的可执行代码。其原理在于利用目标平台的工具链,将高级语言源码编译为适配目标处理器的二进制文件。这项技术的价值在于极大地提升了嵌入式软件开发的效率与灵活性,使得复杂的操作系统如Android能够被移植到各类定制化硬件上。其典型应用场景包括车载信息娱乐系统、工业控制面板等对图形交互和实时性有高要求的领域。本文以NXP i.MX 8DV高性能异构处理器为例,详细解析了从源码获取、环境配置、应用硬件适配

weixin_34050005的博客 462

3步掌握MetaRTC:嵌入式设备的WebRTC开发终极指南

想要为嵌入式设备、物联网设备或机器人快速实现实时音视频通信功能吗?MetaRTC正是你需要的解决方案!这是一个纯C语言实现的WebRTC SDK,专为资源受限的嵌入式环境设计,却拥有惊人的跨平台能力。无论你是开发智能家居设备、工业物联网终端,还是机器人控制系统,MetaRTC都能让你轻松集成实时通信功能。本文将带你从零开始,用最简单的方式掌握这个强大的开源项目。 ## 🚀 为什么选择MetaR

gitblog_00668的博客 446

roc-toolkit开发者必备:C++实时音频处理框架的深度解析

roc-toolkit是一个功能强大的C++实时音频流处理框架,专为网络实时音频传输设计。它提供了完整的解决方案,包括音频编码/解码、网络传输、丢包恢复和时钟同步等核心功能,帮助开发者轻松构建低延迟、高可靠性的音频流应用。无论是构建语音通信系统、实时音乐传输服务还是音频监控解决方案,roc-toolkit都能提供稳定高效的技术支持。 ## 核心功能:打造专业级实时音频流应用 roc-toolk

gitblog_00514的博客 649

终极嵌入式音视频开发指南:5分钟上手跨平台WebRTC SDK

想要在嵌入式设备和IoT设备上快速实现实时音视频通信吗?metaRTC正是您需要的跨平台WebRTC解决方案!这个纯C语言编写的SDK专为资源受限的嵌入式环境设计,让您一次编码即可在所有主流平台上运行。在接下来的5分钟内,我将带您了解如何快速上手这个强大的跨平台音视频开发工具。 ## 🔥 为什么选择metaRTC进行嵌入式音视频开发? metaRTC是一个完整的WebRTC协议栈实现,特别适

gitblog_00755的博客 669
上一篇: 如何精确控制git stash
下一篇: 单元测试心得
Master Cui
博客等级 码龄9年 1408粉丝 224原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值