《Linux内核设备驱动开发详解》读书笔记——第3章Linux内核即内核编程

3.3 Linux内核的组成

3.3.1 Linux内核源代码的目录结构

Linux内核源代码包含如下目录。

  • arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如i386、 arm、 arm64、 powerpc、 mips等。 Linux内核目前已经支持30种左右的体系结构。 在arch目录下, 存放的是各个平台以及各个平台的芯片对Linux内核进程调度、 内存管理、 中断等的支持, 以及每个具体的SoC和电路板的板级支持代码。
  • block: 块设备驱动程序I/O调度。
  • crypto: 常用加密和散列算法(如AES、 SHA等) , 还有一些压缩和CRC校验算法。
  • documentation: 内核各部分的通用解释和注释。
  • drivers: 设备驱动程序, 每个不同的驱动占用一个子目录, 如char、 block、 net、 mtd、 i2c等。
  • fs: 所支持的各种文件系统, 如EXT、 FAT、 NTFS、 JFFS2等。
  • include: 头文件, 与系统相关的头文件放置在include/linux子目录下。
  • init: 内核初始化代码。 著名的start_kernel() 就位于init/main.c文件中。
  • ipc: 进程间通信的代码。
  • kernel: 内核最核心的部分, 包括进程调度、 定时器等, 而和平台相关的一部分代码放在arch/*/kernel目录下。
  • lib: 库文件代码。
  • mm: 内存管理代码, 和平台相关的一部分代码放在arch/*/mm目录下。
  • net: 网络相关代码, 实现各种常见的网络协议。
  • scripts: 用于配置内核的脚本文件。
  • security: 主要是一个SELinux的模块。
  • sound: ALSA、 OSS音频设备的驱动核心代码和常用设备驱动。
  • usr: 实现用于打包和压缩的cpio等。
  • include: 内核API级别头文件。

内核一般要做到drivers与arch的软件架构分离, 驱动中不包含板级信息, 让驱动跨平台。 同时内核的通用部分
(如kernel、 fs、 ipc、 net等) 则与具体的硬件(arch和drivers) 剥离。

3.3.2

2.内存管理

内存管理的主要作用是控制多个进程安全地共享主内存区域。 当CPU提供内存管理单元(MMU) 时, Linux内存管理对于每个进程完成从虚拟内存到物理内存的转换。 Linux 2.6引入了对无MMU CPU的支持。

如图3.5所示, 一般而言, 32位处理器的Linux的每个进程享有4GB的内存空间, 0~3GB属于用户空间, 3~4GB属于内核空间, 内核空间对常规内存、 I/O设备内存以及高端内存有不同的处理方式。 当然, 内核空间和用户空间的具体界限是可以调整的, 在内核配置选项KernelFeatures→Memory split下, 可以设置界限为2GB或者3GB。
在这里插入图片描述

发布了115 篇原创文章 · 获赞 283 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/jiejiemcu/article/details/98873509