- 1、本文档共45页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE II
2008/2 new
TOC \o 1-3 \u 第1章 问题1以及相关知识 1
1.1. Linux下的C编程 1
1. 源程序的编译 1
2. 头文件和系统求助 2
1.2. 问题1-1以及相关知识 2
1.3. 问题1-2以及相关知识 6
1. 实现原理 7
2. 注意要点 7
3. 特别强调: 7
第2章 问题2及相关知识 9
2.1. Linux系统调用机制 9
1. 内核中系统调用的过程 9
2. 用户程序中系统调用的过程 16
2.2. 添加新的系统调用(2.6.18内核) 19
1. 步骤1:准备 19
2. 步骤2:下载源代码 19
3. 步骤3:修改相应内核文件 20
4. 步骤4:开始对新的内核进行编译 21
2.3. 对新加的系统调用进行测试 23
1. 旧版本的测试方法 23
2. 新版本的测试方法 23
第3章 问题3及其相关知识 25
3.1. 基础知识 25
3.2. 添加新模块的基本步骤 26
1. 写设备驱动源代码: 26
2. 编译 28
3. 挂载内核中模块 29
4. 创建新的虚拟设备文件 30
5. 测试新的设备驱动 30
6. 卸载操作 30
第4章 问题4以及相关知识 31
4.1. 实现原理 31
4.2. 实现方法 31
参考文献 43
PAGE 6
问题1以及相关知识
Linux下的C编程
源程序的编译
在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器.
假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf(Hello Linux\n);
}
要编译这个程序,我们只要在命令行下执行:
gcc -o hello hello.c
gcc 编译器就会为我们生成一个名为hello的可执行文件.在当前目录下执行./hello就可以看到程序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.
gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们已经知道了,表示我们要求输出的可执行文件名. -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件. -g选项表示我们要求编译器在编译的时候提供我们以后对程序 进行调试的信息. 知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档(可以用man gcc来查看),那里有着许多对其它选项的详细说明.
头文件和系统求助
有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得该函数在哪个头文件进行了说明。这个时候我们可以求助系统。比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释。和这个函数所在的头文件stdio.h说明了. 如果我们要write这个函 数的说明,当我们执行man write时,输出的结果却不是我们所需要的。因为我们要的是w rite这个函数的说明,可是出来的却是write这个命令的说明。为了得到write的函数说明我们要用 man 2 write。 2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数。记住不管什么时候,man都是我们的最好助手。
问题1-1以及相关知识
本节主要针对课程设计题目1-1:编一个C程序,其内容为实现文件拷贝的功能。
主要用到如下几个函数:
open:打开文件
close:关闭文件
read:读操作
write:写操作
当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数open.使用完成以后我们调用另外一个close函数进行关闭操作.
#include fcntl.h //注意:这个字母是小写的L,而不是数字1。
#include unistd.h
#include sys/types.h
#include sys/stat.h
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
int close(int fd);
open函数有两个形式.其中pathname是我们要打开的文件名(包含路径名称,缺省是认为在 当前路径下面).flags可
文档评论(0)