目录介绍
- arch:体系结构相关的代码,对于每个架构的CPU,arch目录下有一个对应的子目录,比如 arch/arm/、arch/i386/等。
- block:块设备的通用函数。
- crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
- drivers:所有的设备驱动程序,里面每一个子目录对应一类驱动程序,比如drivers/block/为块设备驱动程序,drivers/char/为字符设备驱动程序,drivers/mtd/为NORFlash、NANDFlash等存储设备的驱动程序。
- fs:Linux支持的文件系统的代码,每个子目录对应一种文件系统,比如fs/jffs2/、fs/ext2/、fs/ext3/。
- include:内核头文件,有基本头文件(存放在include/linux/目录下)、各种驱动或功能部件的头文件(比如include/media/、include/mtd/、include/net/)、各种体系相关的头文件(比如include/asm-arm/、include/asm-i386/)。当配置内核后,include/asm/是某个include/asm-xxx/(比如include/asm-arm/)的链接。
- init:内核的初始化代码(不是系统的引导代码),其中的main.c文件中的start_kernel函数是内核引导后运行的第一个函数。
- ipc:进程间通信的代码。
- kernel:内核管理的核心代码,与处理器相关的代码位于arch/*/kemel/目录下。
- lib:内核用到的一些库函数代码,比如crc32.c、string.c,与处理器相关的库函数代码位于arch/*/lib/目录下。
- mm:内存管理代码,与处理器相关的内存管理代码位于arch/*/mm/目录下。
- net:网络支持代码,每个子目录对应于网络的一个方面。
- security:安全、密钥相关的代码。
- sound:音频设备的驱动程序。
- user:用来制作一个压缩的cpio归档文件:initrd 的镜像,它可以作为内核启动后挂接(mount)的第一个文件系统(一般用不到)。
- Documentation:内核文档。
- scripts:用于配置、编译内核的脚本文件。
- tools:用与构建和调试内核的工具代码。
- modules:目录存放了已建好的、可动态加载的模块。
- Copying:目录下是GPL版权申明。
- ReadMe:文件提供内核的各种编译方法;生成文件的查看方法,如nmvmlinux丨sort丨less。
- Reporting-bugs:目录里是有关报告Bug的一些内容。
- Rules.make:目录里是各种Makefilemake所使用的一些共同规则。
- Config:隐藏文件。Make oldconfig和make defconfig会把生成的默认的configuration放到文件.config中。执行Make之后会根据Makefile上下层级依赖关系编译整个系统,.config作为编译各个模块的依据。
- samples:一些示例代码。
- virt:提供虚拟机技术(KVM等)的支持。
- firmware: 保存用于驱动第三方设备的固件。
- COPYING: 版权声明。
- MAINTAINERS:维护者名单。
- CREDITS:Linux主要的贡献者名单。
- REPORTING-BUGS: Bug上报的指南。
- README:帮助、说明文档。
根目录和大部分子目录下都有Makefile和Kconfig两个文件,内核的配置和编译就依赖于这两个文件。
Linux kernel Makefile 的规则:Linux内核Makefile体系可以分为五部分:
- Makefile:位于内核源代码根目录的Makefile.称为TOPMakefile。
- .config:内核配置文件。
- arch/arch_name/Makefile:各个体系结构独立代码中的Makefile 成为Arch Makefile。
- kbuild Makefile:整个源代码目录中约有500个这样的Makefile。
- scripts/Makfile.*:适用于各种Kbuild Makefile的一般规则。
参考
- https://blog.csdn.net/weixin_45264425/article/details/125947416
- https://www.cnblogs.com/myitm/archive/2011/08/11/2135561.html
- http://www.360doc.com/content/23/1230/21/277688_1109342627.shtml
- http://www.wowotech.net/linux_kenrel/11.html
- https://blog.csdn.net/weixin_42703045/article/details/129268099