创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

如何区别Linux文件系统呢?

LinuxHub 来源:YXQ 2019-08-09 18:00 次阅读

根据早期的 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
    +关注

    关注

    73

    文章

    7543

    浏览量

    193656
  • 文件系统
    +关注

    关注

    0

    文章

    121

    浏览量

    18369

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

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

收藏 人收藏

    评论

    相关推荐

    Linux与Windows文件换行符的区别

    当一个文件在Windows和Linux上交替操作后,经常遇到一些莫名其妙的问题,如shell脚本无法....
    的头像 一口Linux 发表于 06-27 15:18 10次 阅读

    iCore-3568JQ-工具-Linux_Upgrade_Tool_v1.59

    iCore-3568JQ板载 RK3568J 四核 64 位工业级处理器,支持 8GB 大内存;支持....
    发表于 06-27 14:27 3次 阅读
    iCore-3568JQ-工具-Linux_Upgrade_Tool_v1.59

    TI的Sitara AM6442实时网络处理器

      AM6442 的集成 Cortex-A53 内核为 Linux 应用程序提供了理想的计算特性,并....
    发表于 06-27 14:24 86次 阅读
    TI的Sitara AM6442实时网络处理器

    iCore-3568JQ-源代码-Linux_SDK源码包

    iCore-3568JQ板载 RK3568J 四核 64 位工业级处理器,支持 8GB 大内存;支持....
    发表于 06-27 14:23 6次 阅读
    iCore-3568JQ-源代码-Linux_SDK源码包

    iCore-3568JQ-工具-firefly-linux-repack

    iCore-3568JQ板载 RK3568J 四核 64 位工业级处理器,支持 8GB 大内存;支持....
    发表于 06-27 14:18 3次 阅读
    iCore-3568JQ-工具-firefly-linux-repack

    iCore-3568JQ-资源-linux-headers

    iCore-3568JQ板载 RK3568J 四核 64 位工业级处理器,支持 8GB 大内存;支持....
    发表于 06-27 14:13 3次 阅读
    iCore-3568JQ-资源-linux-headers

    基于ANSI C加密库的RTCA DO-178C的DAL A支持

      鉴于与重新启动航空电子系统相关的严格性能要求,wolfSSL 的服务组织随时为希望跟上公司技术的....
    的头像 星星科技指导员 发表于 06-27 14:09 86次 阅读

    嵌入式Linux上的以太网TSN简介

    这些是您可能每天都在使用的各种基于 Linux 的嵌入式系统背后的关键构建块,甚至可能不知道它们运行....
    的头像 星星科技指导员 发表于 06-27 11:56 109次 阅读
    嵌入式Linux上的以太网TSN简介

    【赛昉科技昉·星光RISC-V单板计算机试用体验】运行边缘AI框架——TFLM

    一、TFLM简介 TFLM是TensorFlow Lite for Microcontrollers项目的简称,全称翻译过来就是“适用于微控制器的Ten...
    发表于 06-26 21:59 221次 阅读
    【赛昉科技昉·星光RISC-V单板计算机试用体验】运行边缘AI框架——TFLM

    【时擎科技AT1000开发板试用体验】官方Linux sdk编译配置

    本来不打算写这个编译配置,只是写给没有使用过linux编译源码的小伙伴说说。Ubuntu版本: Ubuntu 20.04.3 LTS。 在收到时...
    发表于 06-26 17:13 341次 阅读

    【赛昉科技昉·星光RISC-V单板计算机试用体验】Debian系统Wi-Fi联网和国内apt源

    烧写Debian镜像 开始本篇之前,需要先下载、烧录Debian系统镜像。 这里使用了社区**Houge_Langley**大佬最新Debian镜像...
    发表于 06-26 11:07 426次 阅读
    【赛昉科技昉·星光RISC-V单板计算机试用体验】Debian系统Wi-Fi联网和国内apt源

    NVIDIA DOCA数据处理器软件正式开放

    NVIDIA 联合发起 Linux 基金会项目,致力于实现数据中心创新的大众化;进一步向软件提供商、....
    的头像 NVIDIA英伟达 发表于 06-24 15:00 97次 阅读

    求助,可以提供CH343G MAC和Linux的最新驱动吗?

    WCH,您好!可以提供一下CH343G MAC和Linux的最新驱动吗?   ...
    发表于 06-24 12:02 89次 阅读

    Linux内存背后的那些事儿

    当要学习一个新知识点时,比较好的过程是先理解出现这个技术点的背景原因,同期其他解决方案,新技术点解决....
    的头像 一口Linux 发表于 06-24 11:35 178次 阅读

    嵌入式必学!硬件资源接口详解——基于ARM AM335X开发板 (下)

    前 言本文档主要介绍嵌入式初级学习者,在使用核心板/开发板过程中,所做的一些硬件接口资源以及设计注意事项等内容。本篇文章...
    发表于 06-24 10:58 4231次 阅读

    Linux用电功耗调优的笔记分享

    整理一些Linux用电功耗调优的笔记,分享给小伙伴,关于用电调优个人觉得
    的头像 一口Linux 发表于 06-23 15:19 263次 阅读

    go项目怎么让docker镜像体积减小

    go 项目怎么让 docker 镜像体积减小?本文做了详细介绍。
    的头像 马哥Linux运维 发表于 06-23 10:49 117次 阅读

    Vim编辑器的使用学习和使用技巧

    首先我们先理清楚一个概念:编辑器和编译器和调试器!
    的头像 马哥Linux运维 发表于 06-23 10:43 204次 阅读

    PcapPlusPlus网络嗅探和包装分析制作框架

    ./oschina_soft/PcapPlusPlus.zip
    发表于 06-23 10:26 6次 阅读
    PcapPlusPlus网络嗅探和包装分析制作框架

    A13-OLinuXino-MICRO的特征

    描述 带有 A13 ARM SOC 256MB RAM 的嵌入式 Linux 板 - A13-OLinuXino-MICRO 特征 1GHz 的 A13 C...
    发表于 06-23 06:08 38次 阅读

    【赛昉科技昉·星光RISC-V单板计算机试用体验】Debian系统内核编译与安装升级

    在赛昉的RVSPACE社区上,提供了很多当前已经适配的操作系统: 我比较喜欢的是Debian系统,比纯粹稳定,所以这次下载...
    发表于 06-22 20:47 774次 阅读

    香橙派RK3399开发板OrangePi4 LTS在linux上的GPU测试说明

    1、Linux4.4 和 Linux5.10 Debian 系统 GPU 的测试说明 注意,Linux4.4 Debian10 和 Linux5.10 Debian11 系统使用的...
    发表于 06-22 20:17 401次 阅读
    香橙派RK3399开发板OrangePi4 LTS在linux上的GPU测试说明

    虚拟化如何在嵌入式软件开发中展示实力

      所有这些产品和设计优势都表明嵌入式市场虚拟技术的长期、持续趋势。尽管可能需要改变嵌入式设计理念,....
    的头像 星星科技指导员 发表于 06-22 17:06 248次 阅读
    虚拟化如何在嵌入式软件开发中展示实力

    如何判断硬件是否支持嵌入式Linux

      如果该部分不受支持,则值得拥有一份最新的 Linux 内核源代码以进行交叉引用。如果最近添加了支....
    的头像 星星科技指导员 发表于 06-22 16:23 193次 阅读
    如何判断硬件是否支持嵌入式Linux

    关于Google Flutter 3更新内容

    又到了 Flutter 稳定版发布时间,我们无比自豪地宣布推出 Flutter 3!仅 3 个月前,....
    的头像 谷歌开发者 发表于 06-22 16:13 187次 阅读

    提高基于Linux的网络连接系统的安全性

      所描述的服务和方法使用 IPv4 协议。IPv6 协议的安全配置被忽略,这使得保持启用是不安全的....
    的头像 星星科技指导员 发表于 06-22 14:39 100次 阅读

    基于Linux的虚拟交换机Open vSwitch项目

      要点: Open vSwitch 是一个著名的基于 Linux 的虚拟交换机的开源项目。作为 C....
    的头像 星星科技指导员 发表于 06-22 14:31 67次 阅读

    createrepo创建yum源的工具

    ./oschina_soft/createrepo.zip
    发表于 06-22 14:30 6次 阅读
    createrepo创建yum源的工具

    基于Linux的物联网设备的安全案例

      对于物联网产品,在设计之初就将安全性构建到产品中是绝对必要的。如果您不这样做,您的业务的关键部分....
    的头像 星星科技指导员 发表于 06-22 14:28 84次 阅读

    简化SBC的嵌入式Linux软件开发

      在 Eclipse 框架内,EMAC 使用交叉编译来缓解将嵌入式开发环境从标准桌面环境中抽象出来....
    的头像 星星科技指导员 发表于 06-22 11:48 144次 阅读
    简化SBC的嵌入式Linux软件开发

    llvm-mctoll将二进制文件转换为LLVM IR

    ./oschina_soft/llvm-mctoll.zip
    发表于 06-22 11:35 15次 阅读
    llvm-mctoll将二进制文件转换为LLVM IR

    libss7提供SS7协议的应用程序服务

    ./oschina_soft/libss7.zip
    发表于 06-22 11:27 8次 阅读
    libss7提供SS7协议的应用程序服务

    mptcpd多路径TCP守护程序

    ./oschina_soft/mptcpd.zip
    发表于 06-22 11:18 8次 阅读
    mptcpd多路径TCP守护程序

    嵌入式Linux文件系统管理的工具选择

      嵌入式 Linux 开发人员可以使用平台映像生成器等工具获得对构建复杂文件系统的更多控制,这使得....
    的头像 星星科技指导员 发表于 06-22 11:15 313次 阅读
    嵌入式Linux文件系统管理的工具选择

    使用嵌入式Linux的动态电源管理策略

      对电源管理的需求不会消失。相反,它正在成为移动设备设计中越来越重要的特征。采用强大的电源管理策略....
    的头像 星星科技指导员 发表于 06-22 11:07 133次 阅读

    IP平台支持云连接设备开发

      越来越广泛的高度便携应用平台,如 Linux、Android 和复杂的实时操作系统 (RTOS)....
    的头像 星星科技指导员 发表于 06-22 10:59 132次 阅读

    CO是高效的C++基础库

    ./oschina_soft/co.zip
    发表于 06-21 11:08 11次 阅读
    CO是高效的C++基础库

    Multipass轻量级VM管理器

    ./oschina_soft/multipass.zip
    发表于 06-21 10:21 8次 阅读
    Multipass轻量级VM管理器

    LIB-ZC通用C扩展库

    ./oschina_soft/gitee-lib-zc.zip
    发表于 06-21 10:06 6次 阅读
    LIB-ZC通用C扩展库

    sm64超级马里奥64反编译

    ./oschina_soft/sm64.zip
    发表于 06-21 09:44 8次 阅读
    sm64超级马里奥64反编译

    CN0549状态监测平台及如何利用进行应用程序开发

      当云和本地进程之间存在一致的连接时,可以将不同的算法拆分为我们已经讨论过的需要或可以在本地运行的....
    的头像 星星科技指导员 发表于 06-20 16:49 264次 阅读
    CN0549状态监测平台及如何利用进行应用程序开发

    MISRA C在安全和安全编程中的位置

      从本质上讲,MISRA C 追求的所有目标都在 SPARK 中得到了最好的实现,结合了更强大的基....
    的头像 星星科技指导员 发表于 06-20 16:07 130次 阅读
    MISRA C在安全和安全编程中的位置

    libcurl等第三方库的通用编译方法

    libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, te....
    的头像 一口Linux 发表于 06-20 13:38 169次 阅读

    怎么看待汽车操作系统

    操作系统提供计算机硬件和应用程序之间的接口。这通过遵循编程到操作系统中的规则和程序来限制应用程序使用....
    的头像 要长高 发表于 06-20 11:57 762次 阅读
    怎么看待汽车操作系统

    FastCFS基于块存储的通用分布式文件系统

    ./oschina_soft/gitee-FastCFS.zip
    发表于 06-17 15:17 20次 阅读
    FastCFS基于块存储的通用分布式文件系统

    OpenTomb开源古墓丽影1-5引擎重制版

    ./oschina_soft/OpenTomb.zip
    发表于 06-17 15:10 20次 阅读
    OpenTomb开源古墓丽影1-5引擎重制版

    EpicFV面向Verilog的形式化验证工具

    ./oschina_soft/gitee-EpicFV.zip
    发表于 06-17 14:53 14次 阅读
    EpicFV面向Verilog的形式化验证工具

    Latte基于Plasma的Dock

    ./oschina_soft/latte-dock.zip
    发表于 06-17 11:35 11次 阅读
    Latte基于Plasma的Dock

    FlaxEngine开源3D游戏引擎

    ./oschina_soft/FlaxEngine.zip
    发表于 06-17 11:33 16次 阅读
    FlaxEngine开源3D游戏引擎

    OCLint静态代码分析工具

    ./oschina_soft/oclint.zip
    发表于 06-17 11:21 9次 阅读
    OCLint静态代码分析工具

    栈是什么?栈有什么作用?

    大多数的处理器架构,都有实现硬件栈。有专门的栈指针寄存器,以及特定的硬件指令来完成 入栈/出栈 的操....
    的头像 一口Linux 发表于 06-17 11:19 205次 阅读

    SUSE正式发布SUSE Euler Linux2.0

    面对传统网络存储存在的各种性能和可靠性挑战,SUSE Euler Linux 2.0 提供了基于 R....
    的头像 openEuler 发表于 06-17 11:10 204次 阅读

    SUSE正式发布SUSE Euler Linux 2.0

    2022 年 6 月 16 日,SUSE 正式发布 SUSE Euler Linux 2.0。它是基....
    的头像 科技绿洲 发表于 06-17 10:42 235次 阅读

    汽车应用中AGL虚拟化架构的概述

      根据 EE 的特性,通信总线也可以是关键的或非关键的。为了保证隔离、数据安全和隐私,关键总线仅限....
    的头像 星星科技指导员 发表于 06-17 10:33 158次 阅读
    汽车应用中AGL虚拟化架构的概述

    yadcc C++分布式编译系统

    ./oschina_soft/yadcc.zip
    发表于 06-17 10:23 7次 阅读
    yadcc C++分布式编译系统

    Valve Proton Linux上运行Windows游戏

    ./oschina_soft/Proton.zip
    发表于 06-17 09:38 23次 阅读
    Valve Proton Linux上运行Windows游戏

    Amnesia:The Dark Descent冒险类游戏《失忆症:黑暗后裔》

    ./oschina_soft/AmnesiaTheDarkDescent.zip
    发表于 06-17 09:25 14次 阅读
    Amnesia:The Dark Descent冒险类游戏《失忆症:黑暗后裔》

    通向软件定义联网汽车的AGL路径

      对于 AGL,虚拟化是软件定义的联网汽车支持技术,因为它能够同时托管多个(和隔离的)功能的执行,....
    的头像 星星科技指导员 发表于 06-17 09:13 182次 阅读

    rtthread spiflash挂载elmfat文件系统,扇区应该对应block还是page呢?

    这种文件系统有一个扇区的概念,对应flash的扇区。 但问题是,我现在用的这款spiflash,型号GD5F2GQ5,容量2G byte 没有...
    发表于 06-16 09:35 519次 阅读

    开启DFS,文件系统使用littlefs,ROM和RAM会占用多少呢?

    开启DFS,文件系统使用littlefs,ROM和RAM会占用多少呢?哪位大佬有实际测过吗? ...
    发表于 06-13 09:09 803次 阅读

    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 638次 阅读
    AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)