如何区别Linux文件系统呢? 您所在的位置:网站首页 linux系统种类区别 如何区别Linux文件系统呢?

如何区别Linux文件系统呢?

#如何区别Linux文件系统呢?| 来源: 网络整理| 查看: 265

根据早期的 Linux 贡献者和作家 Robert Love 所说,“文件系统是一个遵循特定结构的数据的分层存储。” 不过,这种描述也同样适用于 VFAT(虚拟文件分配表Virtual File Allocation Table)、Git 和Cassandra(一种 NoSQL 数据库)。

什么是文件系统?根据早期的 Linux 贡献者和作家 Robert Love 所说,“文件系统是一个遵循特定结构的数据的分层存储。” 不过,这种描述也同样适用于 VFAT(虚拟文件分配表Virtual File Allocation Table)、Git 和Cassandra(一种 NoSQL 数据库)。那么如何区别文件系统呢?

文件系统基础概念

Linux 内核要求文件系统必须是实体,它还必须在持久对象上实现 open()、read() 和 write() 方法,并且这些实体需要有与之关联的名字。从 面向对象编程 的角度来看,内核将通用文件系统视为一个抽象接口,这三大函数是“虚拟”的,没有默认定义。因此,内核的默认文件系统实现被称为虚拟文件系统(VFS)。

如果我们能够 open()、read() 和 write(),它就是一个文件,如这个主控台会话所示。

VFS 是著名的类 Unix 系统中 “一切皆文件” 概念的基础。让我们看一下它有多奇怪,上面的小小演示体现了字符设备 /dev/console 实际的工作。该图显示了一个在虚拟电传打字控制台(tty)上的交互式 Bash 会话。将一个字符串发送到虚拟控制台设备会使其显示在虚拟屏幕上。而 VFS 甚至还有其它更奇怪的属性。例如,它可以在其中寻址。

我们熟悉的文件系统如 ext4、NFS 和 /proc 都在名为 file_operations 的 C 语言数据结构中提供了三大函数的定义。此外,个别的文件系统会以熟悉的面向对象的方式扩展和覆盖了 VFS 功能。正如 Robert Love 指出的那样,VFS 的抽象使 Linux 用户可以轻松地将文件复制到(或复制自)外部操作系统或抽象实体(如管道),而无需担心其内部数据格式。在用户空间这一侧,通过系统调用,进程可以使用文件系统方法之一 read() 从文件复制到内核的数据结构中,然后使用另一种文件系统的方法 write() 输出数据。

属于 VFS 基本类型的函数定义本身可以在内核源代码的 fs/*.c 文件 中找到,而 fs/ 的子目录中包含了特定的文件系统。内核还包含了类似文件系统的实体,例如 cgroup、/dev 和 tmpfs,在引导过程的早期需要它们,因此定义在内核的 init/ 子目录中。请注意,cgroup、/dev 和 tmpfs 不会调用 file_operations 的三大函数,而是直接读取和写入内存。

下图大致说明了用户空间如何访问通常挂载在 Linux 系统上的各种类型文件系统。像管道、dmesg 和 POSIX 时钟这样的结构在此图中未显示,它们也实现了 struct file_operations,而且其访问也要通过 VFS 层。

How userspace accesses various types of filesystems

VFS 是个“垫片层”,位于系统调用和特定 file_operations 的实现(如 ext4 和 procfs)之间。然后,file_operations 函数可以与特定于设备的驱动程序或内存访问器进行通信。tmpfs、devtmpfs 和 cgroup 不使用 file_operations 而是直接访问内存。

VFS 的存在促进了代码重用,因为与文件系统相关的基本方法不需要由每种文件系统类型重新实现。代码重用是一种被广泛接受的软件工程***实践!唉,但是如果重用的代码引入了严重的错误,那么继承常用方法的所有实现都会受到影响。

/tmp:一个小提示

找出系统中存在的 VFS 的简单方法是键入 mount | grep -v sd | grep -v :/,在大多数计算机上,它将列出所有未驻留在磁盘上,同时也不是 NFS 的已挂载文件系统。其中一个列出的 VFS 挂载肯定是 /tmp,对吧?

谁都知道把 /tmp 放在物理存储设备上简直是疯了!图片:https://tinyurl.com/ybomxyfo

为什么把 /tmp 留在存储设备上是不可取的?因为 /tmp 中的文件是临时的(!),并且存储设备比内存慢,所以创建了 tmpfs 这种文件系统。此外,比起内存,物理设备频繁写入更容易磨损。***,/tmp 中的文件可能包含敏感信息,因此在每次重新启动时让它们消失是一项功能。

不幸的是,默认情况下,某些 Linux 发行版的安装脚本仍会在存储设备上创建 /tmp。如果你的系统出现这种情况,请不要绝望。按照一直优秀的 Arch Wiki 上的简单说明来解决问题就行,记住分配给 tmpfs 的内存就不能用于其他目的了。换句话说,包含了大文件的庞大的 tmpfs 可能会让系统耗尽内存并崩溃。

另一个提示:编辑 /etc/fstab 文件时,请务必以换行符结束,否则系统将无法启动。(猜猜我怎么知道。)

/proc 和 /sys

除了 /tmp 之外,大多数 Linux 用户最熟悉的 VFS 是 /proc 和 /sys。(/dev 依赖于共享内存,而没有 file_operations 结构)。为什么有两种呢?让我们来看看更多细节。

procfs 为用户空间提供了内核及其控制的进程的瞬时状态的快照。在 /proc 中,内核发布有关其提供的设施的信息,如中断、虚拟内存和调度程序。此外,/proc/sys 是存放可以通过 sysctl 命令配置的设置的地方,可供用户空间访问。单个进程的状态和统计信息在 /proc/目录中报告。

/proc/meminfo 是一个空文件,但仍包含有价值的信息。

/proc 文件的行为说明了 VFS 可以与磁盘上的文件系统不同。一方面,/proc/meminfo包含了可由命令 free 展现出来的信息。另一方面,它还是空的!怎么会这样?这种情况让人联想起康奈尔大学物理学家 N. David Mermin 在 1985 年写的一篇名为《没有人看见月亮的情况吗?现实和量子理论》。事实是当进程从 /proc 请求数据时内核再收集有关内存的统计信息,而且当没有人查看它时,/proc 中的文件实际上没有任何内容。正如 Mermin 所说,“这是一个基本的量子学说,一般来说,测量不会揭示被测属性的预先存在的价值。”(关于月球的问题的答案留作练习。)

当没有进程访问它们时,/proc 中的文件为空。(来源)

procfs 的空文件是有道理的,因为那里可用的信息是动态的。sysfs 的情况则不同。让我们比较一下 /proc 与 /sys 中不为空的文件数量。

procfs 只有一个不为空的文件,即导出的内核配置,这是一个例外,因为每次启动只需要生成一次。另一方面,/sys 有许多更大一些的文件,其中大多数由一页内存组成。通常,sysfs 文件只包含一个数字或字符串,与通过读取 /proc/meminfo 等文件生成的信息表格形成鲜明对比。

sysfs 的目的是将内核称为 “kobject” 的可读写属性公开给用户空间。kobject 的唯一目的是引用计数:当删除对 kobject 的***一个引用时,系统将回收与之关联的资源。然而,/sys 构成了内核著名的“到用户空间的稳定 ABI”,它的大部分内容在任何情况下都没有人能“破坏”。但这并不意味着 sysfs 中的文件是静态,这与易失性对象的引用计数相反。

内核的稳定 ABI 限制了 /sys 中可能出现的内容,而不是任何给定时刻实际存在的内容。列出 sysfs 中文件的权限可以了解如何设置或读取设备、模块、文件系统等的可配置、可调参数。逻辑上强调 procfs 也是内核稳定 ABI 的一部分的结论,尽管内核的文档没有明确说明。

sysfs 中的文件确切地描述了实体的每个属性,并且可以是可读的、可写的,或两者兼而有之。文件中的“0”表示 SSD 不可移动的存储设备。

用 eBPF 和 bcc 工具一窥 VFS 内部

了解内核如何管理 sysfs 文件的最简单方法是观察它的运行情况,在 ARM64 或 x86_64 上观看的最简单方法是使用 eBPF。eBPF(扩展的伯克利数据***滤器extended Berkeley Packet Filter)由在内核中运行的虚拟机组成,特权用户可以从命令行进行查询。内核源代码告诉读者内核可以做什么;而在一个启动的系统上运行 eBPF 工具会显示内核实际上做了什么。

令人高兴的是,通过 bcc 工具入门使用 eBPF 非常容易,这些工具在主要 Linux 发行版的软件包中都有,并且已经由 Brendan Gregg 给出了充分的文档说明。bcc 工具是带有小段嵌入式 C 语言片段的 Python 脚本,这意味着任何对这两种语言熟悉的人都可以轻松修改它们。据当前统计,bcc/tools 中有 80 个 Python 脚本,使得系统管理员或开发人员很有可能能够找到与她/他的需求相关的已有脚本。

要了解 VFS 在正在运行中的系统上的工作情况,请尝试使用简单的 vfscount 或 vfsstat 脚本,这可以看到每秒都会发生数十次对 vfs_open() 及其相关的调用。

vfsstat.py 是一个带有嵌入式 C 片段的 Python 脚本,它只是计数 VFS 函数调用。

作为一个不太重要的例子,让我们看一下在运行的系统上插入 USB 记忆棒时 sysfs 中会发生什么。

用 eBPF 观察插入 USB 记忆棒时 /sys 中会发生什么,简单的和复杂的例子。

在上面的***个简单示例中,只要 sysfs_create_files() 命令运行,trace.py bcc 工具脚本就会打印出一条消息。我们看到 sysfs_create_files() 由一个 kworker 线程启动,以响应 USB 棒的插入事件,但是它创建了什么文件?第二个例子说明了 eBPF 的强大能力。这里,trace.py 正在打印内核回溯(-K 选项)以及 sysfs_create_files() 创建的文件的名称。单引号内的代码段是一些 C 源代码,包括一个易于识别的格式字符串,所提供的 Python 脚本引入 LLVM 即时编译器(JIT) 来在内核虚拟机内编译和执行它。必须在第二个命令中重现完整的 sysfs_create_files() 函数签名,以便格式字符串可以引用其中一个参数。在此 C 片段中出错会导致可识别的 C 编译器错误。例如,如果省略 -I 参数,则结果为“无法编译 BPF 文本”。熟悉 C 或 Python 的开发人员会发现 bcc 工具易于扩展和修改。

插入 USB 记忆棒后,内核回溯显示 PID 7711 是一个 kworker 线程,它在 sysfs 中创建了一个名为 events 的文件。使用 sysfs_remove_files() 进行相应的调用表明,删除 USB 记忆棒会导致删除该 events 文件,这与引用计数的想法保持一致。在 USB 棒插入期间(未显示)在 eBPF 中观察 sysfs_create_link() 表明创建了不少于 48 个符号链接。

无论如何,events 文件的目的是什么?使用 cscope 查找函数 __device_add_disk()显示它调用 disk_add_events(),并且可以将 “mediachange” 或 “ejectrequest” 写入到该文件。这里,内核的块层通知用户空间该 “磁盘” 的出现和消失。考虑一下这种检查 USB 棒的插入的工作原理的方法与试图仅从源头中找出该过程的速度有多快。

只读根文件系统使得嵌入式设备成为可能

确实,没有人通过拔出电源插头来关闭服务器或桌面系统。为什么?因为物理存储设备上挂载的文件系统可能有挂起的(未完成的)写入,并且记录其状态的数据结构可能与写入存储器的内容不同步。当发生这种情况时,系统所有者将不得不在下次启动时等待 fsck 文件系统恢复工具 运行完成,在最坏的情况下,实际上会丢失数据。

然而,狂热爱好者会听说许多物联网和嵌入式设备,如路由器、恒温器和汽车现在都运行着 Linux。许多这些设备几乎完全没有用户界面,并且没有办法干净地让它们“解除启动”。想一想启动电池耗尽的汽车,其中运行 Linux 的主机设备 的电源会不断加电断电。当引擎最终开始运行时,系统如何在没有长时间 fsck 的情况下启动呢?答案是嵌入式设备依赖于只读根文件系统(简称 ro-rootfs)。

ro-rootfs 是嵌入式系统不经常需要 fsck 的原因。

ro-rootfs 提供了许多优点,虽然这些优点不如耐用性那么显然。一个是,如果 Linux 进程不可以写入,那么恶意软件也无法写入 /usr 或 /lib。另一个是,基本上不可变的文件系统对于远程设备的现场支持至关重要,因为支持人员拥有理论上与现场相同的本地系统。也许最重要(但也是最微妙)的优势是 ro-rootfs 迫使开发人员在项目的设计阶段就决定好哪些系统对象是不可变的。处理 ro-rootfs 可能经常是不方便甚至是痛苦的,编程语言中的常量变量经常就是这样,但带来的好处很容易偿还这种额外的开销。

对于嵌入式开发人员,创建只读根文件系统确实需要做一些额外的工作,而这正是 VFS 的用武之地。Linux 需要 /var 中的文件可写,此外,嵌入式系统运行的许多流行应用程序会尝试在 $HOME 中创建配置的点文件。放在家目录中的配置文件的一种解决方案通常是预生成它们并将它们构建到 rootfs 中。对于 /var,一种方法是将其挂载在单独的可写分区上,而 / 本身以只读方式挂载。使用绑定或叠加挂载是另一种流行的替代方案。

绑定和叠加挂载以及在容器中的使用运行 man mount 是了解绑定挂载bind mount和叠加挂载overlay mount的***办法,这种方法使得嵌入式开发人员和系统管理员能够在一个路径位置创建文件系统,然后以另外一个路径将其提供给应用程序。对于嵌入式系统,这代表着可以将文件存储在 /var 中的不可写闪存设备上,但是在启动时将 tmpfs 中的路径叠加挂载或绑定挂载到 /var 路径上,这样应用程序就可以在那里随意写它们的内容了。下次加电时,/var 中的变化将会消失。叠加挂载为 tmpfs 和底层文件系统提供了联合,允许对 ro-rootfs 中的现有文件进行直接修改,而绑定挂载可以使新的空 tmpfs 目录在 ro-rootfs 路径中显示为可写。虽然叠加文件系统是一种适当的文件系统类型,而绑定挂载由 VFS 命名空间工具实现的。

根据叠加挂载和绑定挂载的描述,没有人会对 Linux 容器 中大量使用它们感到惊讶。让我们通过运行 bcc 的 mountsnoop 工具监视当使用 systemd-nspawn 启动容器时会发生什么:

在 mountsnoop.py 运行的同时,system-nspawn 调用启动容器。

让我们看看发生了什么:

在容器 “启动” 期间运行 mountsnoop 可以看到容器运行时很大程度上依赖于绑定挂载。(仅显示冗长输出的开头)

这里,systemd-nspawn 将主机的 procfs 和 sysfs 中的选定文件按其 rootfs 中的路径提供给容器。除了设置绑定挂载时的 MS_BIND 标志之外,mount 系统调用的一些其它标志用于确定主机命名空间和容器中的更改之间的关系。例如,绑定挂载可以将 /proc 和 /sys 中的更改传播到容器,也可以隐藏它们,具体取决于调用。

总结

理解 Linux 内部结构看似是一项不可能完成的任务,因为除了 Linux 用户空间应用程序和 glibc 这样的 C 库中的系统调用接口,内核本身也包含大量代码。取得进展的一种方法是阅读一个内核子系统的源代码,重点是理解面向用户空间的系统调用和头文件以及主要的内核内部接口,这里以 file_operations 表为例。file_operations 使得“一切都是文件”得以可以实际工作,因此掌握它们收获特别大。*** fs/ 目录中的内核 C 源文件构成了虚拟文件系统的实现,虚拟文件系统是支持流行的文件系统和存储设备的广泛且相对简单的互操作性的垫片层。通过 Linux 命名空间进行绑定挂载和覆盖挂载是 VFS 魔术,它使容器和只读根文件系统成为可能。结合对源代码的研究,eBPF 内核工具及其 bcc 接口使得探测内核比以往任何时候都更简单。

原文标题:详解 Linux 中的虚拟文件系统

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

有没有能用在51单片机平台上的语音芯片? 最近看了一下云知声的蜂鸟M系列的离线语音,但是研究了半天不知道能不能移植到51单片机的平台上(就是通过串口通讯),后来又看... 发表于 03-11 17:08 • 264次 阅读 Tina Linux 系统介绍 Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开... 发表于 03-11 15:05 • 1423次 阅读 提高Linux服务器性能的20个技巧  Linux功能丰富、强大、灵活,你可以用它完成各种任务,在这篇文章中,我们将讨论一些提高Linux.... 的头像 Linux爱好者 发表于 03-11 10:14 • 99次 阅读 51点灯与Linux驱动点灯的区别 嵌入式初学者入门的第一个“项目”就是LED点灯,那么,本文带你看看51、STM32、Linux点灯有.... 的头像 strongerHuang 发表于 03-10 17:37 • 1137次 阅读 什么是分布式文件系统 我们无时无刻不在使用文件系统,进行开发时在使用文件系统,浏览网页时在使用文件系统,玩手机时也在使用文.... 的头像 strongerHuang 发表于 03-10 16:21 • 219次 阅读 为VisionFive星光板上创建Debian系统镜像 在RISC-V 星光板VisionFive上创建Debian/Linux系统 发表于 03-09 20:52 • 4次 阅读 为VisionFive星光板上创建Debian系统镜像 Linux内核代码修改将为性能测试获8450%提升 Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随.... 的头像 马哥Linux运维 发表于 03-09 14:16 • 160次 阅读 怎样去搭建基于rk3288的android(和linux)平台软件运行环境呢 怎样去搭建基于rk3288的android(和linux)平台软件运行环境呢?有哪些搭建步骤呢?... 发表于 03-09 07:42 • 175次 阅读 怎样将linux debian串口波特率统一改到115200呢 如何对linux debian源码进行重新编译呢? 怎样将linux debian串口波特率统一改到115200呢? ... 发表于 03-09 07:31 • 123次 阅读 Arm linux 单板接入阿里云物联网实现 近年来物联网深入生活中的方方面面,万物互联。阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平... 发表于 03-09 07:27 • 791次 阅读 RK3328 linux命令是怎样进入gpio口的呢 怎样去查看RK3328主板的gpio口呢? RK3328 linux命令是怎样进入gpio口的呢? ... 发表于 03-09 07:09 • 104次 阅读 YoC开发环境设置手册 一、前言 根据开发用户组的不同,YoC 支持在 Linux 命令行环境和 Windows CDK IDE 中进行开发。本节介绍如何在 W... 发表于 03-09 07:02 • 347次 阅读 Linux驱动程序支持通过I2C和SPI总线进行通信吗 Linux驱动程序支持哪些设备呢? Linux驱动程序支持通过I2C和SPI总线进行通信吗? ... 发表于 03-09 06:33 • 91次 阅读 YoC系统编译用户手册 作者:夏朗 一、前言 YoC系统在不同的开发环境下编译方式不同。通常,在 Windows 上使用 IDE 进行开发是简单明了的。... 发表于 03-09 06:26 • 255次 阅读 如何对RK3399 Android7.1进行编译呢 怎样去设置Linux编译环境呢?如何对RK3399 Android7.1进行编译呢?有哪些编译步骤? ... 发表于 03-09 06:14 • 116次 阅读 Linux私房菜基础篇-第三版 Linux私房菜基础篇-第三版免费下载。 发表于 03-07 16:46 • 28次 阅读 《Linux命令行大全》(英文版) [美]William E. Shotts Jr. 著 发表于 03-07 16:29 • 15次 阅读 i.MX6ULL嵌入式Linux开发2-uboot移植实践 上篇文章,我们介绍了如何使用NXP原厂的uboot进行编译和烧写,将uboot运行在自己的开发板上。.... 的头像 码农爱学习 发表于 03-07 09:00 • 1610次 阅读 i.MX6ULL嵌入式Linux开发2-uboot移植实践 i.MX6ULL嵌入式Linux开发1-uboot移植初探 本系列教程以i.MX6ULL处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与.... 的头像 码农爱学习 发表于 03-07 08:57 • 1120次 阅读 i.MX6ULL嵌入式Linux开发1-uboot移植初探 万象奥科RZ G2L核心板高低温测试 评估测试RZ/G2L核心板环境适应性,测试低温启动、高温工作、高低温循环状态下的工作情况。 的头像 武汉万象奥科 发表于 03-03 15:27 • 10次 阅读 万象奥科RZ G2L核心板高低温测试 RZ G2L核心板以太网接口性能测试 武汉万象奥科RZ/G2L核心板支持2路千兆以太网接口,评估测试RZ/G2L双网口实际传输速率。 的头像 武汉万象奥科 发表于 03-03 14:04 • 10次 阅读 RZ G2L核心板以太网接口性能测试 RZ/G2L核心板功耗测试 测试RZ/G2L核心板静态功耗与CPU满负载时的负载功耗,辅助产品设计中的散热方案评估。 的头像 武汉万象奥科 发表于 03-03 11:35 • 9次 阅读 RZ/G2L核心板功耗测试 linux常用命令大全 linux常用命令大全,一些常用的命令都可以找到 发表于 03-03 09:20 • 39次 阅读 为什么要在汽车上使用SOA架构 整车E/E架构升级,硬件架构上从分布式ECU向域集中式,进一步向中央集中式+区域控制器升级; 发表于 03-02 09:15 • 52次 阅读 为什么要在汽车上使用SOA架构 瑞萨电子推出64位RISC-V CPU内核RZ/Five通用MPU,开创RISC-V技术先河 瑞萨电子今日宣布,推出基于64位RISC-V CPU内核的RZ/Five通用微处理器(MPU)——R.... 发表于 03-01 13:54 • 611次 阅读 瑞萨电子推出64位RISC-V CPU内核RZ/Five通用MPU,开创RISC-V技术先河 keil5+STM32F103C8T6设计的智能插座+人体感应灯 支持跨平台编译运行 这是基于STM32设计的智能插座+人体感应灯。SRM32F103C8T6最小系统板、红外热释电人体感.... 的头像 DS小龙哥-嵌入式技术 发表于 02-28 13:19 • 1365次 阅读 keil5+STM32F103C8T6设计的智能插座+人体感应灯 支持跨平台编译运行 迅为iTOP-STM32MP157开发板 迅为ITOP-STM32MP157是基于ST的STM32MP157芯片开发的一款开发平台。在STM3.... 发表于 02-23 14:43 • 18次 阅读 迅为STM32MP157开发板入门教程之外设功能验证 迅为STM32MP157开发板入门教程之外设功能验证 的头像 平常心0 发表于 02-23 14:16 • 27次 阅读 迅为STM32MP157开发板入门教程之外设功能验证 国产平台T3如何快速部署电力能源神器-Docker容器 前 言随着电网数据信息化的深入,电网的各种应用服务增长迅速,原有应用服务部署方式面临着资源利用率低、.... 的头像 Tronlong创龙科技 发表于 02-17 13:56 • 24次 阅读 国产平台T3如何快速部署电力能源神器-Docker容器 Petalinux2020.01 内核DMA驱动调试说明 Petalinux2020.01 内核DMA驱动调试过程分享 的头像 赛灵思 发表于 02-16 16:21 • 98次 阅读 为什么要用C语言实现面向对象   不知道有多少人去了解过语言的发展史,早期C语言的语法功能其实比较简单。随着应用需求和场景的变化,.... 的头像 硬件攻城狮 发表于 02-16 16:19 • 373次 阅读 为什么要用C语言实现面向对象 Linux编程入门 Linux编程入门 发表于 02-16 14:55 • 54次 阅读 如何配置和操作Linux驱动程序开发板 本文档概述了利用Linux开发板为 Linux 内核开发驱动程序的基础知识,并简单介绍了如何配置和操.... 的头像 德州仪器 发表于 02-15 13:36 • 320次 阅读 如何配置和操作Linux驱动程序开发板 选型必备!最新最全的工业核心板目录大全来了!! 随着嵌入式技术的发展,越来越多的处理器应运而生。除了国外的主流半导体厂家,国内的半导体厂家也异军突起.... 的头像 Tronlong创龙科技 发表于 02-15 09:30 • 25次 阅读 选型必备!最新最全的工业核心板目录大全来了!! 一文详细了解五种IO模型 五种IO模型包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。 的头像 硬件攻城狮 发表于 02-14 14:38 • 484次 阅读 一文详细了解五种IO模型 Linux总线、设备、驱动模型的探究 Linux总线、设备、驱动模型的探究 发表于 02-14 12:01 • 49次 阅读 Cortex-M可以跑Linux操作系统吗? ARM处理器的体系结构定义了指令集(ISA)和基于这一体系结构下处理器的模型。ARM的指令集从ARM.... 发表于 02-08 15:55 • 35次 阅读 Cortex-M可以跑Linux操作系统吗? Wiley.Linux.Bible.2010.Edition电子教材分享 Wiley.Linux.Bible.2010.Edition电子教材分享 发表于 02-08 15:55 • 38次 阅读 51、STM32、Linux点灯有什么区别? 嵌入式初学者入门的第一个“项目”就是LED点灯,那么,本文带你看看51、STM32、Linux点灯有.... 发表于 02-08 15:32 • 84次 阅读 51、STM32、Linux点灯有什么区别? U-Boot架构浅析 导读:嵌入式Linux系统搭建,bootloader是必不可少的一环,而U-Boot已成嵌入式Lin.... 发表于 02-07 11:56 • 44次 阅读 U-Boot架构浅析 深度解析U-Boot网络实现 对于U-Boot而言,并没有完整的实现上述模型,u-boot需要控制固件的尺寸,所以根据需要做了一些.... 发表于 02-07 11:53 • 41次 阅读 深度解析U-Boot网络实现 阅读内核系列之内核调度器为何全局导出 [导读] Linux内核代码庞大,阅读内核书籍总觉得云山雾绕,纸上得来终觉浅,希望通过阅读代码撰写笔.... 发表于 02-07 11:49 • 32次 阅读 阅读内核系列之内核调度器为何全局导出 关于MMU那些事儿 如果我们一直是单任务处理,则不会有任何问题,也或者应用程序所需的内存总是非常小,则这种架构是不会有任.... 发表于 02-07 11:27 • 32次 阅读 关于MMU那些事儿 如何使用v4l2 API读取摄像头 V4L2是Video For Linux的第二个版本,它是Linux的视频捕获的API。在这里,您可.... 发表于 02-07 11:16 • 23次 阅读 如何使用v4l2 API读取摄像头 上古神器vim系列之初探 [导读] 一直以来VIM也用一些,但是用的不熟,最近看了些文章,发现这个东西有必要发大力气系统的练习.... 发表于 02-07 11:13 • 45次 阅读 上古神器vim系列之初探 openwifi的射频配置和数字中频设计 这里介绍openwifi项目([链接])的射频和数字中频设计的一些考虑。这些内容也都在openwif.... 发表于 02-07 11:06 • 20次 阅读 openwifi的射频配置和数字中频设计 没有键盘显示器,也能使用EAIDK-310? 近期有部分小伙伴表示,收到了购买的EAIDK-310开发套件。但是,自己只有一台笔记本电脑,如何才能.... 发表于 02-07 11:06 • 16次 阅读 没有键盘显示器,也能使用EAIDK-310? 深入解析Linux下 Platform_device 及Platform_driver [导读] 前文分析了Linux设备驱动的驱动模型,本文来聊聊Platform_driver/Plat.... 发表于 02-07 10:10 • 64次 阅读 深入解析Linux下 Platform_device 及Platform_driver RT-Thread学习笔记分享 我是从2020年11月初开始学习RT-Thread实时操作系统的,在学习RT-Thread之前,我接.... 的头像 RTThread物联网操作系统 发表于 01-27 18:52 • 638次 阅读 openwifi OFDM接收机信道估计优化 openwifi的接收机一直性能比较弱。具体表现就是如果测量吞吐,那么下行(流量方向是openwif.... 发表于 01-26 18:06 • 41次 阅读 openwifi OFDM接收机信道估计优化 基于RK3399微服务器,移植gmrender-resurrect,实现QPlay 首先感谢网友的文章分享《云芯一号试用---更新固件方法+支持wifi》,之前板子无法连接WIFI,导.... 发表于 01-26 17:42 • 46次 阅读 基于RK3399微服务器,移植gmrender-resurrect,实现QPlay 在云芯一号中安装Python3和HomeAssistant 第一步:安装Python3打开Linux系统命令行窗口,输入:sudo apt-get instal.... 发表于 01-26 17:40 • 43次 阅读 在云芯一号中安装Python3和HomeAssistant 云芯一号优缺点 微服务转型给我们带来了一系列的问题,严格的部署微服务集群需要的物理机成倍增加,云服务器厂商低价引诱上.... 发表于 01-26 17:38 • 42次 阅读 云芯一号优缺点 彻底弄懂TCP协议:从三次握手说起 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是.... 发表于 01-26 17:23 • 36次 阅读 彻底弄懂TCP协议:从三次握手说起 Linux 内核架构分析 用户应用层: 特定Linux系统上使用的应用程序集会有所不同,具体取决于计算机系统的用途,但典型示例.... 发表于 01-26 17:03 • 24次 阅读 Linux 内核架构分析 Linux 如何在emmc增加分区《Rice linux 学习开发》 本文描述是基于高通平台,在emmc上增加一块分区,并挂载自己制作的ext4格式的镜像。作者是第一次弄.... 发表于 01-25 20:06 • 23次 阅读 Linux 如何在emmc增加分区《Rice linux 学习开发》 啥? 一行代码不敲就构建三线制SPI驱动? [导读] 最近使用ZYNQ做一个高速数据采集,需要访问一个ADI的高速模数采样芯片,该芯片是利用三线.... 发表于 01-25 19:51 • 47次 阅读 啥? 一行代码不敲就构建三线制SPI驱动? openwifi的2020总结以及未来展望(视频) 使用知乎的文章转视频功能,稍加调整即可。十分方便。原始的知乎文章在此:openwifi的2020总结.... 发表于 01-25 19:32 • 50次 阅读 openwifi的2020总结以及未来展望(视频) one man army(孤胆英雄)0 - 序 如果你搜索one man army,一般的解释就是电影里的那种孤胆英雄,强调一个人可以灭掉一支军队。.... 发表于 01-25 19:20 • 51次 阅读 one man army(孤胆英雄)0 - 序 one man army(孤胆英雄)2 - WiFi芯片开放的不同层次 可编程VS可配置:一个东西可编程意味着你可以在上面跑你写的程序,一个东西可配置意味着你只是用你写的外.... 发表于 01-25 19:19 • 34次 阅读 one man army(孤胆英雄)2 - WiFi芯片开放的不同层次 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU) TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等... 发表于 09-25 11:51 • 530次 阅读 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有