本文介绍Linux虚拟文件系统的初始化过程。如下图:
+-----> start_kernel()
|
|
+-----> vfs_caches_init_early()
|
|
+-----> vfs_caches_init()
|                        +--->new thread(kernel_init)
|                        |       +
|                        |       |
+-----> rest_init()+------       v
                           kernel_init_freeable
                                 + 
                                 | 
                                 v
                             do_basic_setup
                                 +
                                 |
                                 v
                           prepare_namespace

在Linux kernel的入口函数start_kernel中,系统调用vfs_caches_init_early和vfs_caches_init进行必要的初始化。Continue Reading "Linux虚拟文件系统(2)– 初始化流程"
 

VFS简介

说明:本系列文章均以Linux 4.4为原型进行分析 Linux将系统中很多资源都抽象成文件,如Socket、设备节点、以及内存。可以如此做,归功于Linux操作系统的虚拟文件系统(VFS)。 有了VFS,无论底层文件系统格式是FAT、ext格式甚至是内存,(一般情况下)上层应用无论关心底层这些文件系统的实现细节,可以按照统一的方式对文件进行操作。 Linux虚拟文件系统(1) 如上图,用户态应用通过glibc提供的API对文件进行操作,如open()、read()、 write()等。Glibc将这些函数转换成Linux提供的系统调用,操作系统根据系统调用号执行对应的操作函数,如__syscall_open/__syscall_read/__syscall_write等。这样就走到了Linux的虚拟文件系统层(上图VFS)。 Continue Reading "Linux虚拟文件系统(1)"
Linux中断学习笔记(1)提到,外设通过中断控制器连接到CPU的中断线。嵌入式系统也不例外。

ARM嵌入式系统GIC架构

ARM官网所举图为例:ARM的中断控制器GIC(General Interrupt Controller)将从外设输入的中断通过CPU的IRQ信号线(ARM中主要为FIQ和IRQ)连接到系统中各CPU。

图1. GIC 简单结构图

Linux中断学习笔记(2) -- 嵌入式设备中断 中断控制器允许级联,一个有中断级联的终端流程如下图所示。次级GIC将中断信号通知到主GIC后,主GIC再通知CPU,CPU读各级中断控制器的Ack Register得到中断号,并开始执行相应的中断例程。执行完后,直接写次级中断控制器的寄存器标记中断服务结束。Continue Reading "Linux中断学习笔记(2) — 嵌入式设备中断"

什么是中断

CPU获取外设状态变化有两种方式:
  • Polling:不断跟外设询问它的状态
  • 当外设状态变化后主动通知CPU
CPU要负责处理系统中各种各样的业务,如果频繁地轮询外设状态,必然会对整个系统的吞吐量产生影响,影响操作系统的正常运作。 中断便是外设通知CPU其状态变化的一种机制。CPU会有中断线,由中断控制器的输出线连接。中断控制器作用:
  • 中断优先级处理
  • 接收中断控制器ACK
  • 分发中断
中断控制器连接到MCU的中断输入引脚(在ARM就是IRQ-Interrupt Request or FIQ-Fast Interrupt Request信号线)。中断控制器驱动负责Kernel中断号与物理中断号的Mapping。 当外设没有变化的时候,CPU可以专心地处理其他事务。外设准备好资料时,通过中断控制器通知CPU,CPU再对其进行相应的处理。

Continue Reading "Linux中断学习笔记(1)"