linux0.11文件目录结构(源码阅读导航页)
心得:
1.普通人想要通过学习linux内核找工作几乎是一件不可能的事情,一般被能力认可,进入到相关kernel开发,基本在博士水平
2.学习驱动基本和内核关系不大。
3.泛读内核是为了了解操作系统,脑海里有一个印象,比如boot中充斥着大量安排内存中位置的代码,这些代码对大部分人根本没有任何帮助
4.学习内核和调试内核并不是一件轻松的事,会花掉你大部分的时间,如果拿出这部分时间在其他方面,在工作上的汇报会大得多。可以这么讲,学TCP都比学这个有用的多,有这个时间你可以多掌握好几门语言的基本语法。
5.目前把学习内核当成一种兴趣爱好,闲暇看一看。
6.linux0.11中有大量的不合理设计,目前使用的linux和linux0.11只是名字一样,其他完全不同。而linus如今也只是一个linux开源项目的管理员,并不能承担起linux的演进了。
boot目录
主要功能是计算机上电后,引导内核启动,将代码加载到内存中,并做一些进入32位保护运行方式前的系统初始化工作。
bootsect.s
程序是磁盘引导块程序。编译后会驻留在磁盘的第一个扇区中,PC上电ROM BIOS自检后,将被BIOS加载到内存0x7C00处进行执行。
setup.s
程序主要用于读取机器的硬件配置参数,并把内核模块system移动到适当内存位置处。
head.s
程序会被编译连接在system模块的最前面,主要进行硬件设备的探测设置和内存管理页面的初始设置工作。
fs
linux的文件系统
bitmap.c
包含处理inode和磁盘块位图的代码
free_block()
释放设备dev 上数据区中的逻辑块block。
new_block()
向设备dev 申请一个逻辑块(盘块,区块)。
block_dev.c
块设备的读写方法
block_write()
向指定设备从给定偏移处写入指定长度字节数据。
block_read()
从指定设备和位置读入指定字节数的数据到高速缓冲中。
buffer.c
用于实现缓冲区高速缓存功能。
char_dev.c
字符设备的读写方法
exec.c
装载程序
fcntl.c
提供文件描述符的操作
file_dev.c
文件的读写方法
file_table.c
定义文件表数组(64 项)
inode.c
管理文件系统中inode节点结构
ioctl.c
用于设备输入输出操作
namei.c
(对i节点的操作)
open.c
文件属性的操作
pipe.c
管道读写操作的实现
read_write.c
文件读写的系统调用
stat.c
文件状态
super.c
超级块的资源控制,以及文件系统的操作
truncate.c
对inode的操作,主要是释放文件设备空间
Makefile
编译该路径下的的c文件为.o链接文件
include
主要存放头文件
asm
与CPU体系结构相关的部分头文件
io.h
硬件端口字节输出函数
memory.h
定义memcpy
segment.h
读取和写入fs 段中指定地址处的字节
system.h
切换到用户模式运行,设置门描述符宏函数,设置中断门函数,设置陷阱门函数,设置系统调用门函数,在全局表中设置任务状态段/局部表描述符
linux:
linux内核专用部分头文件
config.h
在这里定义你的键盘类型
fs.h
本文件含有某些重要文件表结构的定义等
hdreg.h
该文件中含有一些软盘控制器的一些定义。这些信息有多处来源,大多数取自Sanches 和Canton
head.h
定义了段描述符的数据结构
kernel.h
定义了一些常用函数的原型等
mm.h
定义内存页面的大小,页相关。
sched.h
进程相关。
sys.h
系统相关。
tty.h
定义了tty_io.c 程序使用的某些结构和其它一些定义
sys:
系统数据结构部分
stat.h
读写相关
times.h
cpu时间相关
types.h
一些数据类型的定义
utsname.h
版本相关
wait.h
进程退出相关宏定义
a.out.h
执行文件中的定位信息,内存相关。
const.h
i_mode字段的各标志位
ctype.h
字符类型的宏
errno.h
出错符号的宏定义,来自minix系统
fcntl.h
提供一些对操作文件描述符的函数声明和结构定义,是file control的缩写
signal.h
定义了一些系统中的信号,以及声明了一些信号的相关操作
stdarg.h
主要目的为让函数能够接收可变参数,standard(标准) arguments(参数)简化而来。
stddef.h
定义了四个标准类型,两个指针相减结果的类型,sizeof返回的类型,空指针类型,成员在类型中的偏移位置
string.h
字符操作,这里都是用汇编写的,使用寄存器集来完成相关操作
termios.h
串口通信相关定义
time.h
用于需要时间方面的函数
unistd.h
对应各系统调用的函数原型定义
utime.h
设置文件访问和修改时间函数
init
内核初始化程序
main.c
linux正式运行前所需要的准备工作
kernel
内核进程调度,信号处理,系统调用等程序
blk_drv
块设备驱动程序
blk.h
块设备的初始化、结束请求和释放缓冲区
floppy.c
驱动你的软盘
hd.c
本程序是底层硬盘中断辅助程序。
ll_rw_blk.c
该程序处理块设备的所有读/写操作。
ramdisk.c
加载根文件系统到ramdisk
Makefile
编译本路径内的程序
chr_drv
字符设备驱动程序
console.c
实现控制台输入输出功能
serial.c
rs2320的输入输入功能
tty_io.c
控制台回显规范模式
tty_ioctl.c
文件实现了输入/输出控制系统调用ioctl(),该函数主要是调用函数tty_ioctl()对终端的IO进行控制
keyboard.S
键盘操作
rs_io.s
该程序模块实现rs232 输入输出中断处理程序。
Makefile
编译本路径内的程序
math
数学协处理器仿真处理程序
math_emulate.c
协处理仿真函数
Makefile
编译本路径内的程序
asm.s
CPU异常产生的中断函数的调用
exit.c
终止进程操作
fork.c
mktime.c
计算开机时间
panic.c
显示内核中的重大错误信息
printk.c
内核中的打印函数
sched.c
调度相关的基本函数
signal.c
信号处理相关函数
sys.c
系统调用的实现
system_call.s
系统调用的过程,也包括是时钟中断处理
vsprintf.c
格式化输
lib
内核库函数
_exit.c
内核使用的程序(退出)终止函数
close.c
关闭文件函数
ctype.c
定义个字符对应属性
dup.c
复制文件描述符函数
errno.c
定义了一个出错变量
execve.c
加载并执行子进程(其他进程)函数
malloc.c
linux的通用内核内存分配函数
open.c
用于将文件名转换成文件描述符
setsid.c
创建一个绘画并设置进程号
string.c
仅仅包含string.h
wait.c
等待被终止的进程的进程ID
write.c
写文件系统的调用函数
Makefile
生成本子目录中的对应.o文件
mm
内存管理程序
memory.c
内存管理
page.s
该文件包括页异常中断处理程序(中断14),主要分两种情况处理。
Makefile
生成memory.o
tools
生成内核Image文件的工具程序
build.c
这里不同系统会有不同的做法,暂时不具体介绍
Makefile
编译辅助工具软件make的参数配置文件,linux目录下的这个Makefile还嵌套地调用了所有子目录中包含的Makefile文件