1、Linux内核源代码目录结构

  • arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、powerpc、mips等。
  • block:块设备驱动程序I/O调度。
  • crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
  • Documentation:内核各部分的通用解释和注释。
  • 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的模块。
  • sound:ALSA、OSS音频设备的驱动核心代码和常用设备驱动。
  • usr:实现了用于打包和压缩的cpio等。
2、Linux内核的组成部分

如下图所示,Linux内核主要由进程调度(SCHED)、内存管理(MM)、 虚 拟 文 件 系 统 (VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成。
       1、进程调度
进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中“微观串行,宏观并行”地执行。进程调度处于系统的
中心位置,内核中其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。
      如上图所示,Linux的进程在几个状态间进行切换。在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,并使本进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪态。睡眠分成可被打断的睡眠和不可被打断的睡眠,两者的区别在于可被打断的睡眠在收到信号的时候会醒。
在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,其对应进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪态。
设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:
pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
2、内存管理
内存管理的主要作用是控制多个进程安全地共享主内存区域。当CPU提供内存管理单元(MMU)时,Linux内存管理完成为每个进程进行虚拟内存到物理内存的转换。Linux  2.6引入了对无MMU CPU的支持。
      如下图所示,一般而言,Linux的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB属于内核空间,内核空间对常规内存、I/O设备内存以及高端内存存在不同的处理方式。
 3、虚拟文件系统
如下图所示,Linux虚拟文件系统(VFS)隐藏各种了硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,它使用超级块super  block存放文件系统相关信息,使用索引节点inode存放文件的物理信息,使用目录项dentry存放文件的逻辑信息。
4、网络接口
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。如下图所示,在Linux中网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相应的设备驱动程序。
 5、进程通信
进程通信支持提供进程之间的通信,Linux支持进程间的多种通信机制,包含信号量、共享内存、管道等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递。
       Linux内核的5个组成部分之间的依赖关系如下。

  • 进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进         程的第一件事情,就是将程序和数据装入内存。
  • 进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥         有自己的私有空间,还可以存取共同的内存区域。
  • 虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持                      RAMDISK设备。
  • 内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,         这也是内存管理依赖于进程调度的惟一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同           时,挂起当前正在运行的进程。

除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到的例程,如分配和释放内存空间的函数、打印警告或错误信息的函数及系统提供的调试例程等。

3、Linux文件系统目录结构
进入Linux根目录(即“/”,Linux文件系统的入口,也是处于最高一级的目录),运行“ls –l”命令,看到Linux包含以下目录。
       1./bin 
       包含基本命令,如  ls、cp、mkdir等,这个目录中的文件都是可执行的。
       2./sbin
       包含系统命令,如modprobe、hwclock、ifconfig等,大多是涉及系统管理的命令,这个目录中的文件都是可执行的。
       3./dev 
       设备文件存储目录,应用程序通过对这些文件的读写和控制就可以访问实际的设备。
       4./etc 
      系统配置文件的所在地,一些服务器的配置文件也在这里,如用户账号及密码配置文件。busybox的启动脚本也存放在该目录。
       5./lib 
       系统库文件存放目录,如LDD6410包含libc-2.6.1.so、libpthread-2.6.1.so、libthread_db-1.0.so等。
       6./mnt
      /mnt这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab 的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。
       7./opt
       opt 是“可选”的意思,有些软件包会被安装在这里,例如,在LDD6410的文件系统中,Qt/Embedded就存放在该目录。
8./proc 
      操作系统运行时,进程及内核信息(比如CPU、硬盘分区、内存信息等)存放在这里。/proc目录为伪文件系统proc的挂载目录,proc并不是真正的文件系统,它存在于内存之中。
       9./tmp 
       有时用户运行程序的时候,会产生临时文件,/tmp就用来存放临时文件的。
       10./usr 
       这个是系统存放程序的目录,比如用户命令、用户库等。LDD6410的usr包括bin、sbin、lib三个子目录。usr/bin中包含diff、which、who、rx、cmp等,usr/sbin中包含chroot、flash_eraseall、inetd等,usr/lib中包含libjpeg.so.62.0.0等。
       11./var 
       var表示的是变化的意思,这个目录的内容经常变动,如/var 的/var/log 目录被用来存放系统日志。
       12./sys
       Linux 2.6内核所支持的sysfs文件系统被映射在此目录。Linux设备驱动模型中的总线、驱动和设备都可以在sysfs 文件系统中找到对应的节点。当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录。

Linux内核与文件系统分析相关推荐

  1. Linux 内核的文件 Cache 管理机制介绍

    1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与 Windows.UNIX 一起占据了操作系统领域几乎所有的市场份额.特别是在高性能计算 ...

  2. Linux内核Makefile文件

    Linux内核Makefile文件(翻译自内 核手册) 转载自:http://blog.chinaunix.net/uid-21651676-id-60377.html Linux 内核Makefil ...

  3. linux的头文件下载,Linux内核头文件(linux headers)

    更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...

  4. Linux 内核dts文件是怎么一回事?

    一个CPU可能对应多个平台,为了方便开发,只能这么做,dts文件和dtsi文件相当于C语言的.c和.h文件.一样可以包含,下面以BBB的DTS文件分析学习格式规范. 涉及的文件包含: am33xx.d ...

  5. linux 内核 目录文件说明

    本文使用的源代码是Linux kernel 3.9.4. 下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.9.4. ...

  6. LINUX内核目录文件说明

    内核空间和用户空间 在下载内核前,我们应该讨论一些重要的术语和事实.首先了解一下内核空间和用户空间 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据.不管是内核空间还是 ...

  7. linux内核的文件组织形式

    文章目录 前言 1. Linux内核体系结构 2. 内核引导与启动 BIOS/OF BIOS功能 引导装入程序(Boot Loaders) BIOS 与boot loader及内核加载流程 GNU G ...

  8. linux 内核头文件 linux kernel header

    1.内核头文件的发展历史         在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的"KISS"传统,只需将内核源码树中的头文件直接复制到 ...

  9. Linux内核 crypto文件夹 密码学知识学习

    密码算法分类 对称算法 非对称算法 消息摘要(单向哈希)算法 这些算法作为加密函数框架的最底层,提供加密和解密的实际操作.这些函数可以在内核crypto文件夹下,相应的文件中找到.不过内核模块不能直接 ...

最新文章

  1. Struts2官网翻译
  2. SQL语言之DQL语言学习(一) 基础查询
  3. 5-Qt6 QObjec对象拷贝
  4. photoshop 常见问题与分析
  5. golang mac 环境变量_macOS 配置 golang 运行环境
  6. ABAP和Go语言的初始化操作, Kubernetes的Init Container
  7. c语言 swap交换函数_重审C中老生常谈的swap函数交换数值
  8. pyhton学习,day1作业,用户名密码登录模块
  9. [zz]很详细,涵盖了多数场景!推荐 - python 的日志logging模块学习
  10. 王一博、张艺兴等多位明星起诉医美平台更美App
  11. 景驰获雷诺领投A轮融资,更名WeRide.ai,联手广州公交推出无人出租
  12. 命令行基础 挂载 文件目录管理 vim编辑器
  13. [导入]警告:不能将项目“project”中的依赖项“file”复制到运行目录,因为它将改写引用“file”。...
  14. winform窗体界面闪烁解决办法
  15. linux运维零基础学习,没有基础怎么学习Linux运维?Linux学习
  16. ajax登录返回token,AJAX安全-Session做Token
  17. MTK平台Camera驱动流程分析
  18. 第五章 项目范围管理
  19. 服务器网口显示感叹号,业务服务器或更新服务器连接失败(认证失败,黄色感叹号)怎么回事?...
  20. java工程师待遇_Java程序员的薪资水平如何?

热门文章

  1. 【数据结构笔记23】C实现:表示图的多种方法(邻接矩阵、邻接表与相关拓展)
  2. JS让本地图片预览不再难-jquery插件
  3. 数字后端基本概念介绍<IO Buffer>
  4. webapi mvc 基础
  5. (零)VCS学习笔记
  6. 如何让jquery-easyui的combobox像select那样不可编辑
  7. 系统搜索资源就停止服务器,SQL Server (MSSQLSERVER) 服务启动不了,系统日志显示由于下列服务特定错误而终止: 找不到映像文件中指定的资源名。...
  8. php--实现一个简单的学生管理系统
  9. python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比
  10. Windows系统单网卡配置双IP双网关