IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux内核主要目录结构 -> 正文阅读

[系统运维]Linux内核主要目录结构

linux4.14.98的内核目录结构如图:

在这里插入图片描述

  • arch 与体系结构相关的代码放在这里,例如:arm、x86、powerpc。
  • block 部分块设备驱动程序。
  • crypto 内核本身所用的加密 API,实现了常用的加密和散列算法,还有一些压缩和 CRC 校验算法。
  • Documentation 存放着内核的所有开发文档,其中的文件会随版本的演变发生变化,通过阅读这里的文件是获得内核最新的开发资料的最好的地方。
  • drivers 此目录包括所有的驱动程序,下面又建立了多个目录,分别存放各个分类的驱动程序源代码,是内核中最大的源代码存放处,大约占整个内核的一多半。其中我们经常会用到的目录有:
  1. drivers/char
    字符设备是 drivers 目录中最为常用,最为重要的目录,其中包含了大量的驱动程序代码。通用的 tty 层在这里实现,console.c 定义了 linux 终端类型,vt.c 中定义了虚拟控制台;lp.c 中实现了一个通用的并口打印机的驱动,并保持设备无关性;led 控制驱动;kerboard.c 实现高级键盘处理,它导出handle_scancode 函数,以便于其他与平台相关的键盘驱动使用。我们的大部分实验也是放在这个目录下。
  2. driver/block
    其中存放所有的块设备驱动程序,保存了一些设备无关的代码。如 rd.c 实现了 RAM 磁盘,nbd.c 实现了网络块设备,loop.c 实现了回环块设备。
  3. drives/ide
    专门存放针对 IDE 设备的驱动。
  4. drivers/scsi
    存放 SCSI 设备的驱动程序,当前的 cd 刻录机、扫描仪、U 盘等设备都依赖这个 SCSI 的通用设备。
  5. drivers/net
    存放网络接口适配器的驱动程序,还包括一些线路规程的实现,但不实现实际的通信协议,这部分在顶层目录的 net 目录中实现。
  6. drivers/video
    这里保存了所有的帧缓冲区视频设备的驱动程序,整个目录实现了一个单独的字符设备
    驱动。/dev/fb 设备的入口点在 fbmem.c 文件中,该文件注册主设备号并维护一个此设备的清单,其中记录了哪一个帧缓冲区设备负责哪个次设备号。
  7. Drivers/media
    这里存放的代码主要是针对无线电和视频输入设备,比如目前流行的 usb 摄像头。
  • fs 此目录下包括了大量的文件系统的源代码,其中在嵌入式开发中要使用的包括:devfs、cramfs、ext4、jffs2、romfs、yaffs、vfat、nfs、proc 等。

    文件系统是 Linux 中非常重要的子系统,这里实现了许多重要的系统调用,比如 exec.c 文件中实现了execve 系统调用;用于文件访问的系统调用在 open.c、read_write.c 等文件中定义,select.c 实现了 select 和poll 系统调用,pipe.c 和 fifo.c 实现了管道和命名管道, mkdir、rmdir、rename、link、symlink、mknod 等。

    系统调用在 namei.c 中实现。

    文件系统的挂装和卸载和用于临时根文件系统的 initrd 在 super.c 中实现。Devices.c 中实现了字符设备和块设备驱动程序的注册函数;

    file.c、inode.c 实现了管理文件和索引节点内部数据结构的组织。
    Ioctl.c 实现 ioctl 系统调用。*

  • include 这里是内核的所有头文件存放的地方,其中的 linux 目录是头文件最多的地方,也是驱动程序经常要包含的目录。

  • initlinux 的 main.c 程序,通过这个比较简单的程序,我们可以理解 LINUX 的启动流程。

  • ipc 进程间通信的原语实现,包括信号量、共享内存。

  • kernel 这个目录下存放的是除网络、文件系统、内存管理之外的所有其他基础设施,其中至少包括进程调度 sched.c,进程建立 fork.c,定时器的管理 timer.c,中断处理,信号处理等。

  • lib 包括一些通用支持函数,类似于标准 C 的库函数。其中包括了最重要的 vsprintf 函数的实现,它是 printk 和 sprintf 函数的核心。还有将字符串转换为长整形数的 simple_atol 函数。

  • mm 这个目录包含实现内存管理的代码,包括所有与内存管理相关的数据结构,其中我们在驱动中需要使用的 kmalloc 和 kfree 函数在 slab.c 中实现,mmap 定义在 mmap.c 中的 do_mmap_pgoff 函数。将文件映射到内存的实现在 filemap.c 中,mprotect 在 mprotect.c,remap 在 remap.c 中实现;vmscan.c 中实现了kswapd 内核线程,它用于释放未使用和老化的页面到交换空间,这个文件对系统的性能起着关键的影响。

  • net 这个目录包含了套接字抽象和网络协议的实现,每一种协议都建立了一个目录,但是其中的 core、bridge、ethernet、sunrpc、khttpd 不是网络协议,我们使用最多的是 ipv4、ipv6、802、ipx 等。其中我们经常会用到的目录有:

  1. net/core 目录中实现了通用的网络功能:设备处理、防火墙、组播、别名等。

  2. net/ethernet 和 net/bridge 实现特定的底层功能:以太网相关的辅助函数以及网桥功能。

  3. net/sunrpc 中提供了支持 NFS 服务器的函数。

  4. samples 一些内核编程的范例。

  5. script 这个目录存放许多脚本,主要用于配置内核。

  6. sound 音频设备的驱动目录。

  7. tools 工具文件夹。

  8. usrcpio 命令的实现。

    主要文件如下:

  9. .config 内核里默认的隐藏配置文件,需要用 ls -a 查看。

  10. config_uptech 裁剪好的配置文件,如果.config 损坏,可以将本文件拷贝成.config。

  11. arch/arm64/configs/defconfig 默认官方 imx8 的配置,直接 make defconfig 或者拷贝到.config。

  12. Makefile 编译时需要的主文件,各子目录也有类似的文件。
    README 内核使用说明。

  13. arch/arm64/boot/dts/freescale/fsl-imx8mm-evk.dts 设备树文件,是对 imx8mm 所有功能的配置,比
    如 gpio、i2c 总线,串口等等。

  14. arch/arm64/boot/dts/freescale/fsl-imx8mm-evk-rm67191.dts 设备树 mipi 显示配置文件。

  15. arch/arm64/boot/Image 内核编译完生成的文件,主要用于系统烧写。

  16. arch/arm64/boot/dts/freescale/fsl-imx8mm-evk-rm67191.dtb 内核设备树编译完生成的文件,主要用于系统烧写。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 14:51:25  更:2021-07-29 14:51:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 11:15:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计