1 . Linux的内核可由https://www.kernel.org/下载。我们下载较新的稳定版本(stable)3.18.5来学习研究——linux-3.18.5.tar.xz。
2. 解压文件并放置到/usr/src目录下: tar -xvJf linux-3.18.5.tar.xz。这样linux的源代码就放置到/usr/src/linux-3.18.5目录下了。
3. 源代码文件夹的目录结构
- arch: Linux支持的所有体系结构在该目录下都有相应的子目录
- block: block I/O层(块设备)的实现。
- crypto:内核本身所用的加解密API,实现了常用的加密(如AES,DES,BLOWFISH)和Hash算法(MD4,MD5,RIPEMD等),以及一些压缩和CRC校验算法
- Documentation: 文档了,没什么可说的。不过可以了解内核的好多信息啊!
- drivers: 最庞大的目录啊,各种各样的驱动程序都在这里了,显卡,网卡,PCI总线,USB总线了!
- firmware: 固件文件
- fs:虚拟文件系统的代码以及各种文件系统(如ext2,ext3,ext4等)的代码都在这里!所谓文件系统,简单地说就是存储设备和需要访问存储设备的进程之间的媒介。虚拟文件系统,比如proc,它以标准文件系统出现,但其中的文件只存在于内存中,并不占用内存空间。
- include: 包含内核中大部分的头文件
- include/linux: 与平台无关的头文件
- init:内核的初始化代码,包括main.c等
- ipc:进程间通信,包括内存共享、信号量等代码
- kernel:最核心部分,包括进程调度(sched/子目录),进程创建与撤销(fork.c/exit.c)等
- lib:库文件,标准C库子集等
- mm: 体系无关的内存管理代码
- net:网络相关代码
- scripts:包含了配置内核的脚本文件。当我们运行make menuconfig或者make xconfig等配置命令时,用户就是和该目录下的脚本进行交互
- security:各种Linux安全模型的代码,如SELinux。
- sound:声卡驱动以及与声音有关的代码
- usr:用于打包和压缩的cpio代码等
- samples:一些内核编码的示例
- tools:工具。
- virt:内核虚拟机KVM。KVM虚拟机(Kernel-based Virtual Machine)是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。KVM虚拟机使用Linux自身的调度器进行管理,核心源码很少,成为学术界的主流VMM之一。