linux源码组织结构(摘抄)
来源:互联网 发布:office2010 mac破解版 编辑:程序博客网 时间:2024/06/05 10:05
Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间。
1.arch目录
arch子目录包括所有和cpu架构相关的内核代码。它还有更深的子目录,每一个代表一种支持的cpu架构,例如i386和alpha。
一个系统启动时,一般由bootloader把内核加载入内存,然后将PC指向head.S的入口,head.S执行一些架构相关的设置,之后跳转到init/main.c中的main()函数入口处。
在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。
(1)kernel子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等。
(2)lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行得更快。
(3)mm子目录包含存储管理实现的代码。
2.include目录
include子目录包括编译内核所需要的大部分include文件。它也有更深的子目录,每一种支持的架构在此目录下都对应一个子目录。
include/asm是某个架构所需要的真实的include目录的软链接,如include/asm-i386。如果改变架构,需要编辑内核的makefile文件,并重新运行Linux的内核配置程序。
3.init目录
这个目录包含内核的初始化代码。你的系统想做些什么,这里...
4.mm
这个目录包括所有的内存管理代码,包括内核内存管理和虚拟内存管理。但和架构相关的内存管理代码则位于arch/*/mm/,例如arch/i386/mm/fault.c。
Page fault处理代码在mm/memory.c中,内存映射和页缓存代码在mm/filemap.c中。
Buffer cache 在mm/buffer.c中实现,
交换缓存在mm/swap_state.c和mm/swapfile.c中。
5.drivers目录
系统所有的设备驱动程序都在这个目录中。它们又按设备驱动程序类被划分成多个子目录,例如block、pci、net等。你的嵌入板子上不可能用得上所有的内核驱动,所以要花些时间在这里研究一下需求。
6.ipc目录
这个目录拥有50%以上的内核源码,
这个目录包含内核的进程间通讯的代码,共享内存、信号灯、消息队列等。所有System V IPC对象都包括在ipc_perm数据结构中,并可以在include/linux/ipc.h中找到。System V的消息在ipc/msg.c中实现,共享内存在ipc/shm.c中,信号灯在ipc/sem.c,管道在ipc/pipe.c中实现。
7.modules目录
这只是一个用来存放建立好的模块的目录。通常为空。内核模块代码部分在内核中,部分在modules包中。内核中的模块代码全部在kernel/modules.c中,数据结构和内核守护进程kerneld的定义则分别在include/linux/module.h和include/linux/kerneld.h中。也可以在include/linux/elf.h中查看一个ELF目标文件的结构。
8.fs目录
所有的文件系统的代码。它又被划分成子目录,每一个支持的文件系统对应其下层的一个目录,EXT2文件系统的源程序都在fs/ext2/子目录,数据结构的定义在include/linux/ext2_fs.h、ext2_fs_i.h和ext2_fs_sb.h中。虚拟文件系统的数据结构在include/linux/fs.h中描述,代码在fs下的相应子目录中。Buffer cache和update内核守护进程都是用fs/buffer.c实现的。
9.kernel目录
主要的内核代码,如进程的创建、终止、调度,以及信号、时钟等。同样,和架构相关的内核代码放在arch/*/kernel中。
调度程序在kernel/sched.c,fork代码在kernel/fork.c。
bottom half 处理代码在include/linux/interrupt.h。task_struct数据结构可以在include/linux/sched.h中找到。内核的中断处理代码几乎都是和微处理器(通常也和平台)相关的。
Intel中断处理代码在arch/i386/kernel/irq.c它的定义在incude/asm-i386/irq.h。
10.net目录
内核的网络代码,包括TCP/IP协议、Socket以及相关的内容。大部分的include文件在include/net中。BSD socket代码在net/socket.c,Ipv4 INET socket 代码在net/ipv4/af_inet.c中。通用协议的支持代码(包括sk_buff处理例程)在net/core中,TCP/IP网络代码在net/ipv4
11.lib目录
这个目录放置内核的库代码,如vsprintf、串处理函数、解压缩函数等。和体系结构相关的库代码在arch/*/lib/中。
12.scripts目录
这个目录包含脚本(例如awk和tk脚本),用于配置内核。
13. Document目录
该目录存放了大量的内核代码相关文档,以及用户开发和维护手册
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 鉴于驱动程序在嵌入系统中的重要性,而且Linux内核源代码有很大一部分是设备驱动程序,这些设备驱动程序源代码都在drivers子目录中,所以进一步细分drivers子目录:
/block
块设备驱动程序,比如ide(ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.c中的device_setup()。它不仅初始化硬盘,也初始化网络,因为当安装nfs文件系统的时候需要网络。块设备包括基于IDE和SCSI的设备。
/char
这里可以查看基于字符的设备,比如tty、串行口、鼠标等。
/cdrom
Linux的所有CD ROM代码。在这里可以找到特殊的CD ROM设备(比如Soundblaster CD ROM)。而常用的ide CD驱动程序在drivers/block的ide-cd.c中,SCSI CD驱动程序在drivers/scsi/scsi.c中。
/pci
PCI伪驱动程序。在此处分析PCI子系统如何被映射和初始化。PCI伪驱动程序在drivers/pci/pci.c,系统范围的定义在include/linux/pci.h。每一种体系结构都有一些特殊的PCI BIOS代码,Alpha AXP的位于arch/alpha/kernel/bios32.c。
/scsi
在这里不但可以找到所有的Linux支持的scsi设备的驱动程序,也可以找到所有的SCSI代码。
/net
在这里可以找到网络设备驱动程序,比如DEC Chip 21040 PCI以太网驱动程序在tulip.c中。
/sound
所有的声卡驱动程序都在此位置。
- linux源码组织结构(摘抄)
- Linux内核源码组织结构
- Linux源代码组织结构
- Linux文件系统组织结构
- linux目录组织结构
- linux内核源码组织
- Caffe源码解读(一):代码组织结构
- linux kernel的makefile的组织结构(转载)
- Linux虚拟内存组织结构浅析(一)
- Linux虚拟内存组织结构浅析(二)
- Linux虚拟内存组织结构浅析(一)
- Linux源文件的组织结构-转
- 分布式文件系统KFS源码阅读与分析(一):MetaServer元数据组织结构
- 组织结构
- 组织结构
- osworkflow源码解读----第一章osworkflow项目组织结构
- linux 内核源码结构
- linux内核源码结构
- 不能说のsecret 8
- Export and Import Data Records in Small Numbers Situation
- 周鸿祎的绝招—“寄生战略”
- flex 折线图的双坐标
- 在网页中使用插图:30创意的例子
- linux源码组织结构(摘抄)
- 项目管理小小知识点总结
- three.js绘制过程(二)
- 107条Javascript的常用语句
- linux 未识别的服务
- 关于IOS开发 的一些建议
- linux /dev/下设备节点创建
- 性能调优
- Groovy的优点和缺点