Linux实验报告.doc_第1页
Linux实验报告.doc_第2页
Linux实验报告.doc_第3页
Linux实验报告.doc_第4页
Linux实验报告.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖 北 大 学计算机与信息工程学院2016 2017学年度第 二 学期学 生 实 验 报 告 册学生姓名: * 班 级: 物 联 网 工 程 学 号: * 课程名称:LINUX操作系统实验教程任课老师: * 学生实验守则1、学生在规定的时间内进行实验,不得无故缺席或迟到。2、学生在每次实验前对排定要做的实验应进行预习,并按要求作好预习报告。3、每次实验前,必须交上次实验报告和本次实验预习报告,并经指导教师提问、检查同意后,才可进行本次实验。4、学生进入实验室指定位置后,首先根据仪器清单核对自己使用的仪器是否有缺少或损坏,发现问题及时向指导教师报告,严禁擅自动用别组仪器。5、实验时必须有实事求是、严肃认真的科学态度,严格遵守仪器操作规程和注意事项。6、实验完毕应将实验数据交给指导教师检查,合格后,整理复原好仪器设备,方可离开实验室。7、保持实验室肃静和整洁,不得大声喧哗,乱丢垃圾和吃东西。8、学生在实验过程中,由于不遵守操作规程或未经许可,擅自进行实验而造成事故、损坏仪器设备,应及时报告,并填写损坏清单,按院有关规定进行赔偿。实 验 报 告 单实验名称: 基于ubantu的内核编译 1同组人: 实验课时:实验室: 报告日期:实验项目:一、实验目的:1.了解ubuntu内核的功能。 2.在Linux环境下进行ubuntu内核的编译。3.使用新编译的ubuntu内核进入Linux系统。二、实验器材:1.装有Linux系统的电脑一台。2.一种版本的ubuntu内核。三、实验原理:每一个Linux发行版都有自己专门的工具去构建自定义的内核该实验主要是讲如何在Ubuntu平台上编译内核, 如何从(也叫vanilla kernel)获得最新且未改动的内核源代码来构建一个自定义的内核, 这样可以使用自己的内核而不是发行版的内核。四、实验步骤:1解压tara文件:先xz-dxxxtaraz将X0tar.xz解压成xxxtar然后,再用tarxvfxx.tar来解包2akemrproper得到源代码后将其净化3. cp/bofig-uname-r/configmakemenuconfig进去后loadok-save-ok-ext)对内核选项进行配置4.makedep建立模块间的依赖信息5.makeclean删除配置时留下的一些不用的文件6.makebulman编译内核内核较小时可以用7.makelmage(15分钟)编译模块。(1小时)8.makemodulesinstall安装模块9.mnkinitramfs-o/boot/nitrd-nux3.5.0img(将3.5.0换成自己的新内核10.到此为止构建内核完毕把内核映象和System,map拷贝到/oot/下排cp/usr/src/linux-3.5o/arch/386/boot/bimage/boot/vmlinu-2.6.33generic(有额外的情况,1386文件夹里面有可能找不到brimage文件,可以去x86-64里面找般会找到)排cpsystem.map/boot/System,map-kernelversion(自己新内核版本号如11.修改gub配置文件/boot/arub/grub.cfgupdate-grub五、数据记录与处理及结果讨论:进入新的ubantu系统使用 uname a 命令查询内核版本信息如下图六、实验心得:通过本次编译内核实验让我最大的体会就是要有耐心。首先在编译内核之前是安装ubantu,安装过程相对内核编译要简单的多,但是还是要注意很多问题,比如磁盘的分区,刚开始我的分区有点问题,boot大小不够,导致我后来编译内核出现了安装错误,当时不知道怎么处理,然后就净化内核了,重新安装ubantu后编译内核成功了。在编译内核过程中,命令行操作比较多,最重要的就是要注意路径名,其次是命令不要敲错了,编译时间较长,要分配好自己的时间,同时也要守着电脑以免电脑待机了。最后就是遇到问题的时候不能泄气,应该努力寻求解决办法,很重要的一点就是多尝试,在尝试中你才能找到最好办法,就比如linux下的很多命令,不会的就百度和咨询同学和老师,理解了命令的功能后就会越用越熟练,越用越有趣,在实验成功后会有一种说不出的喜悦感。成绩: 批阅教师: 日 期:实 验 报 告 单实验名称: 多进程与多线程实验 1同组人: 实验课时:实验室: 报告日期:实验项目:一、 实验目的:1、掌握多线程编程的特点和工作原理;2、掌握编写线程程序的方法3、了解线程的调度和执行过程4、掌握线程同步机理二、实验器材:装有Linux的电脑一台三、实验原理:应用线程的概念写一个程序(包括一个测试线程程序类TestThread,一个Thread类的子类PrintThread)。在测试程序中用子类PrintThread创建2个线程,使得其中一个线程运行时打印10次“线程1正在运行”,另一个线程运行时打印5次“线程2正在运行四、实验步骤:将程序通过gcc命令编译,并使用./xxx.out运行程序五、数据记录与处理及结果讨论:六、实验心得:通过本次实验对多进程和多线程有了更深的理解,在Linux下不管是多线程编程还是多进程编程,最终都是用do_fork实现的多进程编程,只是进程创建时的参数不同,从而导致有不同的共享环境。Linux线程在核内是以轻量级进程的形式存在的,拥有独立的进程表项,而所有的创建、同步、删除等操作都在核外pthread库中进行。pthread 库使用一个管理线程(_pthread_manager() ,每个进程独立且唯一)来管理线程的创建和终止,为线程分配线程ID,发送线程相关的信号,而主线程pthread_create()) 的调用者则通过管道将请求信息传给管理线程。成绩: 批阅教师: 日 期:实 验 报 告 单实验名称: 网络编程 1同组人: 实验课时:实验室: 报告日期:实验项目:1、 实验目的:(1) 理解Socket概念; (2) 理解并掌握Socket模型下获得本机IP信息的方法; (3) 理解并发服务器模型,掌握通用套接字开发技术; (4) 掌握Linux平台数据结构的传送方法。二、实验器材:1.安装有Linux的电脑二、 实验原理:程序进行网络通信时,是通过IP 地址和套接字来访问一个主机的。 1. IP 地址:IP 地址的作用是标识计算机的网卡地址,每一台计算机都有一个IP 地址。在程序中是通过IP 地址来访问一台计算机的。IP 地址是32 位长度的二进制数值,存储空间是4 个字节。例如1100000010101000 00000001 00000110 是一台计算机的IP 地址。IP 地址可以使用点分十进制来表示,192.168.1.1。 2. 端口:所谓端口,是指计算机中为了标识在计算机中访问网络的不同程序而设的编号。端口号是一个16 位的无符号整数,对应的十进制取 值范围是0655354、 实验步骤:1.编译程序 gcc 2.运行程序 ./xxx.outTcp运行图:Udp运行图 :六、实验心得:通过本次实验对网络编程有了更深的理解, TCP下发起连接在STREAM下(TCP),connect()会企图建立连接attempt to establish a connection;UDP下设对端地址和端口在DAGRAM下(UDP),connect()的作用只是设peer address/port,而不建立连接 。在本次实验中了解了服务器的工作以及网络的通信原理。成绩: 批阅教师: 日 期:实 验 报 告 单实验名称: 增加系统调用和字符驱动 1同组人: 实验课时:实验室: 报告日期:实验项目:1、 实验目的:1. 了解Linux驱动程序的结构; 2. 掌握Linux驱动程序常用结构体和操作函数的使用方法; 3. 初步掌握Linux驱动程序的编写方法及过程; 4. 掌握Linux驱动程序的加载方法2、 实验器材:1.装有linux的电脑一台 2.已经有一种版本的ubuntu内核3、 实验原理: Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。二者在使用方式上也有相似之处。Linux系统的核心部分即是Linux内核,是一系列设备的驱动程序。系统调用是Linux内核提供的功能十分强大的一系列的函数。这些函数是在内核中实现的,它们是应用程序和内核交互的接口,系统调用在Linux系统中发挥着巨大的作用,如果没有系统调用,那么应用程序就失去了内核的支持。四:实验步骤:1.添加系统调用号 vim ./arch/x86/entry/syscalls/syscall_64.tbl(32位系统是syscall_32.tbl) 添加了一个系统调用函数,sys_hello ,332是系统调用号。2.声明系统调用函数原型 vim include/linux/syscalls.h Asmlink long sys_hello(void);其中的asmlinkage用在大多数的系统调用中。有一些情况下是需要明确的告诉编译器,我们是使用stack来传递参数的,比如X86中的系统调用,是先将参数压入stack以后调用sys_*函数的,所以所有的sys_*函数都有asmlinkage来告诉编译器不要使用寄存器来编译。3.添加系统调用函数的定义 vim kernel/sys.c asmlinkage long sys_hello(void)printk(“Hello HuangJin ,your student number is 205!”);return 1; 注意此处的sys_hello参数表中如果没有指明void,编译时是会报错的。 另外,在内核中创建对文件的操作和在用户空间中对文件的操作有些许不同,下面是几个函数的对应关系。4.编译内核 sudo menuconfig 直接选择save,然后退出即可,生成.config sudo make 编译开始,我是双核四线程,等待了不到20分钟。 sudo make modules_install 安装模块 sudo make install 安装内核 5.将生成的内核文件(arch/x86_64/boot/bzImage),复制进/boot中,注意保存原有内核文件。注意linux /bzImage中的bzImage就是我们生成的内核文件,如果你没有将boot单独分区,则应该写为linux /boot/bzImage 图中的配置并非所有都是必需,比如if段就可以不要,root=”hd0, msdos2”,表示第一块硬盘的第二个分区(boot分区,如果没有将boot单独分区,请指定为/分区);其中root=UUID=.部分可以用root=/dev/sda2代替。6.重启,选择进入新的内核。7.测试系统调用sys_hello #include #include #include int main()long int amma = syscall(332);printf(“System call sys_hello returned %ldn”,amma);return 0;syscall的参数为系统调用号。 由于sys_hello里面有一条printk语句,该语句会将此输出作为系统的日志,通过dmesg命令查看。 由于日志并没有立即输出,我又执行了一次测试程序,日志便将两次的都输出了。五、数据记录与处理及结果讨论:最后通过dmesg查看系统日志如图:六、实验心得:通过本次实验对编译内核以及增加系统调用有了更深的认识,了解了系统调用是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论