LINUX内核源文件介绍以及头文件介绍

合集下载

linux操作系统的结构及详细说明

linux操作系统的结构及详细说明

linux操作系统的结构及详细说明linux的操作系统的结构你了解多少呢?下面由店铺为大家整理了linux操作系统的结构及详细说明的相关知识,希望对大家有帮助!linux操作系统的结构及详细说明:一、 linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。

这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。

SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。

在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

1. 内存管理对任何一台计算机而言,其内存以及其它资源都是有限的。

为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。

Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。

Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

不过内存管理要管理的可不止 4KB 缓冲区。

Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。

这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。

这样就允许该模式根据系统需要来动态调整内存使用。

为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。

由于这个原因,页面可以移出内存并放入磁盘中。

这个过程称为交换,因为页面会被从内存交换到硬盘上。

内存管理的源代码可以在 ./linux/mm 中找到。

2 .进程管理进程实际是某特定应用程序的一个运行实体。

Linux设备驱动程序原理及框架-内核模块入门篇

Linux设备驱动程序原理及框架-内核模块入门篇

Linux设备驱动程序原理及框架-内核模块入门篇内核模块介绍应用层加载模块操作过程内核如何支持可安装模块内核提供的接口及作用模块实例内核模块内核模块介绍Linux采用的是整体式的内核结构,这种结构采用的是整体式的内核结构,采用的是整体式的内核结构的内核一般不能动态的增加新的功能。

为此,的内核一般不能动态的增加新的功能。

为此,Linux提供了一种全新的机制,叫(可安装) 提供了一种全新的机制,可安装) 提供了一种全新的机制模块” )。

利用这个机制“模块”(module)。

利用这个机制,可以)。

利用这个机制,根据需要,根据需要,在不必对内核重新编译链接的条件将可安装模块动态的插入运行中的内核,下,将可安装模块动态的插入运行中的内核,成为内核的一个有机组成部分;成为内核的一个有机组成部分;或者从内核移走已经安装的模块。

正是这种机制,走已经安装的模块。

正是这种机制,使得内核的内存映像保持最小,的内存映像保持最小,但却具有很大的灵活性和可扩充性。

和可扩充性。

内核模块内核模块介绍可安装模块是可以在系统运行时动态地安装和卸载的内核软件。

严格来说,卸载的内核软件。

严格来说,这种软件的作用并不限于设备驱动,并不限于设备驱动,例如有些文件系统就是以可安装模块的形式实现的。

但是,另一方面,可安装模块的形式实现的。

但是,另一方面,它主要用来实现设备驱动程序或者与设备驱动密切相关的部分(如文件系统等)。

密切相关的部分(如文件系统等)。

课程内容内核模块介绍应用层加载模块操作过程内核如何支持可安装模块内核提供的接口及作用模块实例内核模块应用层加载模块操作过程内核引导的过程中,会识别出所有已经安装的硬件设备,内核引导的过程中,会识别出所有已经安装的硬件设备,并且创建好该系统中的硬件设备的列表树:文件系统。

且创建好该系统中的硬件设备的列表树:/sys 文件系统。

(udev 服务就是通过读取该文件系统内容来创建必要的设备文件的。

)。

Linux内核目录文件简介

Linux内核目录文件简介

Linux V0.11目录文件简介●Makefile文件:该文件是编译辅助工具软件make的参数配置文件。

●boot目录:功能是当计算机加电时引导内核启动,将内核代码加载到内存中,并做一些进入入32位保护运行方式前的系统初始化工作。

①Bootsect.s:磁盘引导块程序,驻留磁盘第一个扇区。

0x7C00②Setup.s:读取机器的硬件配置参数,并把内核模块system移动到适当的内存位置处。

③Head.s:被编译连接在system模块的最前部分,主要进行硬件设备的探测设置和内存管理页面的初始设置工作。

●fs目录:文件系统实现程序的目录。

1、file_table.c文件中,目前仅定义了一个文件句柄(描述符)结构数组。

2、ioctl.c文件将引用kernel/chr_dev/tty.c中的函数,实现字符设备的io控制功能。

3、exec.c程序主要包含一个执行程序函数do_execve(),它是所有exec()函数簇中的主要函数。

4、fcntl.c程序用于实现文件i/o控制的系统调用函数。

5、read_write.c程序用于实现文件读/写和定位三个系统调用函数。

6、stat.c程序中实现了两个获取文件状态的系统调用函数。

7、open.c程序主要包含实现修改文件属性和创建与关闭文件的系统调用函数。

8、char_dev.c主要包含字符设备读写函数rw_char()。

9、pipe.c程序中包含管道读写函数和创建管道的系统调用。

10、file_dev.c程序中包含基于i节点和描述符结构的文件读写函数。

11、namei.c程序主要包括文件系统中目录名和文件名的操作函数和系统调用函数。

12、block_dev.c程序包含块数据读和写函数。

13、inode.c程序中包含针对文件系统i节点操作的函数。

14、truncate.c程序用于在删除文件时释放文件所占用的设备数据空间。

15、bitmap.c程序用于处理文件系统中i节点和逻辑数据块的位图。

linux header file

linux header file

1 Linux内核所在目录为/usr/src/kernels/...2 Linux头文件所在目录为/usr/include/...3 找不见头文件可以用find命令查找find / -name *.hlinux常用头文件如下:POSIX标准定义的头文件<dirent.h> 目录项<fcntl.h> 文件控制read,write,fcntl,close,link,stat,umask,unlink,fopen O_RDONLY O_WRONLY O_NONBLOCK等。

<fnmatch.h> 文件名匹配类型<glob.h> 路径名模式匹配类型<grp.h> 组文件<netdb.h> 网络数据库操作<pwd.h> 口令文件<regex.h> 正则表达式<tar.h> TAR归档值<termios.h> 终端I/O<unistd.h> 符号常量unix standard header ->unistd.h,STDIN_FILENO,STDOUT_FILENO <utime.h> 文件时间<wordexp.h> 字符扩展类型-------------------------<arpa/inet.h> INTERNET定义<net/if.h> 套接字本地接口<netinet/in.h> INTERNET地址族<netinet/tcp.h> 传输控制协议定义-------------------------<sys/mman.h> 内存管理声明<sys/select.h> Select函数<sys/socket.h> 套接字借口<sys/stat.h> 文件状态<sys/times.h> 进程时间<sys/types.h> 基本系统数据类型例如:size_t(signed int) off_t(long)<sys/un.h> UNIX域套接字定义<sys/utsname.h> 系统名<sys/wait.h> 进程控制------------------------------POSIX定义的XSI扩展头文件<cpio.h> cpio归档值<dlfcn.h> 动态链接<fmtmsg.h> 消息显示结构<ftw.h> 文件树漫游<iconv.h> 代码集转换使用程序<langinfo.h> 语言信息常量<libgen.h> 模式匹配函数定义<monetary.h> 货币类型<ndbm.h> 数据库操作<nl_types.h> 消息类别<poll.h> 轮询函数<search.h> 搜索表<strings.h> 字符串操作<syslog.h> 系统出错日志记录<ucontext.h> 用户上下文<ulimit.h> 用户限制<utmpx.h> 用户帐户数据库-----------------------------<sys/ipc.h> IPC(命名管道)<sys/msg.h> 消息队列<sys/resource.h>资源操作<sys/sem.h> 信号量<sys/shm.h> 共享存储<sys/statvfs.h> 文件系统信息<sys/time.h> 时间类型<sys/timeb.h> 附加的日期和时间定义<sys/uio.h> 矢量I/O操作------------------------------POSIX定义的可选头文件<aio.h> 异步I/O<mqueue.h> 消息队列<pthread.h> 线程<sched.h> 执行调度<semaphore.h> 信号量<spawn.h> 实时spawn接口<stropts.h> XSI STREAMS接口<trace.h> 事件跟踪3、C/C++头文件一览C#include<assert.h> //设定插入点#include<ctype.h> //字符处理#include<errno.h> //定义错误码#include<float.h> //浮点数处理#include<iso646.h> //对应各种运算符的宏#include<limits.h> //定义各种数据类型最值的常量#include<locale.h> //定义本地化C函数#include<math.h> //定义数学函数#include<setjmp.h> //异常处理支持#include<signal.h> //信号机制支持#include<stdarg.h> //不定参数列表支持#include<stddef.h> //常用常量#include<stdio.h> //定义输入/输出函数#include<stdlib.h> //定义杂项函数及内存分配函数如malloc、free、system、atoi、atol、rand、exit等#include<string.h> //字符串处理,strlen(),strcat(),strcpy(),strcmp()等等#include<time.h> //定义关于时间的函数#include<wchar.h> //宽字符处理及输入/输出#include<wctype.h> //宽字符分类传统C++#include<fstream.h> //改用<fstream>#include<iomanip.h> //改用<iomainip>#include<iostream.h> //改用<iostream>#include<strstrea.h> //该类不再支持,改用<sstream>中的stringstream ————————————————————————————————标准C++#include<algorithm> //STL 通用算法#include<bitset> //STL 位集容器#include<cctype> //字符处理#include<cerrno> //定义错误码#include<cfloat> //浮点数处理#include<ciso646> //对应各种运算符的宏#include<climits> //定义各种数据类型最值的常量#include<clocale> //定义本地化函数#include<cmath> //定义数学函数#include<complex> //复数类#include<csignal> //信号机制支持#include<csetjmp> //异常处理支持#include<cstdarg> //不定参数列表支持#include<cstddef> //常用常量#include<cstdio> //定义输入/输出函数#include<cstdlib> //定义杂项函数及内存分配函数#include<cstring> //字符串处理#include<ctime> //定义关于时间的函数#include<cwchar> //宽字符处理及输入/输出#include<cwctype> //宽字符分类#include<deque> //STL 双端队列容器#include<exception> //异常处理类#include<fstream> //文件输入/输出#include<al> //STL 定义运算函数(代替运算符)#include<limits> //定义各种数据类型最值常量#include<list> //STL 线性列表容器#include<locale> //本地化特定信息#include<map> //STL 映射容器#include<memory> //STL通过分配器进行的内存分配#include<new> //动态内存分配#include<numeric> //STL常用的数字操作#include<iomanip> //参数化输入/输出#include<ios> //基本输入/输出支持#include<iosfwd> //输入/输出系统使用的前置声明#include<iostream> //数据流输入/输出#include<istream> //基本输入流#include<iterator> //STL迭代器#include<ostream> //基本输出流#include<queue> //STL 队列容器#include<set> //STL 集合容器#include<sstream> //基于字符串的流#include<stack> //STL 堆栈容器#include<stdexcept> //标准异常类#include<streambuf> //底层输入/输出支持#include<string> //字符串类#include<typeinfo> //运行期间类型信息#include<utility> //STL 通用模板类#include<valarray> //对包含值的数组的操作#include<vector> //STL 动态数组容器————————————————————————————————C99增加的部分#include<complex.h> //复数处理#include<fenv.h> //浮点环境#include<inttypes.h> //整数格式转换#include<stdbool.h> //布尔环境#include<stdint.h> //整型环境#include<tgmath.h> //通用类型数学宏本文来自CSDN博客,转载请标明出处:/wubin1124/archive/2009/12/09/4971359.aspx******************************************************************************* ****************************************************程序在使用一个函数之前,应该首先声明该函数。

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

printk(KERN_WARNING fmt, ##arg) printk(KERN_DEBUG fmt, ##arg)
/* Module Init & Exit function */ static int __init myModule_init(void) {
/* Module init code */ PRINTK("myModule_init\n"); return 0;
图形
工具
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍 了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成
那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢? 我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下 界面:
首页 业界 移动 云计算 研发 论坛 博客 下载 更多
process的专栏
您还未登录!| 登录 | 注册 | 帮助
个人资料
dianhuiren
访问:71424次 积分:1219分 排名:第8764名 原创:37篇 转载:127篇 译文:0篇 评论:3条
目录视图
摘要视图
订阅
《这些年,我们读过的技术经典图书》主题有奖征文 经理
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文
/dianhuiren/article/details/6917132
1/5
2012年04月 (6) 2012年03月 (15) 2012年02月 (16)
并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般 的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。

Linux0.01内核源代码及注释

Linux0.01内核源代码及注释

Bootsect.s(1-9)!! SYS_SIZE is the number of clicks (16 bytes) to be loaded.! 0x3000 is 0x30000 bytes = 196kB, more than enough for current! versions of linux ! SYS_SIZE 是要加载的节数(16 字节为1 节)。

0x3000 共为1 2 3 4 5 60x7c000x00000x900000x100000xA0000system 模块代码执行位置线路0x90200! 0x30000 字节=192 kB(上面Linus 估算错了),对于当前的版本空间已足够了。

!SYSSIZE = 0x3000 ! 指编译连接后system 模块的大小。

参见列表1.2 中第92 的说明。

! 这里给出了一个最大默认值。

!! bootsect.s (C) 1991 Linus Torvalds!! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves! iself out of the way to address 0x90000, and jumps there.!! It then loads 'setup' directly after itself (0x90200), and the system! at 0x10000, using BIOS interrupts.!! NOTE! currently system is at most 8*65536 bytes long. This should be no! problem, even in the future. I want to keep it simple. This 512 kB! kernel size should be enough, especially as this doesn't contain the! buffer cache as in minix!! The loader has been made as simple as possible, and continuos! read errors will result in a unbreakable loop. Reboot by hand. It! loads pretty fast by getting whole sectors at a time whenever possible.!! 以下是前面这些文字的翻译:! bootsect.s (C) 1991 Linus Torvalds 版权所有!! bootsect.s 被bios-启动子程序加载至0x7c00 (31k)处,并将自己! 移到了地址0x90000 (576k)处,并跳转至那里。

Linux内核头文件(linux headers)

Linux内核头文件(linux headers)

更新 Linux 内核头文件(linux headers)三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文件是比较容易的事情,在 Ubuntu/Fedora 等操作系 统上,可以直接安装相应的 linux-headers 软件包,下面就演示了在 Ubuntu 上安装内核头文件的过程。

View Code BASH1 2 3 4 5 6 7 8 9 master@jay-intel:~/workspace/c-study$ uname -r 3.2.0-33-generic master@jay-intel:~/workspace/c-study$ apt-get install linux-headers-$(uname -r) Reading package lists... Done Building dependency tree Reading state information... Done linux-headers-3.2.0-33-generic is already the newest version. linux-headers-3.2.0-33-generic set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 331 not upgraded.然而,如果自己编译 Linux kernel 并用它启动了系统,然后为了让本地程序基于当前 kernel 的 headers 来编译,就需要自己手动更新内核的头文件了。

手动更新 linux headers 的步骤如下: 1. 在 Linux kernel 目录中,执行“make headers_install”命令,将 headers 安装到当前目录的 usr/include/下面。

Linux下各文件夹的结构说明及用途介绍

Linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍:/bin 二进制可执行命令/dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录(呵呵,特权阶级)/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。

/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里/proc 虚拟的目录,是系统内存的映射。

可直接访问这个目录来获取系统信息。

/var 某些大文件的溢出区,比方说各种服务的日志文件/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

其中包含:/usr/x11r6 存放x window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库根文件系统通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。

除了可能的一个叫/ v m l i n u z标准的系统引导映像之外,根目录一般不含任何文件。

所有其他文件在根文件系统的子目录中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LINUX 内核源文件介绍以及头文件介绍LINUX 内核源文件介绍以及头文件介绍.txt两人之间的感情就像织毛衣,建立的时候一针一线,小心而漫长,拆除的时候只要轻轻一拉。

*******************LINUX 内核(0.11)源文件介绍****************** 1、内核源文件放置目录:||————boot 系统引导汇编程序目录||————fs 文件系统目录||————include 头文件目录||————init 内核初始化程序目录||————kernel 内存进程调度、信号处理、系统调用等程序的目录||————lib 内核库函数目录||————mm 内存管理程序目录||————tools 生成内核Image文件的工具程序目录||————Makefile文件|2、引导启动程序目录boot包含3个汇编语言文件,是内核源文件中最先被编译的程序。

功能:当计算机家电时引导内核启动,将内核代码加载到内存中,并完成系统初始化工作。

boot||————bootsect.s 磁盘引导块程序,编译后会驻留在磁盘的第一个扇区中||————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.h a.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.h Linux 标准头文件。

定义了各种符号常数和类型,并申明了各种函数,如__LIBRARY__,则还包括系统调用号和内嵌汇编_syscall()等||——utime.h 用户时间头文件。

定义了访问和修改时间结构以及utime()原型。

||——asm 主要定义了一些与CPU体系结构密切相关的数据结构、宏函数和变量| || |——asm/io.h io头文件。

以宏的嵌入汇编程序形式定义对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.h head头文件。

定义了段描述符的简单结构,和几个选择符常量| || |——linux/kernek.h 内核头文件。

含有一些内核常用函数的原形定义| || |——linux/mm.h 内存管理头文件。

含有页面大小定义和一些页面释放函数原型| || |——linux/sched.h 调度程序头文件,定义了任务结构task_struct、初始任务0的数据,还有一些有关描述参数设置和获取的嵌入式汇编函数宏语句| || |——linux/sys.h 系统调用头文件。

含有72个系统调用C 函数处理程序,以sys_开头| |——linux/tty.h tty头文件,定义了有关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。

用于执行内核所有的初始化工作,然后移到用户模式创建新进程,并在控制台设备上运行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系统调用(int 0x80)的接口处理过程,实际的处理过程则包含在个系统调用相应的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()函数。

相关文档
最新文档