Linux系统编程-通用文件模型

嵌入式ARM 2020-07-18 00:00

写作目的:

  • 学习 Linux 文件模型相关的知识。

正文目录:

1. Linux 的两大抽象

2. 文件类型

3. 文件描述符

4. 通用文件模型:简介
    4.1 演示 demo
    4.2 相关要点: 与 VFS 的关系

5. 通用文件模型:文件描述符和打开文件的关系
    5.1 相关的内核数据结构
    5.2 列举几种打开文件的情景

1. Linux 的两大抽象

  • 文件是 Linux 系统中最基础最重要的抽象。Linux 遵循一切皆文件的理念。很多交互操作是通过读写文件来完成,即使所涉及的对象看起来并非普通文件。

  • 另外一大抽象是进程。如果说文件是 Linux 系统最重要的抽象概念,进程则仅次于文件。

  • 进程相关的实现复杂且多变,而文件 IO 的实现则相对稳定很多,且更贴近我们的日常操作,所以 以文件作为学习 Linux 内核的切入点是个更好的选择

2. 文件类型

Linux 系统的大多数文件是普通文件或目录,但是也有另外一些文件类型,具体包括如下几种:

  • 普通文件 ( regular file )。

    • 最常用的文件类型,包含了某种形式的数据。至于这种数据是文本还是二进制数据,对于 Linux 内核而言并无区别。

    • 文件中包含的字节可以是任意值,可以以任意方式进行组织。在系统层,除了字节流,Linux 对文件结构没有特定要求

    • 对普通文件内容的解释由处理该文件的应用程序进行。

    • 文件虽然是通过文件名访问,但文件本身其实并没有直接和文件名关联。相反地,与文件关联的是索引节点 (inode,是index node 缩写)。针对驻留于文件系统上的每个文件,文件系统都会为其分配一个 inode。inode 中会保存和文件相关的元数据,如文件修改时间戳、所有者、类型、长度以及文件数据的位置,但不含文件名,文件名由目录文件负责。

    • inode 由 inode number 来标识,可以通过 “ls –li” 查看文件的 inode number。

      # ls -li minicom.log
      12582945 -rw-r--r-- 1 root root 665 Jul 10 18:47 minicom.log
  • 目录文件 ( directory file )。

    • 目录也是一种文件类型,这种文件包含了其他文件的文件名以及 inode number。文件通常是通过文件名从用户空间打开,目录用于提供访问文件时需要的名称。

    • 文件名和 inode 之间的配对称为链接 (link)。映射在物理磁盘上的形式,如简单的表或散列,是通过特定文件系统的内核代码来实现和管理的。

    • 如果用户空间的应用请求打开指定文件,内核会打开包含该文件名的目录,然后根据文件名获取 inode number。通过 inode number 可以找到 inode。inode 包含和文件关联的元数据,其中包括文件数据在磁盘上的存储位置。

  • 硬链接 ( hard link )。

    • 不同的文件名可以链接到到同一个 inode。当不同名称的多个链接映射到同一个索引节点时,我们称该链接为硬链接。

    • 硬链接通常要求链接和文件位于同一文件系统中。

    • 在底层文件系统支持的前提下,也只有超级用户才能创建指向目录的硬链接。

  • 符号链接 ( symbolic link )。

    • 符号链接是对一个文件的间接指针,它与硬链接有所不同,硬链接直接指向文件的 inode。引入符号链接的原因是为了避开硬链接的一些限制

    • 硬链接不能跨越多个文件系统,因为 inode number在自己的文件系统之外没有任何意义。为了跨越文件系统建立链接,Linux 系统实现了符号链接。

  • 特殊文件 (special file)。

    • 特殊文件是使得某些抽象可以适用于文件系统,贯彻一切皆文件的理念。

    • Linux 只支持四种特殊文件:块设备文件、字符设备文件、命名管道 以及 UNIX域套接字

    • 块特殊文件 ( block device file )。提供对设备(如磁盘)带缓冲的访问,每次访问以固定长度为单位进行。

    • 字符特殊文件 ( character device file )。这种类型的文件提供对设备不带缓冲的访问,每次访问长度可变。系统中的所有设备要么是字符特殊文件,要么是块特殊文件。

    • 命名管道 ( named pipes ),通常称为 FIFO,是以文件描述符作为通信信道的 IPC 机制,它可以通过特殊文件来访问。

    • 套接字 ( socket ) 是最后一种特殊文件。socket 是进程间通信的高级形式,支持不同进程间的通信,这两个进程可以在同一台机器,也可以在不同机器。socket 是网络和互联网编程的基础。

在 Linux,可以用 ls/stat 命令 和 stat() 系统调用确定文件类型。

$ ls -li 
12587634 drwxr-xr-x 26 root root      4096 Mar 16 07:49 1.opensource
27396428 lrwxrwxrwx  1 root root        12 Nov 17  2017 Link to ssd_dvd -> /mnt/ssd_dvd
12582945 -rw-r--r--  1 root root       665 Jul 10 18:47 minicom.log

$ stat minicom.log 
  File: 'minicom.log'
  Size: 665        Blocks: 8          IO Block: 4096   regular file
Device: 822h/2082d Inode: 12582945    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-09 09:44:07.101177618 +0800
Modify: 2020-07-10 18:47:20.073532673 +0800
Change: 2020-07-10 18:47:20.073532673 +0800

3. 文件描述符

在 Linux 中,文件必须先打开才能访问。对于内核而言,所有打开的文件都通过文件描述符 ( file descriptor,简称fd ) 引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,使用 open() 或 creat() 返回的文件描述符标识该文件,将其作为参数传送给 read() 或 write()。

  • Linux 系统编程的大部分工作都会涉及打开、操纵、关闭以及其他文件描述符操作;

  • Linux 系统的 Shell 把文件描述符 0 与进程的标准输入 stdin 关联,文件描述符 1 与标准输出 stdout 关联,文件描述符 2 与标准错误 stderr 关联。这是各种 Shell 以及很多应用程序使用的惯例,与 Linux 内核无关。如果不遵循这种惯例,很多 Linux 系统应用程序就不能正常工作;

  • 用户可以重定向文件描述符,甚至可以通过管道把一个程序的输出作为另一个程序的输入。Shell 就是通过这种方式实现重定向和管道的。

  • 在 POSIX 标准中,幻数 0、1、2 虽然已被标准化,但应当把它们替换成符号常量 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 以提高可读性;

  • 文件描述符的范围是 0 ~ OPEN_MAX-1;

  • 文件描述符并非局限于访问普通文件。实际上,文件描述符也可以访问设备文件、管道、FIFO、Socket等。遵循一切皆文件的理念,几乎任何能够读写的东西都可以通过文件描述符来访问。

4. 通用文件模型:简介

Linux 通用文件模型最为显著的特性之一就是 I/O 通用性。也就是说,同一套系统调用 open()、read()、write()、close() 等所执行的 I/O 操作,可施之于所有文件类型,包括设备文件在内。应用程序发起的I/O请求,内核会将其转化为相应的文件系统操作,或者设备驱动程序操作,以此来执行针对目标文件或设备的I/O操作。因此,采用这些系统调用的程序能够处理任何类型的文件。

演示 demo (copy.c):

int main(int argc, char *argv[])
{
    int inputFd, outputFd, openFlags;
    mode_t filePerms;
    ssize_t numRead;
    char buf[BUF_SIZE];

    if (argc != 3 || strcmp(argv[1], "--help") == 0)
        usageErr("%s old-file new-file\n", argv[0]);

    /* Open input and output files */

    inputFd = open(argv[1], O_RDONLY);
    if (inputFd == -1)
        errExit("opening file %s", argv[1]);

    openFlags = O_CREAT | O_WRONLY | O_TRUNC;
    filePerms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
                S_IROTH | S_IWOTH;      /* rw-rw-rw- */
    outputFd = open(argv[2], openFlags, filePerms);
    if (outputFd == -1)
        errExit("opening file %s", argv[2]);

    /* Transfer data until we encounter end of input or an error */

    while ((numRead = read(inputFd, buf, BUF_SIZE)) > 0)
        if (write(outputFd, buf, numRead) != numRead)
            fatal("write() returned error or partial write occurred");
    if (numRead == -1)
        errExit("read");

    if (close(inputFd) == -1)
        errExit("close input");
    if (close(outputFd) == -1)
        errExit("close output");

    exit(EXIT_SUCCESS);
}

运行效果:

$ ./copy test test.old
$ ./copy test /dev/tty
$ ./copy /dev/tty abc.txt

相关要点:

  • 要实现通用 I/O,就必须确保每一种文件系统和每一种文件类型(包括设备文件)都实现了相同的 I/O 系统调用集。由于文件系统或设备文件所特有的操作细节在内核中处理,在编程时通常可以忽略设备专有的因素。一旦应用程序需要访问文件系统或设备的专有功能时,可以选择瑞士军刀般的 ioctl() 系统调用,该调用为通用 I/O 模型之外的专有特性提供了访问接口。

  • 提到通用 I/O,就必须提起虚拟文件系统 (VFS)。为支持各种本机文件系统,且在同时允许访问其他操作系统的文件,Linux 内核在用户进程和文件系统实现之间引入了一个抽象层 VFS。虚拟文件系统基于文件通用模型(common file model,简称CFM)实现这种抽象,它是 Linux 上所有文件系统的基础。

  • 一方面,VFS 提供了一种操作文件、目录及其他对象的统一方法。另一方面,它与各种具体的文件系统的实现达成妥协。我们可以认为,是虚拟文件系统 (VFS) 和通用文件模型 (CFM) 的共同作用为 Linux 提供了访问不同文件系统以及不同类型的文件的 统一API (open()、read()、write()、close())。在本文中,我们将重点放在文件上,忽略文件系统相关的东西。

  • 在 VFS 中,并非所有文件系统都支持同样的功能,有些操作对普通文件是不可缺少的,对某些对象则完全没有意义。即并非每一种文件系统都支持 VFS 中的所有抽象

  • Linux VFS 的实现: 参考 ext2 文件系统,提供一种结构模型,该文件系统模型包含了一个强大文件系统所应具备的所有组件。但该模型是虚拟的,它适应于各种真实的文件系统。所有实现都必须提供可以适应 VFS 定义的结构体的 routines,因此可以充当两个视图之间的过渡。

  • 在 VFS 中,每个文件都关联到一个 inode,我们可以 以 inode 和 inode->file_operations 作为学习通用文件模型和虚拟文件系统的切入点

struct inode {
    umode_t   i_mode;
    ...
    const struct file_operations *i_fop;
    ...
}
struct file_operations {
    struct module *owner;
    loff_t (*llseek) (struct file *, loff_tint);
    ssize_t (*read) (struct file *, char __user *, size_tloff_t *);
    ssize_t (*write) (struct file *, const char __user *, size_tloff_t *);
    ...
    long (*unlocked_ioctl) (struct file *, unsigned intunsigned long);
    long (*compat_ioctl) (struct file *, unsigned intunsigned long);
    int (*mmap) (struct file *, struct vm_area_struct *);
    int (*open) (struct inode *, struct file *);
    int (*flush) (struct file *, fl_owner_t id);
...
} __randomize_layout;

5. 通用文件模型:文件描述符和打开文件的关系

5.1 相关的内核数据结构

内核使用 3 种数据结构来表示一个被打开的文件:

  • 进程级的文件描述符表 ( file descriptor table )。

  • 系统级的打开文件表 ( open file table ) 。

  • 文件系统的 i-node 表 ( i-node table )。

1) 进程级的文件描述符表 ( file descriptor table )

每个进程在进程表 (process table) 中都有一个记录项 (process table entry),即 struct task_struct,内核用它来描述一个进程。在 struct task_struct 中包含了一张打开文件描述符表 (open file descriptors table),由 struct files_struct 里的 struct fdtable 来表示 (Linux-4.14):

struct task_struct {
    ...
    /* Filesystem information: */
 struct fs_struct  *fs;

 /* Open file information: */
 struct files_struct  *files;
        -> struct fdtable *fdt;
    ...
}

每个文件描述符包含:

  • 1> 文件描述符标志 ( file descriptor flags,目前只有一个:close_on_exec,暂不关心 );
  • 2> 指向一个打开文件表项 ( open file table entry) 的指针。
struct fdtable {
    ...
 struct file **fd;      /* current fd array */
 unsigned long *close_on_exec;
 ...
};

2) 系统级的打开文件表 ( open file table )

内核为所有打开文件维持一张打开文件表。每个打开文件表项包含:

  • 1> 文件状态标志 ( file status flags,即 open() 的 flags 参数);

  • 2> 当前文件偏移量 ( current file offset );

  • 3> 指向该文件 inode 表项的指针 (在某些 UNIX 系统中是 vnode pointer,在 Linux 中是 inode pointer)。

inode 结构体和 vnode 结构体名称虽然不同,但是 2 者其实是同一个概念,它们都用于描述存储在硬盘中的文件系统的 inode 数据。注意区别内存里的 inode 结构体对象和硬盘中的 inode 数据。

3) 文件系统的 i-node 表 ( i-node table )

每个打开文件都有一个 inode 对象。inode 对象包含了:

  • 文件类型和对此文件进行各种操作函数的指针。

  • 对于大多数文件,inode 对象还包含了指向该文件系统 inode 数据的指针。

struct inode {
    ...
    /* Stat data, not accessed from path walking */
    unsigned long  i_ino;

    ...
    /* former ->i_op->default_file_ops */
    const struct file_operations *i_fop; 
}

这些信息是在打开文件时从硬盘上读入内存的,所以,文件的所有相关信息都是随时可用的。即 inode 对象包含了文件的所有者、文件长度、指向文件实际数据块在磁盘上所在位置的指针等。

上述三张表的完整关系如下:

5.2 列举几种打开文件的情景

1) 两个独立进程各自打开同一个文件

两个独立进程各自打开了同一文件,则有如下关系:

第一个进程在文件描述符 3 上打开该文件,而另一个进程在文件描述符 4 上打开该文件。打开该文件的每个进程都获得各自的一个打开文件表项,但对一个给定的文件只有一个 inode 节点表项。

之所以每个进程都获得自己的打开文件表项,是因为这可以使每个进程都有它自己的对该文件的当前偏移量。

2) dup(1) 复制文件描述符

dup() 用来复制一个现有的文件描述符。

$ man 2 dup
       #include <unistd.h>
       int dup(int oldfd);

dup(1)后的内核数据结构:

dup() 返回的新文件描述符与参数 oldfd 共享同一个打开文件表项。

3) fork 之后父进程和子进程之间对打开文件的共享



假定所用的描述符是在fork之前打开的,如果父进程和子进程写同一描述符指向的文件,但又没有任何形式的同步,如使父进程等待子进程,那么它们的输出就会相互混合。


三、总结

不好意思,这周身体不太舒服,文章拖更了,各位见谅。

鉴于大多数人的注意力无法在一篇文章里上集中太久,更多的内容请大家先自行去阅读吧,不是自己理解到的东西是消化不了的。有机会的话我会把更多的读书心得放在后面的文章。

更多值得学习的知识点

  • stat() 的使用方法;
  • 复制文件描述符的方法 (dup, fcntl) 与使用场景;
  • 目录相关的操作;
  • 高级文件 io 接口;
  • 文件 io 与标准 io 的对比;
  • VFS 的具体实现;
  • ext2 文件系统的实现;
  • ...

四、相关参考

1. 参考书籍

  • 《Linux 程序设计》(BLP)

    • 3 - 文件操作
  • 《Linux 系统编程》(LSP)

    • 1.4.1 - 文件和文件系统
  • 《UNIX 环境高级编程》(APUE)

    • 3.10 - 文件共享
    • 3.12 - dup
    • 4.3 - 文件类型
    • 8.3 - fork 文件共享
  • 《Linux/UNIX 系统编程手册》(TLPI)

    • 2.5 - 文件I/O模型
    • 4 - 文件I/O:通用的I/O模型
    • 5.4 - 文件描述符和打开文件之间的关系
  • 《linux内核设计与实现》(LKD)

    • 13 - 虚拟文件系统
  • 《深入理解LINUX内核》(ULK)

    • 3.2 - 进程描述符
    • 12 - 虚拟文件系统
  • 《深入Linux内核架构》(PLKA)

    • 6.3 - 与文件系统关联
    • 8.2 - 通用文件模型
  • 《UNIX 操作系统设计》

    • 4 - 文件的内部表示



嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论 (0)
  • 据先科电子官方信息,其产品包装标签将于2024年5月1日进行全面升级。作为电子元器件行业资讯平台,大鱼芯城为您梳理本次变更的核心内容及影响:一、标签变更核心要点标签整合与环保优化变更前:卷盘、内盒及外箱需分别粘贴2张标签(含独立环保标识)。变更后:环保标识(RoHS/HAF/PbF)整合至单张标签,减少重复贴标流程。标签尺寸调整卷盘/内盒标签:尺寸由5030mm升级至**8040mm**,信息展示更清晰。外箱标签:尺寸统一为8040mm(原7040mm),提升一致性。关键信息新增新增LOT批次编
    大鱼芯城 2025-04-01 15:02 186浏览
  • 引言在语音芯片设计中,输出电路的设计直接影响音频质量与系统稳定性。WT588系列语音芯片(如WT588F02B、WT588F02A/04A/08A等),因其高集成度与灵活性被广泛应用于智能设备。然而,不同型号在硬件设计上存在关键差异,尤其是DAC加功放输出电路的配置要求。本文将从硬件架构、电路设计要点及选型建议三方面,解析WT588F02B与F02A/04A/08A的核心区别,帮助开发者高效完成产品设计。一、核心硬件差异对比WT588F02B与F02A/04A/08A系列芯片均支持PWM直推喇叭
    广州唯创电子 2025-04-01 08:53 179浏览
  • 职场之路并非一帆风顺,从初入职场的新人成长为团队中不可或缺的骨干,背后需要经历一系列内在的蜕变。许多人误以为只需努力工作便能顺利晋升,其实核心在于思维方式的更新。走出舒适区、打破旧有框架,正是让自己与众不同的重要法宝。在这条道路上,你不只需要扎实的技能,更需要敏锐的观察力、不断自省的精神和前瞻的格局。今天,就来聊聊那改变命运的三大思维转变,让你在职场上稳步前行。工作初期,总会遇到各式各样的难题。最初,我们习惯于围绕手头任务来制定计划,专注于眼前的目标。然而,职场的竞争从来不是单打独斗,而是团队协
    优思学院 2025-04-01 17:29 178浏览
  • 探针本身不需要对焦。探针的工作原理是通过接触被测物体表面来传递电信号,其精度和使用效果取决于探针的材质、形状以及与检测设备的匹配度,而非对焦操作。一、探针的工作原理探针是检测设备中的重要部件,常用于电子显微镜、坐标测量机等精密仪器中。其工作原理主要是通过接触被测物体的表面,将接触点的位置信息或电信号传递给检测设备,从而实现对物体表面形貌、尺寸或电性能等参数的测量。在这个过程中,探针的精度和稳定性对测量结果具有至关重要的影响。二、探针的操作要求在使用探针进行测量时,需要确保探针与被测物体表面的良好
    锦正茂科技 2025-04-02 10:41 56浏览
  •        在“软件定义汽车”的时代浪潮下,车载软件的重要性日益凸显,软件在整车成本中的比重逐步攀升,已成为汽车智能化、网联化、电动化发展的核心驱动力。车载软件的质量直接关系到车辆的安全性、可靠性以及用户体验,因此,构建一套科学、严谨、高效的车载软件研发流程,确保软件质量的稳定性和可控性,已成为行业共识和迫切需求。       作为汽车电子系统领域的杰出企业,经纬恒润深刻理解车载软件研发的复杂性和挑战性,致力于为O
    经纬恒润 2025-03-31 16:48 87浏览
  • REACH和RoHS欧盟两项重要的环保法规有什么区别?适用范围有哪些?如何办理?REACH和RoHS是欧盟两项重要的环保法规,主要区别如下:一、核心定义与目标RoHS全称为《关于限制在电子电器设备中使用某些有害成分的指令》,旨在限制电子电器产品中的铅(Pb)、汞(Hg)、镉(Cd)、六价铬(Cr6+)、多溴联苯(PBBs)和多溴二苯醚(PBDEs)共6种物质,通过限制特定材料使用保障健康和环境安全REACH全称为《化学品的注册、评估、授权和限制》,覆盖欧盟市场所有化学品(食品和药品除外),通过登
    张工13144450251 2025-03-31 21:18 137浏览
  • 升职这件事,说到底不是单纯靠“干得多”或者“喊得响”。你可能也看过不少人,能力一般,甚至没你努力,却升得飞快;而你,日复一日地拼命干活,升职这两个字却始终离你有点远。这种“不公平”的感觉,其实在很多职场人心里都曾经出现过。但你有没有想过,问题可能就藏在一些你“没当回事”的小细节里?今天,我们就来聊聊你升职总是比别人慢,可能是因为这三个被你忽略的小细节。第一:你做得多,但说得少你可能是那种“默默付出型”的员工。项目来了接着干,困难来了顶上去,别人不愿意做的事情你都做了。但问题是,这些事情你做了,却
    优思学院 2025-03-31 14:58 112浏览
  • 退火炉,作为热处理设备的一种,广泛应用于各种金属材料的退火处理。那么,退火炉究竟是干嘛用的呢?一、退火炉的主要用途退火炉主要用于金属材料(如钢、铁、铜等)的热处理,通过退火工艺改善材料的机械性能,消除内应力和组织缺陷,提高材料的塑性和韧性。退火过程中,材料被加热到一定温度后保持一段时间,然后以适当的速度冷却,以达到改善材料性能的目的。二、退火炉的工作原理退火炉通过电热元件(如电阻丝、硅碳棒等)或燃气燃烧器加热炉膛,使炉内温度达到所需的退火温度。在退火过程中,炉内的温度、加热速度和冷却速度都可以根
    锦正茂科技 2025-04-02 10:13 50浏览
  • 文/Leon编辑/cc孙聪颖‍步入 2025 年,国家进一步加大促消费、扩内需的政策力度,家电国补政策将持续贯穿全年。这一利好举措,为行业发展注入强劲的增长动力。(详情见:2025:消费提振要靠国补还是“看不见的手”?)但与此同时,也对家电企业在战略规划、产品打造以及市场营销等多个维度,提出了更为严苛的要求。在刚刚落幕的中国家电及消费电子博览会(AWE)上,家电行业的竞争呈现出胶着的态势,各大品牌为在激烈的市场竞争中脱颖而出,纷纷加大产品研发投入,积极推出新产品,试图提升产品附加值与市场竞争力。
    华尔街科技眼 2025-04-01 19:49 194浏览
  • 提到“质量”这两个字,我们不会忘记那些奠定基础的大师们:休哈特、戴明、朱兰、克劳士比、费根堡姆、石川馨、田口玄一……正是他们的思想和实践,构筑了现代质量管理的核心体系,也深远影响了无数企业和管理者。今天,就让我们一同致敬这些质量管理的先驱!(最近流行『吉卜力风格』AI插图,我们也来玩玩用『吉卜力风格』重绘质量大师画象)1. 休哈特:统计质量控制的奠基者沃尔特·A·休哈特,美国工程师、统计学家,被誉为“统计质量控制之父”。1924年,他提出世界上第一张控制图,并于1931年出版《产品制造质量的经济
    优思学院 2025-04-01 14:02 139浏览
  • 随着汽车向智能化、场景化加速演进,智能座舱已成为人车交互的核心承载。从驾驶员注意力监测到儿童遗留检测,从乘员识别到安全带状态判断,座舱内的每一次行为都蕴含着巨大的安全与体验价值。然而,这些感知系统要在多样驾驶行为、复杂座舱布局和极端光照条件下持续稳定运行,传统的真实数据采集方式已难以支撑其开发迭代需求。智能座舱的技术演进,正由“采集驱动”转向“仿真驱动”。一、智能座舱仿真的挑战与突破图1:座舱实例图智能座舱中的AI系统,不仅需要理解驾驶员的行为和状态,还要同时感知乘员、儿童、宠物乃至环境中的潜在
    康谋 2025-04-02 10:23 71浏览
  • 文/郭楚妤编辑/cc孙聪颖‍不久前,中国发展高层论坛 2025 年年会(CDF)刚刚落下帷幕。本次年会围绕 “全面释放发展动能,共促全球经济稳定增长” 这一主题,吸引了全球各界目光,众多重磅嘉宾的出席与发言成为舆论焦点。其中,韩国三星集团会长李在镕时隔两年的访华之行,更是引发广泛热议。一直以来,李在镕给外界的印象是不苟言笑。然而,在论坛开幕前一天,李在镕却意外打破固有形象。3 月 22 日,李在镕与高通公司总裁安蒙一同现身北京小米汽车工厂。小米方面极为重视此次会面,CEO 雷军亲自接待,小米副董
    华尔街科技眼 2025-04-01 19:39 189浏览
  • 北京贞光科技有限公司作为紫光同芯授权代理商,专注于为客户提供车规级安全芯片的硬件供应与软件SDK一站式解决方案,同时配备专业技术团队,为选型及定制需求提供现场指导与支持。随着新能源汽车渗透率突破40%(中汽协2024数据),智能驾驶向L3+快速演进,车规级MCU正迎来技术范式变革。作为汽车电子系统的"神经中枢",通过AEC-Q100 Grade 1认证的MCU芯片需在-40℃~150℃极端温度下保持μs级响应精度,同时满足ISO 26262 ASIL-D功能安全要求。在集中式
    贞光科技 2025-04-02 14:50 88浏览
  • 在智能交互设备快速发展的今天,语音芯片作为人机交互的核心组件,其性能直接影响用户体验与产品竞争力。WT588F02B-8S语音芯片,凭借其静态功耗<5μA的卓越低功耗特性,成为物联网、智能家居、工业自动化等领域的理想选择,为设备赋予“听得懂、说得清”的智能化能力。一、核心优势:低功耗与高性能的完美结合超低待机功耗WT588F02B-8S在休眠模式下待机电流仅为5μA以下,显著延长了电池供电设备的续航能力。例如,在电子锁、气体检测仪等需长期待机的场景中,用户无需频繁更换电池,降低了维护成本。灵活的
    广州唯创电子 2025-04-02 08:34 136浏览
  • 引言随着物联网和智能设备的快速发展,语音交互技术逐渐成为提升用户体验的核心功能之一。在此背景下,WT588E02B-8S语音芯片,凭借其创新的远程更新(OTA)功能、灵活定制能力及高集成度设计,成为智能设备语音方案的优选。本文将从技术特性、远程更新机制及典型应用场景三方面,解析该芯片的技术优势与实际应用价值。一、WT588E02B-8S语音芯片的核心技术特性高性能硬件架构WT588E02B-8S采用16位DSP内核,内部振荡频率达32MHz,支持16位PWM/DAC输出,可直接驱动8Ω/0.5W
    广州唯创电子 2025-04-01 08:38 156浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦