*******************LINUX内核(0.11)源文件介绍******************
1、内核源文件放置目录:
|
|————boot系统引导汇编程序目录
|
|————fs文件系统目录
|
|————include头文件目录
|
|————init内核初始化程序目录
|
|————kernel显存进程调度、信号处理、系统调用等程序的目录
|
|————lib内核库函数目录
|
|————mm显存管理程序目录
|
|————tools生成内核Image文件的工具程序目录
|
|————Makefile文件
|
2、引导启动程序目录boot
包含3个汇编语言文件,是内核源文件中最先被编译的程序。
功能:当计算机加电时引导内核启动,将内核代码加载到显存中,并完成系统初始化工作。
boot
|
|————bootsect.sc盘引导块程序,编译后会留驻在c盘的第一个磁道中
|
|————setup.s读取机器的硬件配置参数,并把内核模式system联通到适当的显存位置处
|
|————head.s会被编译联接在system模块的最前部份,主要进行硬件设备的侦测配置和显存管理页面的配置工作
|
3、文件系统目录fs
包含17个C语言程序
fs
|
|——buffer.c管理高速缓冲区
|
|——file_table.c在0.11仅定义了一个文件句柄(描述符)结构链表
|
|——ioctl.c将引用kernel/chr_dev/tty.c中的函数,实现字符设备的IO控制功能
|
|——exec.c主要包含一个执行程序函数do_execve()
|
|——fcntl.c实现文件I/O控制的系统调用函数
|
|——read_write.c实现文件读/写和定位的三个系统调用函数
|
|——stat.c实现了两个获取文件状态的系统调用函数
|
|——open.c主要包含实现更改文件属性和创建与关掉文件的系统调用函数
|
|——char_dev.c主要包含字符设备读写函数rw_char()
|
|——pipe.c包含管线读写函数和创建管线的系统调用函数
|
|——file_dev.c包含基于i节点和描述符结构的文件读写函数。
|
|——namei.c主要包括文件系统中目录名和文件名的操作函数和系统调用函数
|
|——block_dev.c包含块数据读和写函数
|
|——inode.c包含针对文件系统i节点操作的函数
|
|——truncate.c用于在删掉文件时释放文件所占用的设备数据空间
|
|——bitmap.c用于处理文件系统中i节点和逻辑数据块的位图
|
|——super.c包含对文件系统超级块的处理函数
|
4、头文件主目录include
有32个.h文件,其中主目录下有13个,sam子目录中有4个,sys子目录中有5个,linux子目录中有10个
include
|
|——a.out.ha.out头文件,定义了a.out执行文件格式和一些宏
|
|——const.h常数符号头文件,目前仅定义了i节点中i_mode数组的各标志位
|
|——ctype.h字符类型头文件。定义了一些有关字符类型判定和转换的宏
|
|——errno.h错误号头文件。包含系统中各类出错号
|
|——fcntl.h文件控制头文件。用于文件及其描述符的操作控制常数符号的定义
|
|——signal.h讯号头文件。定义讯号符号常量,讯号结构以及讯号操作函数原型
|
|——stdarg.h标准参数头文件。以宏的方式定义变量参数列表。定义了一个类型(va_list)和三个宏(va_start,va_arg和va_end),用于vsprintf、vprintf、vfprintf函数
|
|——stddef.h标准定义头文件。定义了NULL,offsetof(TYPE,MEMBER)
|
|——string.h字符串头文件。主要定义了一些有关字符串操作的嵌入函数
|
|——termios.h终端输入输出函数头文件。主要定义控制异步通讯口的终端插口
|
|——time.h时间类型头文件。最主要定义了tm结构和一些有关时间的函数原形
|
|——unistd.hLinux标准头文件。定义了各类符号常数和类型linux内核文件放在哪,并声明了各类函数,如__LIBRARY__linux内核文件放在哪,则还包括系统调用号和内嵌汇编_syscall()等
|
|——utime.h用户时间头文件。定义了访问和更改时间结构以及utime()原型。
|
|——asm主要定义了一些与CPU体系结构密切相关的数据结构、宏函数和变量
||
||——asm/io.hio头文件。以宏的嵌入汇编程序方式定义对io端口操作的函数
||
||——asm/memory.h显存拷贝头文件。包含memcpy()嵌入式汇编宏函数
||
||——asm/segment.h段操作头文件。定义了有关段寄存器操作的嵌入式汇编函数
||
||——asm/system.h用户时间头文件。定义了访问和更改时间结构以及utime()原型
||
|
|
|——linux
||
||——linux/config.h内核配置头文件。定义按键语言和硬碟类型(HD_TYPE)可选项
||
||——linux/fdreg.h软盘头文件。富含软驱控制器参数的一些定义
||
||——linux/fs.h文件系统头文件。定义文件表结构
||
||——linux/hdreg.h硬碟参数头文件。定义访问硬碟寄存器端口,状态码,分区表等信息
||
||——linux/head.hhead头文件。定义了段描述符的简单结构,和几个选择符常量
||
||——linux/kernek.h内核头文件。富含一些内核常用函数的原形定义
||
||——linux/mm.h显存管理头文件。富含页面大小定义和一些页面释放函数原型
||
||——linux/sched.h调度程序头文件,定义了任务结构task_struct、初始任务0的数据,还有一些有关描述参数设置和获取的嵌入式汇编函数宏句子
||
||——linux/sys.h系统调用头文件。富含72个系统调用C函数处理程序什么是linux,以sys_开头
||——linux/tty.htty头文件,定义了有关tty_io,串行通讯方面的参数、常数
||
|
|
|——sys
||
||——sys/stat.h文件状态头文件。富含文件或文件系统状态结构stat{}和常量
||
||——sys/times.h定义了进程中运行时间结构tms以及times()函数原型
||
||——sys/types.h类型头文件。定义了基本的系统数据类型
||
||——sys/utsname.h系统名称结构头文件
||
||——sys/wait.h等待调用头文件。定义系统调用wait()核waitpid()及相关常数符号
||
|
5、内核初始化程序目录init
该目录下仅包含一个文件main.c。用于执行内核所有的初始化工作linux安全加固,之后移到用户模式创建新进程,并在控制台设备上运行shell程序。
6、内核程序主目录kernel
包含了12个代码文件和一个Makefile文件,另外还有3个子目录blk_dev、chr_dev、math。
kernel
|
|——asm.s用于处理系统硬件异常所造成的中断,对各硬件异常的实际处理程序则是在traps.c文件中,在各个中断处理程序中,将分别调用traps.c中相应的C语言处理函数
|
|——exit.c主要包括用于处理进程中止的系统调用,包括进程释放、会话(进程组)中止和程序退出处理函数以及杀害进程、终止进程、挂起进程等系统调用函数。
|
|——fork.c给出了sys_fork()系统调用中使用了两个C语言函数:find_empty_process()和copy_process()。
|
|——mktime.c包含一个内核使用的时间函数mktime(),用于计算机从1970年1月1日0时起到开机当天的秒数,作为开机描述。仅在inti/main.c中被调用一次
|
|——pani.c包含一个显示内核出错信息并停机的函数panic()
|
|——printk.c包含一个内核专用信息显示函数printk()
|
|——sched.c包含有关调度的基本函数(sleep_on、wakeup、schedule等)以及一些简单的系统调用函数,另外还有几个与定时相关的软驱操作函数
|
|——signal.c包含了有关讯号处理的4个系统调用以及一个在对应的中断处理程序中处理讯号的函数do_signal()
|
|——sys.c包含了好多系统调用函数,其中有些还没有实现
|
|——system_call.s实现了Linux系统调用(int0x80)的插口处理过程,实际的处理过程则包含在个系统调用相应的C语言处理函数中,这种处理函数分布在整个Linux内核代码中。
|
|——vsprintf.c实现了现今早已划入标准库函数中的字符串低格函数
|
|
|——blk_dev子目录块设备驱动程序
||
||——hd.c实现对硬碟数据块进行读/写的底层驱动函数,主要是do_hd_request()函数
||
||——floppy.c主要实现了对软驱数据块的读/写驱动函数,主要是do_fd_request()函数。
||
||——ll_rw_blk.c实现了低层块设备数据读/写函数ll_rw_block(),内核中所有其他程序都是通过该函数对块设备进行数据读写操作。
||
|
|——chr_dev子目录字符设备驱动程序子目录
||
||——tty_io.c包含tty字符设备读函数tty_read()和写函数tty_write(),为文件系统提供了下层访问插口。另外还包括在串行中中断处理过程中调用的C函数do_tty_interrupt(),该函数将会在中断类型为读字符的处理中被调用。
||
||——console.c主要包含控制台初始化程序和控制台写函数con_write(),用于被tty设备调用。还包含对显示器和鼠标中断的初始化设置程序con_init()。
||
||——rs_io.s因为实现两个串行插口的中断处理程序。该中断处理程序会依据从中断标示寄存器中取得的4种中断类型分别进行处理,并在处理中断类型为读字符的代码中调用do_tty_interrupt().
||
||——serial.c用于对异步串行通讯芯片UART进行初始化操作,并设置两个通讯端口的中断向量。另外还包括tty用于往并口输出的rs_write()函数。
||
||——tty_ioctl.c实现了tty的io控制插口函数tty_ioctl()以及对termio(s)终端Io结构的读写函数,并会在实现系统调用sys_ioctl()的fs/ioctl.c程序中被调用
||
||——keyboard.s主要实现了按键中断处理过程keyboard_interrupt.
||
|
|
|
|——math子目录协处理器仿真和操作程序子目录
||
||
||——math_emulate.c是中断int7的中断处理程序调用的C函数。
||
|
|——lib子目录内核库函数目录lib主要用于用户编程调用,是编译系统标准库的插口函数之一。
||
||——Makefile文件
||
||——_exit.c包含内核使用的程序中止函数void_exit(intexit_code)
||
||——close.c
||
||——ctype.c
||
||——dup.c
||
||——errno.c
||
||——execve.c
||
||——malloc.c
||
||——open.c
||
||——setsid.c
||
||——string.c
||
||——wait.c
||
||——write.c
||
||
|
7、内存管理程序目录
mm
|
|——page.s包括显存页面异常中断(int14)处理程序,主要用于处理程序因为缺页而导致的页异常中断和访问非法地址而导致的页保护
|
|——memory.c包括对显存进行初始化的函数mem_init(),由page.s的显存处理中断过程调用的do_no_page()和do_wp_page()函数。在创建新进城而执行复制进城操作时,即使用该文件中的显存处理函数来分配管理显存空间。
|
|
8、编译内核工具程序目录tools
该目录下的build.c程序用于将Linux各个目录中被分别编译生成的目标代码联接合并成一个可运行的内核映像文件Image.