linux内核编译

来源:互联网 发布:天刀网络延迟高 编辑:程序博客网 时间:2024/06/05 06:42

Arch:

体系结构相关的代码,对于每个架构的CPU,在arch目录下有一个对应的子目录,比如arch/arm/、arch/i386/等。类似于u-boot的CPU目录。支持的芯片架构例如arm、x86、mips、avr32、powerpc(ti、视频处理能力最厉害的,达芬奇)、m68k。

Block:

块设备的通用函数。

Crypto:

常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。

Documentation:

这里存放着内核的所有开发文档,如图所示,其中的文件会随版本的演变发生变化,通过阅读这里的文件是获得内核最新的开发资料的最好的地方。

Drivers:

所有的设备驱动程序,里面每一个子目录对应一类驱动程序,比如drivers/block/为块设备驱动程序,drivers/char/为字符设备驱动程序,drivers/mtd/为norflash、nandflash等存储设备的驱动程序。drivers目录是内核中最大的源代码存放处,大约占整个内核的一多半。其中我们经常会用到的目录有:

Drivers/char:

字符设备是drivers目录中最为常用,也许是最为重要的目录,因为其中包含了大量与驱动程序无关的代码。通用的tty层在这里实现,console.c定义了linux终端类型,vt.c中定义了虚拟控制台,kerboard.c实现高级键盘处理,它导出handle_scancode函数,以便于其他与平台相关的键盘驱动使用。我们的大部分实验也是放在这个目录下。

Driver/block:

其中存放所有的块设备驱动程序,也保存了一些设备无关的代码。如rd.c实现了RAM 磁盘,nbd.c实现了网络块设备,loop.c实现了回环块设备。

Drivers/scsi:

存放SCSI设备的驱动程序,当前的cd 刻录机、扫描仪、U盘等设备都依赖这个SCSI的通用设备。

Drivers/net:

存放网络接口适配器的驱动程序,还包括一些线路规程的实现,但不实现实际的通信协议,这部分在顶层目录的net目录中实现。

Drivers/video:

这里保存了所有的帧缓冲区视频设备的驱动程序,整个目录实现了一个单独的字符设备驱动。/dev/fb设备的入口点在fbmem.c文件中,该文件注册主设备号并维护一个此设备的清单,其中记录了哪一个帧缓冲区设备负责哪个次设备号。

Drivers/media:

这里存放的代码主要是针对无线电和视频输入设备,比如目前流行的usb 摄像头。

firmware:

原厂提供的固件库。

Fs:

linux支持的文件系统的代码,每个子目录对应一种文件系统,比如fs/jffs2/、fs/ext2/、fs/ext3/。文件系统是Linux中非常重要的子系统,这里实现了许多重要的系统调用,比如exec.c文件中实现了execve系统调用;用于文件访问的系统调用在open.c、read_write.c等文件中定义。

文件系统的挂装和卸载和用于临时根文件系统的initrd在super.c中实现。Devices.c中实现了字符设备和块设备驱动程序的注册函数,file.c、inode.c实现了管理文件和索引节点内部数据结构的组织。

Include:

内核头文件,有基本头文件(存放在include/linux/目录下)、各种驱动或功能部件的头文件、各类体系相关的头文件。当配置内核后,include/asm/是每个include/asm-xxx/(比如include/asm-asm/)的链接。

Init:

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

Ipc:

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

Kernel:

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

Mm:

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

Net:

网络支持代码,网络协议

Sample:

一般不用。

Scripts:

用于配置,编译内核的脚本文件。

Lib:

内核用到的一些库函数代码,比如crc32.c、string.c,与处理器相关的库函数代码位于arch/*/lib/目录下。包括一些通用支持函数,类似于标准C的库函数。其中包括了最重要的vsprintf函数的实现,它是printk和sprintf函数的核心。还有将字符串转换为长整形数的simple_atol函数。

Security:

安全、密钥相关的代码。

Sound:

音频设备的驱动程序。

tools

 编译内核需要使用工具

usr:( Unix System Resource  unix系统资源)

用户程序相关代码


原创粉丝点击