2. Linux基础回顾

在 Linux 与 RTOS 多系统协同开发中,Linux 侧通常承担复杂业务、网络通信、文件存储与人机交互,而 RTOS 侧负责硬实时控制。理解 Linux 的进程、内存、文件系统、设备驱动与用户空间接口,是划分两侧职责、设计共享内存、RPMsg、RPMSG 或异构核间通信的基础。本节从协同开发视角回顾 Linux 的五个核心子系统。

一、进程管理:任务隔离与调度基础

Linux 用 task_struct 描述进程或线程,包含 PID、状态、调度策略、地址空间、文件描述符表、信号处理等。用户空间通过 fork()、exec()、clone() 创建任务,通过 wait() 回收子进程。调度器以 CFS 为主,实时任务可用 SCHED_FIFO 或 SCHED_RR。在多系统协同中,Linux 侧进程常作为“非实时管理者”,通过 /dev/rpmsg、共享内存或 socket 与 RTOS 通信。

ps -eLf            # 查看进程与线程
top -H -p 1234     # 查看指定进程的线程
chrt -f 80 ./ctrl  # 以 SCHED_FIFO 优先级 80 运行
taskset -c 2 ./app # 绑定到 CPU2

需要特别区分“进程隔离”与“线程共享”。进程拥有独立虚拟地址空间,线程共享同一地址空间。协同开发中,若 Linux 侧需要与 RTOS 共享大块数据,通常不会直接跨核共享虚拟地址,而是通过预留物理内存、mmap 映射到用户空间,再由核间中断或消息队列通知对方。

二、内存管理:虚拟地址、页表与映射

Linux 为每个进程提供独立虚拟地址空间,通过 MMU 和页表映射到物理内存。用户空间常用 malloc、mmap、brk 申请内存;内核空间使用 kmalloc、vmalloc、alloc_pages。协同开发中,共享内存通常由设备树预留 reserved-memory 区域,Linux 侧通过 mmap 映射,RTOS 侧直接访问同一物理地址。

cat /proc/meminfo
cat /proc/<pid>/maps
cat /proc/iomem
提示:跨核共享内存必须保证 cache 一致性。若 RTOS 侧无 cache 或使用非缓存区域,Linux 侧映射时需使用 O_SYNC 或 MAP_SHARED,并在驱动中处理 cache 刷新与屏障。

三、文件系统与设备模型

Linux 遵循“一切皆文件”思想。普通文件、目录、字符设备、块设备、socket、管道都可通过文件描述符访问。根文件系统常见 ext4、UBIFS、YAFFS2、squashfs;嵌入式场景常用只读 squashfs 加可写 overlay。设备驱动通过 /dev 节点暴露接口,用户空间用 open/read/write/ioctl/mmap 操作。

对象用户空间接口协同开发用途
字符设备open/read/write/ioctl控制 RTOS 核、发送命令
块设备read/write/mmap固件分区、日志存储
sysfs文件读写查看/配置设备状态
procfs文件读写查看进程、内存、中断
共享内存mmap大数据零拷贝传输

四、设备驱动与用户空间接口

Linux 驱动分为字符设备、块设备、网络设备三类。字符设备最常用于协同控制:驱动注册 file_operations,实现 open、release、read、write、unlocked_ioctl、mmap。用户空间通过 ioctl 传递命令与参数,通过 mmap 映射寄存器或共享缓冲区。

struct file_operations fops = {
    .owner = THIS_MODULE,
    .open = my_open,
    .release = my_release,
    .read = my_read,
    .write = my_write,
    .unlocked_ioctl = my_ioctl,
    .mmap = my_mmap,
};

在异构多核系统中,常见做法是:Linux 侧编写一个字符设备驱动,负责与 RTOS 核通信;用户空间程序通过 /dev/rtos_ctrl 发送控制命令,通过 mmap 读写共享数据区。这样既保持用户空间接口简洁,又把核间协议细节封装在内核驱动中。

五、协同视角下的整体关系

下图展示 Linux 侧五大子系统与 RTOS 协同的典型关系:用户空间通过系统调用进入内核,内核驱动管理设备与共享内存,最终与 RTOS 核通过核间中断、共享内存或消息通道交互。

Linux 与 RTOS 协同的系统视图 用户空间 应用进程 控制程序 数据采集 open/read/write/ioctl/mmap Linux 内核 进程管理 task_struct / CFS 内存管理 页表 / mmap / 预留内存 文件系统 ext4 / squashfs / sysfs 设备驱动 file_operations / ioctl 硬件与 RTOS 侧 共享内存 核间中断 / Mailbox RTOS 实时任务 外设寄存器

六、常见误区与复盘

  • 误区一:把 Linux 当硬实时系统。 Linux 即使使用 PREEMPT_RT,也难保证亚微秒级抖动。硬实时控制应交给 RTOS,Linux 负责管理与通信。
  • 误区二:跨核直接传虚拟地址。 两个系统的虚拟地址空间独立,必须传物理地址或通过共享内存映射。
  • 误区三:忽略 cache 一致性。 共享内存若一侧有 cache、一侧无 cache,必须显式刷新或使用非缓存映射。
  • 误区四:在用户空间直接操作寄存器。 应通过驱动 mmap 或 ioctl 封装,避免权限与并发问题。
复盘要点:Linux 侧的核心价值是“管理、通信、存储、人机交互”,RTOS 侧的核心价值是“确定性、低延迟、硬实时”。两者通过共享内存、核间中断、字符设备驱动和用户空间接口形成清晰边界,才能构建稳定可靠的多系统协同架构。