当前位置:首页 > 华科操作系统实验报告(DOC)
华 中 科 技 大 学 课 程 设 计 报 告
{
printk(\ }
sys_close(source); sys_close(dest); set_fs(fs); return 1; }
测试程序源代码
#include
int main(int argc ,char * argv[]) {
syscall(351,argv[1],argv[2]);
return 0; }
③ 实验过程与步骤
根据教程http://www.linuxidc.com/Linux/2013-06/85335.htm编译新的内核: 第一步:
(1)获取系统的版本号,使用命令uname -a, 获取版本号为3.13.0 (2)下载3.12.39的内核,解压到文件夹/usr/src中,解压命令:
xz –d linux-3.13.tar.xz tar –xvf linux-3.13.tar
(3)进入linux-3.13.0目录,清除残留的.config和.o文件,命令:
make mrproper
(4)安装ncurses-5.9:下载ncurses-5.9,按照安装linux-3.13的方法解压ncurses-5.9
华 中 科 技 大 学 课 程 设 计 报 告
到文件来/usr/src中,进入文件夹ncurses-5.9中配置环境: cd ncurses-5.9 ./configure make make install
(5)make menuconfig选择编译配置选项。 (6)确定依赖性:make dep (7)清理中间文件:make clean (8)生成新内核:make bzImage (9)生成modules:make modules (10)安装modules:make modules_install (11)安装内核 make install (12)重启选用新内核
第二步:添加自定义系统调用
(1) 添加系统调用函数,修改文件:/kernel/sys.c asmlinkage int sys_mycall(char* sourceFile,char* destFile) {
int source=sys_open(sourceFile,O_RDONLY,0);
int dest=sys_open(destFile,O_WRONLY|O_CREAT|O_TRUNC,0600); char buf[4096]; mm_segment_t fs; fs = get_fs(); set_fs(get_ds()); int i;
if(source>0 && dest>0) {
do {
i=sys_read(source,buf,4096);
华 中 科 技 大 学 课 程 设 计 报 告
sys_write(dest,buf,i); } while(i); } else {
printk(\ }
sys_close(source); sys_close(dest); set_fs(fs); return 1; }
(2)添加系统调用号,修改文件 /arch/x86/syscalls/syscall_64.tbl
351
common
mycall
sys_mycall
(3) 添加声明到头文件,修改文件,/include/asm-generic/syscalls.h
asmlinkage int sys_mycall(char* sourceFile,char* destFile)
(4)重新编译内核,只用第一步中的(8), (11),重启即可。 第三步:测试函数 代码: { }
int main(int argc, char * argv[])
syscall(351,argv[1],argv[2]); return 0;
华 中 科 技 大 学 课 程 设 计 报 告
三、 掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动程序,其功能可以简单(实现字符设备的驱动)。
① 任务分析:linxu系统中,在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:
1.对设备初始化和释放.
2.把数据从内核传送到硬件和从硬件读取数据.
3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 4.检测和处理设备出现的错误.
Linux操作系统允许设备驱动程序作为可装载内核模块实现,这也就是说,设备的接口实现不仅可以在Linux 操作系统启动时进行注册,而且还可以在Linux 操作系统启动后装载模块时进行注册。总之,Linux操作系统支持多种设备。
② 设备驱动程序代码: #include \#include \#include \#include \#include \#include \#include \#include \#include \#define MAX_SIZE 20
static int my_open(struct inode *inode, struct file *file); static int my_release(struct inode *inode, struct file *file);
共分享92篇相关文档