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系统资源)
用户程序相关代码
- Linux内核:编译内核
- 【LINUX内核】LINUX内核编译
- Android编译 & Linux内核编译
- linux内核编译kernel编译
- Linux编译内核详解
- Linux编译内核详解
- linux内核编译
- 菜鸟编译Linux内核
- linux内核编译详解
- LINUX内核编译(ZT)
- Linux 内核编译 全功略
- 第一次编译linux内核
- linux内核编译步骤
- Linux内核编译步骤
- Linux 内核编译详解
- Linux内核编译详解
- Linux内核编译
- linux内核编译
- FFmpeg中AVPacket和AVFrame关系
- eclipse运行程序报 DDMS files not found: D:\Java\SDK\tools\hprof-conv.exe
- Android 录音和播放录音
- 认证 (authentication) 和授权 (authorization) 的区别
- Android 技术重温系列 (15)- Canvas & Drawables
- linux内核编译
- JVM原理优化及GC
- Android Studio(版本2.4)报错:the android gradle plugin version 2.4.0-alpha4 is too old, please update to
- 28.Implement strStr()
- 计算机网络-应用层
- 操作系统原理
- 看得“深”、看得“清” —— 深度学习在图像超清化的应用
- #CodeForces
- Math取整