linux实验报告(编译内核)

linux实验报告(编译内核)

ID:8808397

大小:2.54 MB

页数:8页

时间:2018-04-08

linux实验报告(编译内核)_第1页
linux实验报告(编译内核)_第2页
linux实验报告(编译内核)_第3页
linux实验报告(编译内核)_第4页
linux实验报告(编译内核)_第5页
资源描述:

《linux实验报告(编译内核)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、湖北大学学生实验报告实验课程网络实用技术开课学院计算机与信息工程学院任课教师徐婕学生姓名骆婧学生学号2011221104210070专业班级计科一班学生年级2011级2013-2014学年第二学期一.实验目的通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。二.实验内容1.Linux环境下的C或者C++编译和调试工具的使用2.

2、向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和姓名信息。3.Linux新内核的编译、安装和配置。4.编写应用程序以测试新的系统调用并输出测试结果。三、实验步骤第一步:解压文件1.下载linux-3.13.3.tar.xz压缩包。2.在Ubantu系统下,解压该文件,解压之后得到linux-3.13.3文件包#tar–xflinux-3.13.3.tar.xz3.将解压后的文件包复制到/usr/src#cplinux3.13.3/usr/src第二步:修改源程序,增加系统调用1.gedi

3、t/usr/src/linux-3-13.3/kernel/sys.c(增加系统调用,使用面向内核的打印函数printk打印姓名学号)使用gedit命令,可以直接在文档编辑器中直接修改。修改好后按保存关闭文档编辑器。在开头加入头文件:#include在末尾加入函数asmlinkageintsys_mycall(void){printk(KERN_ALERT"MynameisXXXX!MystudentidisXXXXXXX");return1;}2.gedit/usr/s

4、rc/linux-3-13.3/arch/x86/include/asm/syscalls.h在倒数第二行后插入asmlinkageintsys_mycall(void);1.gedit/usr/src/linux-3-13.3/arch/x86/syscalls/syscall_32.tbl最后一行添加一个系统调用的ID351i386mycallsys_mycall第三步:编译安装内核首先进到/usr/src/linux-3.13.3文件夹下#cd/usr/src/linux-3.13.31.makemr

5、proper(清除内核中不稳定的目标文件,附属文件及内核配置文件)2.#makemenuconfig保存设置Save并退出Exit3.#makebzImage(编译内核,大概需要20分钟,最后会出现提示:bzImageisready。)4.#makemodules(编译模块,大概需要一个多小时)5.#makemodules_install(安装模块)6.#makeinstall7#sudoupdate-grub(修改启动配置文件)8.#reboot(重启系统)重启进入系统后查看当前内核版本#uname–r会

6、显示已经编译成功的内核版本号第四步:编写测试程序并测试1.新建一个空白文档,并重新命名为test.c,写入以下函数,并保存#includeintmain(){syscall(354);return0;}2测试用gcc命令编译测试文件#gcc-otesttest.c#./test#dmesg(将信息打印在日志文件)一.实验体会在没有编译内核系统调用之前,我感觉老师布置的这个题目是什么意思都木有搞清楚,总感觉无从下手,也怕自己弄不好造成最后系统永不了的悲剧。但是我还是选择硬着头皮去做,通过在网

7、上查找很多资料和教程,才对这个任务要怎么去完成才有了比较清晰的概念。当然实现的过程中也遇到了不少麻烦。1.版本选择问题首先我担心在3.13.3的版本上直接改动的话如果最后系统调用不成功,会检查不出是内核没有编译好还是测试文件有问题,所以我在网上下了好几个2.6的版本进行试验。可是最后发现每个内核版本里面的那几个需要修改的文件并不在同样的目录下面,依据版本而定。有点版本解压后甚至缺失很多子文件夹,这就让我非常零乱,但是最后通过仔询问其他同学找到了文件包完整的版本。最后的最后决定用3.13.3的版本直接做。2修

8、改源文件问题在2.6的版本里面应该要更改kernel下的entry.S,结果改成了其他的地方的entry.S。最后导致在编译内核的过程中,在makebzImage的时候,系统报错。类似这样的问题犯了好几次,都是文件木有找对位置就匆忙地进行修改。导致最后每次到makebzImage的时候就会报错。在3.13的版本修改源文件是也因为不仔细,把sys_mycall写成了sys_mycalls等等,最后编译过程中出现了函

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。