Linux源码⽬录结构和Linux⽂件系统⽬录结构
学习Linux也有⼀段时间了,具体来整理⼀下Linux源码的⽬录结构和⽂件系统的⽬录结构,以便加深记忆。
⼀、Linux源码的⽬录结构
⾸先上⼀张截图,如下所⽰:
再看各个⽂件的介绍,借⽤⼀下其他资源。
arch:这个为⽬录是架构相关,⾥⾯存放了许多CPU架构,⽐如arm,x86,MIPS,PPC等,
处理器原⼚提供⼀套Linux内核的源码,那么在这个⽬录下都有⼀套针对具体处理器CPU的⼦⽬录。每个CPU的⼦⽬录,⼜进⼀步分解为boot,mm,kernel等⼦⽬录,分别控制系统引导,内存管理,系统调⽤,动态调频,主频率设置部分等。
在arch⽬录中有关键的平台⽂件。任何⼀款⽀持Linux的处理器,都有⼀部分内核代码是针对特定的处理器来提供的,具体的实现就是通过平台⽂件。
迅为4412的平台⽂件,是arch→arm→mach-exynos→mach-itop4412.c。
arch→arm→boot⽬录,默认编译⽣成的内核镜像是在这个⽬录下。
在arch→arm→kernel⽬录中,有针对具体CPU处理器的代码,有相关内核特性实现⽅式,如信号处理等。这⼀部分当然是芯⽚⼚商做好了,4412的这部分就是三星已经做好的部分。
在arch→arm→lib⽬录中,有⼀些和硬件相关库函数,后⾯学习驱动的时候会使⽤到。
在arch→arm→tools⽬录中,包含了⽣成镜像的⼯具。
block:在linux中block表⽰块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你⼏乎可以认为块设备就是存储设备。block⽬录下放的是⼀些linux存储体系中关于块设备管理的代码。
crypto:英⽂意思是加密。这个⽬录下放了⼀些各种常见的加密算法的C语⾔代码实现。譬如crc32、md5、sha1等。
Documentation:⾥⾯放了⼀些⽂档。
drivers:驱动⽬录,⾥⾯分门别类的列出了linux内核⽀持的所有硬件设备的驱动源代码。就是需要重点学习的部分。
firmware:固件。什么是固件?固件其实是软件,不过这个软件是固话到IC⾥⾯运⾏的叫固件:就像S5PV210⾥的iROM代码。
fs:fs就是file system,⽂件系统,⾥⾯列出了linux⽀持的各种⽂件系统的实现。
include:头⽂件⽬录,公共的(各种CPU架构共⽤的)头⽂件都在这⾥。每种CPU架构特有的⼀些头⽂件在arch/arm/include⽬录及其⼦⽬录下。
init:init是初始化的意思,这个⽬录下的代码就是linux内核启动时初始化内核的代码。
如下图所⽰,部分⽬录如下。下⾯的这些⽬录,⼏乎不需要我们去动其中任何⼀个⽂件。
ipc:ipc就是inter process commuication,进程间通信,⾥⾯都是linux⽀持的IPC的代码实现。
kernel:kernel就是内核,就是linux内核,所以这个⽂件夹下放的就是内核本⾝需要的⼀些代码⽂件。
lib:lib是库的意思,这⾥⾯都是⼀些公⽤的有⽤的库函数,注意这⾥的库函数和C语⾔的库函数不⼀样的。在内核编程中是不能⽤C语⾔标准库函数,这⾥的lib⽬录下的库函数就是⽤来替代那些标准库函数的。譬如在内核中要把字符串转成数字⽤atoi,但是内核编程中只能⽤lib ⽬录下的atoi函数,不能⽤标准C语⾔库中的atoi。譬如在内核中要打印信息时不能⽤printf,⽽要⽤printk,这个printk就是我们这个lib⽬录下的。
mm:mm是memory management,内存管理,linux的内存管理代码都在这⾥。
net:该⽬录下是⽹络相关的代码,譬如TCP/IP协议栈等都在这⾥。
scripts:脚本,这个⽬录下全部是脚本⽂件,这些脚本⽂件不是linux内核⼯作时使⽤的,⽽是⽤来辅助对linux内核进⾏配置编译⽣产的。我们并不会详细进⼊分析这个⽬录下的脚本,⽽是通过外围来重点学会配置和编译linux内核即可。
security:安全相关的代码。不⽤去管。
sound:⾳频处理相关的。
tools:linux中⽤到的⼀些有⽤⼯具
usr:⽬录下是initramfs相关的,和linux内核的启动有关,暂时不⽤去管。
virt:内核虚拟机相关的,暂时不⽤管。
Kbuild:Kbuild是kernel build的意思,就是内核编译的意思。这个⽂件就是linux内核特有的内核编译体系需要⽤到的⽂件。
Makefile:这个是linux内核的总makefile,整个内核⼯程⽤这个Makefile来管理的。
⼆、⽂件系统⽬录结构
先上图,如下图所⽰:
1、/- 根
每⼀个⽂件和⽬录从根⽬录开始。
只有root⽤户具有该⽬录下的写权限。请注意,/root是root⽤户的主⽬录,这与/.不⼀样
2、/bin中 - ⽤户⼆进制⽂件
包含⼆进制可执⾏⽂件。
在单⽤户模式下,你需要使⽤的常见Linux命令都位于此⽬录下。系统的所有⽤户使⽤的命令都设在这⾥。
例如:ps、ls、ping、grep、cp
3、/sbin⽬录 - 系统⼆进制⽂件
就像/bin,/sbin同样也包含⼆进制可执⾏⽂件。
但是,在这个⽬录下的linux命令通常由系统管理员使⽤,对系统进⾏维护。例如:iptables、reboot、fdisk、ifconfig、swapon命令4、/etc - 配置⽂件
包含所有程序所需的配置⽂件。
也包含了⽤于启动/停⽌单个程序的启动和关闭shell脚本。例如:/f、/f
hosts:设备名称(或域名)到ip地址的解析,相当于本地存在的dns功能。
5、/dev - 设备⽂件
包含设备⽂件。
这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0
6、/proc - 进程信息
包含系统进程的相关信息。
这是⼀个虚拟的⽂件系统,包含有关正在运⾏的进程的信息。例如:/proc/{pid}⽬录中包含的与特定pid相关的信息。
这是⼀个虚拟的⽂件系统,系统资源以⽂本信息形式存在。例如:/proc/uptime
7、/var - 变量⽂件
var代表变量⽂件。
这个⽬录下可以到内容可能增长的⽂件。
这包括 - 系统⽇志⽂件(/var/log);包和数据库⽂件(/var/lib);电⼦邮件(/var/mail);打印队列(/var/spool);锁⽂件
(/var/lock);多次重新启动需要的临时⽂件(/var/tmp);
8、/tmp - 临时⽂件
包含系统和⽤户创建的临时⽂件。
当系统重新启动时,这个⽬录下的⽂件都将被删除。
9、/usr - ⽤户程序
包含⼆进制⽂件、库⽂件、⽂档和⼆级程序的源代码。
/usr/bin中包含⽤户程序的⼆进制⽂件。如果你在/bin中不到⽤户⼆进制⽂件,到/usr/bin⽬录看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系统管理员的⼆进制⽂件。如果你在/sbin中不到系统⼆进制⽂件,到/usr/sbin⽬录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin⽤到的库。
/usr/local中包含了从源安装的⽤户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中
10、/home - HOME⽬录
所有⽤户⽤home⽬录来存储他们的个⼈档案。
例如:/home/john、/home/nikita
11、/boot - 引导加载程序⽂件
包含引导加载程序相关的⽂件。
内核的initrd、vmlinux、grub⽂件位于/boot下。
例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic
12、/lib - 系统库
包含⽀持位于/bin和/sbin下的⼆进制⽂件的库⽂件.
linux内核文件放在哪库⽂件名为 ld*或lib*.so.*
例如:ld-2.11.1.so,libncurses.so.5.7
13、/opt - 可选的附加应⽤程序
opt代表可选的。
包含从个别⼚商的附加应⽤程序。
附加应⽤程序应该安装在/opt/或者/opt/的⼦⽬录下。
14、/mnt - 挂载⽬录
临时安装⽬录,系统管理员可以挂载⽂件系统。15、/media - 可移动媒体设备
⽤于挂载可移动设备的临时⽬录。
举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;16、/srv - 服务数据
srv代表服务。
包含服务器特定服务相关的数据。
例如,/srv/cvs包含cvs相关的数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论