嵌入式机器学习设计-ARM特别版

news/2024/5/19 14:03:57 标签: ML, edge, 边缘计算, 边缘机器学习

目录

  • 0 引言
    • 0.1 关于本书
  • 1 为什么ML正在向边缘迁移?
    • 1.1 掌握ML的基本概念
    • 1.2 差异化和降低成本
    • 1.3 探索机器学习的机会
  • 2 配置ML环境
    • 2.1 理解ML平台的组件
    • 2.2 选择ML开发环境
    • 2.3 案例研究:用于哮喘病人的边缘机器学习的实例
  • 3 为什么软件真正重要?
    • 3.1 利用现成的硬件、工具和模拟器缩短上市时间
    • 3.2 通过软件实现差异化
    • 3.3 训练和部署ML模型
  • 4 为什么生态系统很重要?
    • 4.1 重用已存在的资源
    • 4.2 寻找更好的产品和市场组合
    • 4.3 站在巨人的肩膀上
  • 5 边缘机器学习的10个例子
  • 6 参考网站

引言

根据艾伦·图灵在1950的语言,“机器终将和人类竞争”,经过数十年的实验室和智囊团的研究,机器学习终于到达了这个可行点,在工程领域和人们的日常生活中爆发。

现在,技术日新月异。机器学习不再是远端的基于云的数据中心的保留地。计算处理能力和ML算法的改进,正在推动着应用、训练和推理回归到网络的边缘-智能设备已经成为日常生活的一部分。

0.1 关于本书

傻瓜式嵌入式机器学习设计-ARM特别版,展示了往任何设备添加机器学习不仅是可能的而且非常简单。本书重点关注关键实现点并解释为什么在计划的早期这些点非常重要。这本书解释了怎样实现平台配置并解释了为什么软件重要。最后,阐述了生态系统在机器学习中的重要性,且给出了在网络边缘使用机器学习的有趣例子。

1 为什么ML正在向边缘迁移?

本章重点:

  • 掌握ML的基本概念
  • 理解差异化和降低成本

机器学习代表了超过了一代计算能力的最大拐点,事实上已经在各个市场上产生了重大影响。它导致了车联技术的巨大进步,改变了医疗保健事业的面貌,并影响了城市基础设施的控制方式。它也影响着不太明显的部门,比如农业,产生于设备的信息正在实现更有效的灌溉,更精确滴病虫和疾病控制,以及总作物收获的优化。

机器学习的潜力非常深远,很难想象哪一个部门不被影响。对于用户而言,不管是在家中、工作中还是休闲娱乐中,机器学习带来了新的认知和便利。对于制造商而言,它使流程更加高效并产生了新的业务模型和服务。

1.1 掌握ML的基本概念

术语-人工智能(AI)和机器学习(ML)经常可以互换使用。但是,在数据科学领域,这两个术语是不同的。本书对其定义如下:

  • AI-是使机器能够模拟人类智能的硬件和软件的总称。要想实现这个智能,设计一些列技术,包括ML、机器视觉、和自然语言处理。

  • ML是AI的子集。ML使用统计学的技术是程序通过训练而学习,而不是通过规则进行编程。

ML系统处理训练数据已逐步提高性能,提供伴随经验而提高的结果。数据来源于网络边缘-可以时IoT设备、边缘服务器或边缘设备-发送到cloud端进行训练。

机器学习是人工智能的一个子集,对于几个关键概念,有如下关系:

算法 < 深度学习 < 机器学习 < 人工智能

一旦机器学习系统被训练完成,它就能分析新的数据并在训练数据的上下文中对其进行分类,这被成为推理。

机器学习执行的2个地方:

  • Cloud

    机器学习通常在远端、功耗和计算密集的服务器端进行。

  • Edge

    ML推理通常在本地进行,将在提供输出的设备上进行。术语-edge,可能是指IoT设备,边缘服务器或边缘设备。

1.2 差异化和降低成本

尽管机器学习的第一波浪潮专注于云计算,将为简化模型而使其能够运行在低功耗硬件上的改进技术和在边缘设备上提高的计算能力结合起来,使差异化和降低单位成本成为可能:

  • 减少延迟;提高可靠性和安全性

    对于用户而言,无法响应的APP或无法加载页面的延迟都是一件烦人的事,但是,许多对时间要求苛刻的应用-比如自动驾驶系统-不能简单地依赖于云系统,因为响应延迟可能会产生严重的安全隐患并严重影响车辆性能。

  • 功耗

    将数据从设备传输到云端服务器增加了机器学习系统的电力成本,因为在系统中迁移数据毕竟会消耗电力。基于云端或网络执行的机器学习也会增加带宽负担,这可能很重要。因为机器学习往往需要大量的数据。通过尽可能多地在设备上执行机器学习,网络上和云基础设备的功耗和复杂性就会降低。

  • 隐私和安全

    消费者和公司越来越重视数据的安全性。没有人希望自己的隐私遭到破坏,但是不断地在云和设备间迁移数据,这种风险正在增加。当在设备上进行处理时,有关数据存储和传输的法律问题以及隐私法规(例如,欧盟最近的通用数据保护法规(GDPR))的合规性将被降到最低。

  • 个性化

    除了隐私和安全性,在设备上执行机器学习还将导致更多的个性化的计算经验。随着更多设备变得智能,它们将需要适应自身的即时环境,并根据周围环境的场景作出即时响应。当这些设备将用户和他们关心的事物连接起来时,人工智能就成为可能,且因人而异。在云端为每个用户提供唯一的维护、定制化的模型是一项巨大的持续开销,因此,可以运行自己定制化模型的边缘设备将提供竞争优势。

最后,边缘设备上的机器学习将实现一个更可靠、更快响应和更安全的用户体验,还能降低单位成本、个人数据风险和功耗,并且也无需网络连接。

1.3 探索机器学习的机会

机器学习与新设备无关,而是可以利用所有的设备。机器学习使设备能够更好地利用视觉、声音、热量和振动,从而关联其及时环境。这项革新将会创造新的商业模型、降低成本并优化一些列参数的性能。

尽管机器学习的好处令人兴奋,但是往产品中添加机器学习的第一步就往往令人生畏。机器学习的要求因模型和工作负荷差异很大;没有一劳永逸的方案。几乎所有的模型都允许精度和性能自由可调。这种灵活性允许在设备硬件和模型能力之间寻求一个平衡点,但是,这却带来了额外的问题:

  1. 使用场景是什么?
  2. 哪种神经网络(NN)模型提供了最佳的性能/精度平衡?
  3. 应该选择哪种硬件补偿算法? 性能很低的硬件可以和精度较低的模型一起使用吗? 可以根据RAM调整模型吗?
  4. 选择哪些工具可以解决这些问题?
  5. 更重要的是:如何平衡这些问题,以最佳的单位成本提供最佳的性能?

2 配置ML环境

本章重点:

  1. 理解ML平台的组件
  2. 选择ML开发环境
  3. 案例研究

选择一个合适的解决方案需要做许多平衡:从小的、低功耗的微控制器单元(MPU)-对成本和功耗有限制的系统,到中央处理器(CPU)-更高性能和通用目的,再到图形处理器(GPU)-提高图像处理应用的性能,还有专用的神经网络处理器(NPU)-更高密集和更高效的机器学习处理。本章将梳理这些内容。

2.1 理解ML平台的组件

选择什么样的平台运行机器学习?令人惊讶的是,就硬件而言,它可能需要的就是你身边现有的东西。许多平台已经能够单独在CPU和GPU上运行ML应用了。(在第5章将会看到这样的示例)

对于某些应用,更高的性能要求可能需要专用ML处理器,比如,神经处理单元(NPU)。但是,如果每个处理器上运行的软件栈不同,而将NPU和CPU及GPU混合在一起运行ML,无疑将会增加复杂性。这个问题催生了一个软件层,负责对软件应用程序隐藏底层硬件的复杂性。

异构计算是指使用不止一种处理器或硬核以实现更好的性能和更高的效率的系统

异构计算平台允许应用开发人员可以选择自己喜欢的NN框架去写应用,比如’Google’的’TensorFlow’、‘Facebook’的’Caffe’和’Caffe2’,而不必关心来自不同供应商的处理器类型。如图2-1所示,软件层负责隐藏硬件并适配不同的应用程序。

图 2-1

图 2-1: 一个异构计算平台的示例,含有多个硬核,以及开源代码

开源标准有助于降低复杂性,保证不同供应商方案的兼容性。这方面,一个显著的例子就是开源神经网络交换格式(ONNX),目前由ARM、Microsoft、Facebook、Amazon和其他的一些公司支持,提供了训练框架和运行时引擎的通用格式。

你有许多运行ML模型的选择:

  • 长时间运行的低功耗微处理器CPU:

    小型模型可以在这些低功耗芯片上运行,降低成本。比如,检测唤醒系统其它部分的动作和行为,以便实施更详细的分析。

有时候,微处理器带有DSP,数字信号处理器,它可以加快处理,而不需专用的DSP即可为ML提供干净的信号。这可以节省成本、面积和开发时间,尤其是在没有DSP软件开发背景的前提下。

  • 高效、通用CPU:

    依赖内核的配置和数量,可以很好地运行完整的ML。例如:用于隐藏字幕生成的实时语音识别。

  • 多媒体和CPU内核:

    通常运行和移动设备内核运行相同的模型,从而提高性能和效率。如果设计中已经考虑使用GPU,则可以把CPU用于其它任务,以最大化效率。

  • 专用NPU:

    专用芯片以较低的功耗提供了运行通用ML模型的最高性能。比如,确定实时高清视频源中的那些像素对应一个人。

要想准确地知道你的设备中需要哪些组件,需要多方面的仔细考虑,是我们接下来要讨论的内容。

2.2 选择ML开发环境

选择合适的硬件,是否需要专用NPU,以及怎样把它集成到系统和工具中,这些都因情况而定。但是,对于受限的环境,以下几个功能必须在架构设计中考虑进去:

  1. 数据处理:

    你的边缘解决方案需要哪种数据提取和处理?这可能依赖于你要运行的模型类型和同时运行的模型数量。这些模型有多复杂?它们是否有计算能力和带宽限制?

  2. 连接:

    设备上可以做什么?什么需要连接到云端?什么必须要留在云端?

  3. 集成:

    是否有集成或者依赖管理?开发者社区将使用哪些框架?不同框架开发的模型,系统如何支持?

  4. 功率、尺寸和热量等:

    你的边缘设备是否有功率、尺寸和热量等方面的限制?

  5. 精确度:

    想要的精度是多少?尽管你首先会想,精度越高越好,但并不总是这样。到一定水平后,就会达到一个收益递减点。在某些场景下,提高2个百分点的精度可能需要在计算能力和内存方面要求10倍的增加。所以,应该非常清晰地知道特定情况下的精度水平。

  6. 隐私和安全:

    你的边缘解决方案对隐私和安全有哪些考虑?

  7. 工作负载:

    NPU是否大部分空闲,用其它也空闲的CPU或GPU是否可以完成?另一方面,虽然CPU或GPU能够运行模型,但是如果这些资源的负载已经很重,使用NPU是否是一个更好的方案?

综上考虑,所需的组件是不同的。一个CPU或GPU是否已经足够?是否需要添加一个NPU?在成本限制内,满足需求的NPU的大小?综合市场上已有的不同处理核的能力,匹配你的需求。

下面的案例研究,提供了一个可以在边缘嵌入式设备上运行的实例。

2.3 案例研究:用于哮喘病人的边缘机器学习的实例

例如, Amiko Respiro提供了更智能的呼吸技术,帮助哮喘病人更轻松的呼吸。该方案包含基于ML的传感器,作为标准呼吸器的附件,以提高哮喘病的治疗。这些智能传感器必须是低功耗的,可扩展的,能够有效地控制成本,并且可以和一个基于可连接的平台上的面向病人的APP配合使用。

Respiro传感器模块的核心是一个超低功耗的ARM Cortex-M处理器,能够:

  • 在设备上实现数据处理,无需连接到云端

  • 使用低功耗蓝牙(BTLE)连接到智能手机

  • 效率曲线可延长设备电池寿命

该解决方案使用机器学习解释呼吸器的振动数据。传感器被训练,识别病人的呼吸形态和吸入时间,计算出重要的参数,诸如肺活量和呼吸技术。

处理器允许Respiro运行实时ML算法,以识别行为模式并解释传感器模块本身内的数据。用户无需等待后台处理详细的传感器数据。当用户按下触发键,传感器模块立即识别用户的呼吸方式数据并提供低延时的、用户私有的数据反馈。

Respiro传感器和病人安装在手机上的APP绑定在一起。传感器收集呼吸器的使用数据,而不会中断药物输送方式,并发送数据和反馈给APP。该传感器模块也很方便的添加新功能,扩展更进一步的创新互联医疗解决方案。

3 为什么软件真正重要?

本章重点:

  1. 利用现成的硬件、工具和模拟器缩短上市时间
  2. 通过软件实现差异化
  3. 训练和部署ML模型

根据著名的技术专家Mark Andressen的名言,“Software is eating the world.”。稍有不慎,软件就会占用大量的开发预算,并推迟产品的开发计划。但是,软件创新和ML功能也日益成为设备供应商差异化的关键因素,如果你想再产品中加入ML功能,就必须对你的具体软件需求有一个深刻的理解。

3.1 利用现成的硬件、工具和模拟器缩短上市时间

降低软件和ML模型开发风险的最快方法就是,使用与最终产品功能尽可能接近的硬件进行原型设计。这可以通过使用行业标准的CPU和CPU实现,或者对之前的产品进行迭代实现。

为了满足你的需求,建议选择大型供应商提供的组件-最好是具有丰富的原型设计平台的生态系统。这意味着你可以在重要的领域,比如性能、功率或者硬件的连接性上,选择与你的最终设计比较接近的技术。

一旦原型平台定下来,下一步就是搭建有效的开发环境。根据你的设备,这可能包括:

  • 操作系统
  • 编译器
  • 高性能库
  • 调试和性能分析工具
  • ML框架

因为开发团队需要时间来建立这些工具和库的专业知识。那么在已经熟悉的平台上构建,可以提高生产效率和创新能力,从而大大减低软件开发的风险。

理想情况下,团队开发的工具和软件应可移植到最终的平台上。当早期的硬件为测试并降低紧要关头的延时和性能意外而做好准备的时候,通用的标准和架构可以使集成变得更为顺利。

如果选择的架构提供模拟器和快速建模工具,开发风险就会进一步降低。当今的快速模型和模拟器完全有能力在硬件准备好之前,在模拟器上运行完整操作系统并运行最终的应用程序。使用可重复的模拟器,提供了更进一步的容错和性能预测。模拟器上有效运行的项目通常都能成功地部署到真正的硬件上。

简而言之,为了有效降低软件开发的风险,请选择一个架构和现成的原型平台:

  • 最终产品所需的功能相近

  • 团队熟悉的一组通用工具、库和框架

  • 提供强大的仿真解决方案,可最大程度减少集成软件和硬件的时间

3.2 通过软件实现差异化

选择了硬件体系架构,也就等于选择了软件栈和生态系统。大的生态系统具有专业的团队,能够持续地优化和改进它们的软件栈。例如,ARM提供了Arm NN,计算库,和CMSIS-NN。如图3-1所示,在4个月的时间里,在Cortex-A系列CPUMali GPU上的AlexNetInceptionSqueezeNetVGG-16提高了1.6倍~2.6倍,

在开发和维护都很活跃的软件栈基础上开发,可确保在未来的性能和安全改进中受益,无需自己再开发维护。

Figure 3-1

图3-1 软件性能提升

所有设计都有针对硬件的软件平衡选择。通常,软件解决方案可以使团队在发布之前持续创新软件功能,优化机器学习的模型架构和性能训练,直到最合适。

在某些情况下,生态系统和ML研究团队提高的性能,使你之后的产品版本具有显著的差异化性能和功能,而无需大的硬件变动-只要这些功能与原始设计的硬件紧密相关就可以。

选择硬件方案的时候,请密切注意一下方面的软件性能:

  • 优化的软件协议栈:

    这是实现硬件性能最大化的关键指标。

  • 生态软件:

    必须能够提供持续的性能和安全更新。

  • 自己的解决方案:

    考虑哪一部分硬件实现,哪一部分软件实现更为灵活方便。

3.3 训练和部署ML模型

神经网络的优点是其灵活性,其缺点也是灵活性。可以通过权衡精确度,性能,内存要求和硬件兼容性,适应你想要的性能参数-但是为了最佳部署,而寻求某种平衡和训练神经网络并不是一件容易的事。正如软件部署一样,同样需要花费精力在这些工具的使用上。为了最小化风险,请寻找基于或者兼容TensorFlowONNX的开源代码的方案。

随着模型训练和优化技术的提高,曾经局限于数据中心的人工智能(例如语音和图像识别,推荐和预测),应用在手机和嵌入式设备上的情况越来越多了。当然了高性能的NPU除外。

当今世界,最流行的AI平台无疑是智能手机,其中包括的ML功能有,文本预测,语音识别和计算摄影。但是,随着人们越来越了解嵌入式ML开发的好处,这些功能正在扩展,并在越来越多的嵌入式设备上可用。比如,有效的语音关键词搜索(例如,听一个唤醒词或简单的命令),已经在微控制器上得到了充分证明。

ML分为2个阶段:训练阶段-负责学习;推理阶段-将学习应用。今天,训练通常发生在服务器或相似的设备上,但是推理已经越来越多地迁移到边缘设备上了,比如家庭、工厂、和工作场所的消费级和工业级设备。

ML工作负载的特点是,对计算和内存带宽有着苛刻的要求。但是,诸如量化、修剪和模型压缩之类的最新优化技术将使先前仅限于数据中心的解决方案部署到移动和嵌入式设备上成为可能。

充分利用可用的计算资源变得越来越复杂。尽管,在专用的ML芯片上,ML模型可以高效的运行;但是,在许多情况下,在一个或者多个CPU或GPU内核上运行某些神经网络(或者部分神经网络),可能会更加节能、低延迟和节能,当然,这完全取决于设备、其工作状态和工作负载。

寻找一个平台,使开发人员和数据科学家可以在跨CPU、GPU和NPU的高效节能的环境中轻松构建和运行ML应用,并在现在和未来的设计中保留最大灵活性。该软件应该提供与现有ML框架(例如TensorFlowPyTorch)的桥梁,同时隐藏硬件的实现细节。这可以允许开发者继续使用他们喜欢的框架和工具,同时异构平台将结果无缝转换在底层硬件上运行。

4 为什么生态系统很重要?

  • 重用已存在的资源
  • 寻找更好的产品和市场的锲合度

有句老话:"当你嫁给某人,你就嫁给了他的家庭。"当你选择架构时,或多或少,把自己置于了一个大的生态系统中,它包括芯片供应商、OEM厂商、软件供应商和咨询顾问;各种培训和教育材料;尤其重要的是,其经验丰富的工程师人才库。

如本章所述,充分利用生态系统是最小化成本和缩短上市时间的重要手段。

4.1 重用已存在的资源

企业成功最重要的资产之一就是建立和利用内部专业知识的能力。建立在可互操作标准之上的生态系统允许解决方案和技能可以跨项目迁移,减少上市的风险和时间。

基于标准的设计可以确保软件和对ML投资的未来发展:能够以对软件栈最小的破坏切换到硬件,可以给你迁移到更好解决方案的灵活和自由。

为此,用途单一的硬件堪称一把双刃剑:虽然最初软件开发很快,但是如果平台不能提供源源不断的具有各种性能和功耗特性的新产品,在未来的设计中,你可能不得不转向别的未结盟的供应商。这种技术断层意味着,在原先的设计中积累的专业知识不能传到下一代产品中-甚至不能迭代到当前的产品中。最终,最初的速度可能让位于项目最终的停滞。

ML的发展也带来了一些列的挑战:研究社区发展迅速,几乎每天都会发布新的、更好的运算符,激活功能和NN架构。无论你选择在CPU、GPU还是NPU上运行模型,都应该避免,当未来的研究或者竞争对手的开发,在软件中支持新的、定制化的操作符时,你的模型都不应该受到硬件的影响

4.2 寻找更好的产品和市场组合

很少有公司全面定制设备,即使最大的公司,也需要重用他们自己的“轮子”或者外部可用的“轮子”。

当你选择一个大的、充满活力的生态系统,也就意味着你选择了潜在的功能模块和供应商,它们将会给你最完美的产品/市场组合。

此外,选择一个大生态系统,更容易发现满足你大部分需求的现成解决方案。这可以减少你自己实现功能的数量,进一步减少成本。

4.3 站在巨人的肩膀上

上市速度和差异化是任何产品设计的关键因素。投入到一个基于标准的生态系统中,意味着公司可以依靠合作伙伴社区,而不是从头开始"造轮子"。

这一点在ML中最为重要。随着新的商业机会和创造性的现实世界中的解决方案的增加,新的模型和算法必须被适应。开源计划允许公司扩展其专有框架和工具以更快地将创新产品推向市场方面发挥了重要作用。

ML标准化是一项重要但极具挑战的工作,因为一切东西都在快速变化,从使用场景到软件栈和硬件处理器。甚至,数据也会带来问题。但是,从系统架构的角度来看,一些厂商建立了跨越生态系统的标准化。

机器学习需要2种框架才能协同工作:

  • 训练框架,比如TensorFlow, 数据科学家和ML工程师使用它来训练数据中的新模型。

  • 推理框架,比如Arm NN,基于上面训练出来的模型,在底层的CPU、GPU和ML专用IP核上有效地运行。

当ARM将其开源推理引擎-Arm NN-捐献给Linaro Machine Intelligence计划时,就是号召整个生态系统贡献和开发一个简单的优化后的推理引擎。这样,就会使生态中的每一个人都可以从别人的专业知识和优化中受益。

5 边缘机器学习的10个例子

  • 在边缘应用机器学习
  • 在边缘解决问题

在边缘引用ML的潜力是无限的,以下是10个启发性的解决方案:

  • 安全、智能的低功耗智能家居安全领域:

    使用基于设备的、始终在线的、动作、人和声音的检测来识别家庭成员和入侵者。只有当检测到动作或声音的时候才开始记录,并给用户的智能手机发送一个通知。

  • 医院工作人员和访客跟踪:

    提醒接待人员未知人员和未授权人员访问。边缘识别意味着永远不会存储或传输访客和患者的图像。

  • 植物病害检测:

    使用图像识别智能手机应用APP可以以几乎100%的精确度检测到病变-甚至在离线状态下。

  • 快速选择产品:

    通过摄像头对水果和蔬菜进行分类,自动识别不同的类别并提高生产线效率。

  • 无人机应用:

    通过基于相机的视觉和运动预测,识别并跟随目标,同时避开障碍物。

  • 辅助驾驶系统:

    通过相机、运动传感器、和GPS实时理解和指导司机的驾驶行为,减少碰撞。

  • 增强的人机交互:

    简化交互、提高生产效率,并在设备间创造更流畅的用户体验。

  • 设备翻译机:

    使交流成为可能-无论位置多么遥远-避免了昂贵的漫游费用。

  • 设备优化:

    通过优化操作系统对各个应用程序的调度来显著延长电池寿命。

  • 计算摄影:

    解决棘手的问题,比如远处的物体和弱光条件,以或得接近完美的图像。

6 参考网站

ARM官网


http://www.niftyadmin.cn/n/1636717.html

相关文章

UNIX网络编程——设置套接字超时

在涉及套接字的I/O操作上设置超时的方法有以下3种&#xff1a;调用alarm&#xff0c;它在指定超时期时产生SIGALRM信号。这个方法涉及信号处理&#xff0c;而信号处理在不同的实现上存在差异&#xff0c;而且可能干扰进程中现有的alarm调用。在select中阻塞等待I/O&#xff08;…

Linux设备驱动开发0-环境搭建

原文地址&#xff1a;Linux设备驱动开发0-环境搭建 1 环境介绍 主机环境&#xff1a; Win10 64 VirtualBox 6.0 ubuntu16.04&#xff08;32位&#xff09;-4.10.0-28-genericu-boot 版本&#xff1a; u-boot-2015-04Linux kernel版本&#xff1a; linux-4.4.203busybox版…

跨平台的 .NET 运行环境 Mono 3.2 新特性

Mono 3.2 发布了&#xff0c;对 Mono 3.0 和 2.10 版本的支持不再继续&#xff0c;而且这两个分支也不再提供 bug 修复更新。 Mono 3.2 主要新特性&#xff1a; LLVM 更新到 3.2 版本&#xff0c;带来更多的编译优化默认使用 SGen Garbage Collector 垃圾收集器,提供3种新的实验…

Xcode安装CocoaPods

1.MAC更新Ruby curl -L get.rvm.io | bash -s stable source ~/.bashrc source ~/.bash_profile rvm -vruby -v rvm list known rvm install 2.3.0 2.安装CocoaPods gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ gem sources -l su…

Linux内核0-使用QEMU和GDB调试Linux内核

原文地址&#xff1a;Linux内核0-使用QEMU和GDB调试Linux内核 &#xff08;文章大部分转载于&#xff1a;https://consen.github.io/2018/01/17/debug-linux-kernel-with-qemu-and-gdb/&#xff09; 排查Linux内核Bug&#xff0c;研究内核机制&#xff0c;除了查看资料阅读源…

【转】正向代理vs反向代理

正向代理 正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标(原始服务器)&#xff0c;然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特…

linux内核1-GNU汇编入门_X86-64ARM

原文地址&#xff1a;linux内核1-GNU汇编入门_X86-64&ARM 1 引言 为了阅读Linux内核源代码&#xff0c;是需要一些汇编语言知识的。因为与架构相关的代码基本上都是用汇编语言编写的&#xff0c;所以掌握一些基本的汇编语言语法&#xff0c;能够更好地理解Linux内核源代码…

IOS检测是否有网络

1.添加框架 SystemConfiguration.framework 2.添加文件 Reachability.h Reachability.m 3.代码实现 #import "Reachability.h"Reachability *r [Reachability reachabilityForInternetConnection]; if ([r currentReachabilityStatus] NotReachable) {NSLog(…