添加系统调用实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、构建基本的实验环境
1.1基本实验环境与前提条件
Windows7 、Word 2010、Vmware WorkStation 8.5、AdobeReader
ReadHatLinux 9.0,gcc,vi
Linux内核[V2.4.18]
1.2虚拟机的安装及使用
1.3将Linux 内核源代码及配置文件传送给虚拟机上的Red Hat Linux V9.0 系统
配置网络时遇到这个问题,
Determining IP information for eth0... failed; no link present. Check cable?
通过查找资料发现是系统的Bug,
解决方法如下:
到/etc/sysconfig/network-scripts/ifcfg-eth0
在文件最后一行中加入
check_link_down () {
return 1;
}
另外如果存在/etc/sysconfig/networking/profiles/default/ifcfg-eth0 文件,则同样在其中加入这一段东西即可,然后重启系统。
设置网络为DHCP,重新启动就可以,啦,直接上图
最后将内核代码下载到/root目录下
二、Linux 内核编译、配置与调试
2.1 内核配置与编译
2.1.1、解压内核源代码文件
tar -zxf linux-2.4.18.tar.gz
2.1.2、解压后如下
2.1.3、拷贝linux,命名为linux-2.4.18
cp -r linux linux-2.4.18
2.1.4、移动config-2.4.18forMP.txt到linux-2.4.18根目录,替换掉.config
2.1.5、进入linux-2.4.18目录,配置和编译内核模块
make oldconfig
make dep
make clean
make bzImage
make modules
2.2 内核安装与测试
2.2.1安装内核映像文件
cp arch/i386/boot/bzImage /boot/vmlinux-2.4.18
2.2.2拷贝和安装Linux系统映射文件System.map,并创建其与系统映射文件System.map之间的符号链接
2.2.3执行命令make modules_install 以安装可动态加载的内核模块
2.2.4添加启动项的配置
利用vi编辑器,vi grub.conf
查看/ 所在的位置,为/dev/sda3
2.2.5reboot重新启动系统,从自己创建的内核启动系统
启动后查看内核
分别用uname –r,和dmesg查看
三、Linux 系统调用添加与实现
3.1 在内核增加系统调用
3.1.1结构体struct srz_rusage可声明如下:.
struct srz_rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_majflt; /* major page faults */
long ru_minflt; /* minor page faults */
long ru_nswap; /* swaps */
};
3.1.2添加到linux-2.
4.18/include/linux下的resource.h中
3.1.3添加的系统调用名称为:
int get_process_usage(pid_t, struct srz_rusage*);
参考的getrusage和sys_getrusage的代码在linux-2.4.18/linux/kernel/sys.c下面
3.1.4分析getrusage()和sys_getrusage()的源代码
1)数据结构rusage 在头文件resource.h中定义。
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long r u_maxrss; /* maximum resident set size */
long r u_ixrss; /* integral shared memory size */
long r u_idrss; /* integral unshared data size */
long r u_isrss; /* integral unshared stack size */
long r u_minflt; /* page reclaims */
long r u_majflt; /* page faults */
long r u_nswap; /* swaps */
long r u_inblock; /* block input operations */
long r u_oublock; /* block output operations */
long r u_msgsnd; /* messages sent */
long r u_msgrcv; /* messages received */
long r u_nsignals; /* signals received */
long r u_nvcsw; /* voluntary context switches */
long r u_nivcsw; /* involuntary " */
};
2)函数getrusage()的作用是获取系统资源使用情况。
/*