您的位置:首页 > 运维架构 > Linux

Linux驱动开发之 七 (不知道目录结构,何谈Linux)

2016-05-15 23:20 465 查看

Linux驱动开发之 七 (不知道目录结构,何谈Linux)

本文知识点都是一些基础知识,老谢主要是将网络上的一些内容加以整理和编辑。

老谢前面分享的文章,主要介绍了:

1. 基于操作系统的驱动开发是完全不同于无操作系统的驱动开发;

2. 介绍了Linux驱动开发必须要了解的硬件基础知识等。

从这篇文章开始,我们便要真正地开始接触Linux驱动开发相关的软件知识。本文知识点:

1. 了解Linux内核的目录结构;

2. 知道Linux内核中最为核心的五个子系统。

一、Linux kernel目录结构分析

在以前的文章中,老谢已经分享过基于UT4418的源代码:http://pan.baidu.com/s/1i58Qadn

这个分享路径中资料比较多,结合此文章,我们只需要关心其中的source code部分即可。

开发板android source code中内核版本是kernel 3.4.39版本(./linux/kernel/kernel-3.4.39)。



相应folder的简要介绍如下表格:

NameDescription
arch包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如 i386、ARM、PowerPC、MIPS等
block块设备驱动程序I/O调度
crypto常用加密和散列算法(如 AES、SHA等),还有一些压缩和CRC校验算法
Documents内核各部分的通用解释和注释
drivers设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等
fs支持的各种文件系统,如 EXT、FAT、NTFS、JFFS2等
include头文件,与系统相关的头文件被放置在include/linux子目录下
init内核初始化代码
ipc进程间通信的代码
kernel内核的最核心部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下
lib库文件代码
mm内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下
net网络相关代码,实现了各种常见的网络协议
scripts包含用于配置内核的脚本文件
security主要包含SELinux模块
soundALSA、OSS音频设备的驱动核心代码和常用设备驱动
usr实现了用于打包和压缩的cpio等

二、linux kernel中的五个核心子系统

Linux kernel是嵌入式系统中应用极为广泛的操作系统,而Linux kernel的核心主要由五个子系统组成,他们分别是进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。

Linux子系统描述
进程调度 SCHED控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
内存管理 MM允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
虚拟文件系统 VFS隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
网络接口 NET提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
进程间通信 IPC支持进程间各种通信机制。包含信号量、共享内存、管道等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递
五个子系统中,一些必要的解释如下:

关于进程调度



关于内存管理

一般而言,Linux的每个进程都享有4GB的内存空间,0~3GB属于user space,3~4GB属于kernel space。内核空间对常规内存、I/O设备内存、高端内存的处理方式不同。



关于VFS

如下图为虚拟文件系统在Linux系统中所处的位置



关于Linux内核空间与用户空间

在 Linux 系统中,内核可进行任何操作,而应用程序则被禁止对硬件的直接访问和对内存的未授权访问。

内核空间和用户空间被用来区分程序执行的这两种不同状态,它们使用不同的地址空间。Linux 系统只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。

本文主要了解了Linux内核的目录结构,以及从介绍了Linux最为核心的五个子系统。对这些基本概念的理解,对后面实际driver开发有着重要作用。

itxiebo

20160515
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: