当前位置:文档之家› linux内核编译和生成makefile文件实验报告

linux内核编译和生成makefile文件实验报告

操作系统实验报告
姓名:学号:
一、实验题目
1.编译linux内核
2.使用autoconf和automake工具为project工程自动生成Makefile,并测试
3.在内核中添加一个模块
二、实验目的
1.了解一些命令提示符,也里了解一些linux系统的操作。

2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境
三、实验要求
1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。

可运行程序生成在src/main目录下。

2要求独立完成,按时提交
四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析)
1.Makefile的流程图:
2.内核的编译基本操作
1.在ubuntu环境下获取内核源码
2.解压内核源码用命令符:tar xvf linux-
3.18.12.tar.xz
3.配置内核特性:make allnoconfig
4.编译内核:make
5.安装内核:make install
6.测试:cat/boot/grub/grub.conf
7.重启系统:sudo reboot,看是否成功的安装上了内核
8.详情及结构见附录
3.生成makefile文件:
1.用老师给的projec里的main.c函数。

2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。

3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(main,1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)
4.新建Makefile文件,如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
first_SOURCES=main.c
5.运行命令aclocal
命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。

6.运行命令autoheader
命令成功之后,会在目录下产生config.h.in这个新文件。

7.运行命令autoconf
命令成功之后,会在目录下产生configure这个新文件。

8.运行命令automake --add-missing输出结果为:
Configure.ac:11:installing./compile’
Configure.ac:8:installing ‘.install-sh’
Configure.ac:8:installing ‘./missing’
Makefile.am:installing ‘./decomp’
9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。

10.运行命令./configure就可以自动生成Makefile。

4.添加内核模块
1.写一个c文件如下:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
int __init hello_init (void)
{
printk("Hello xuxuemei\n");
printk("Hello xuxuemei\n");
printk("Hello xuxuemei\n");
return 0;
}
void __exit hello_exit (void)
{
printk("Hello linux exit\n");
printk("Byebye xuxuemei\n");
}
module_init(hello_init);
module_exit(hello_exit);
2输入 sudo make –C /lilb/modules/$(uname -r)/build M=$(pwd)命令符,生成hello.ko等文件
3.输入命令符:sudo insmod ./hello.ko,加入模块
4.输入命令符:Sudo rmmod hello,删除模块
5输入命令符:tail/var/log/kern.log,查看模块添加情况,如果c文件里的输出都能正常输出的话,说明添加成功。

五、实验体会(如:包括实验中遇到的问题及解决过程、产生的错误及原因分析)
1.在试验中遇到了好多问问题,光ubuntu就装了3遍,其中有一次是编译完内核之后再重启ububtu然后就重启不了了,然后把它卸了重装,重装之后发现又不能联网,然后又重装一遍,发现才可以用。

2.编译内核的过程中,出现了好多问题,下载内核的过程中下载了好几次才下载成功,我一共编译
3.19.,3.18,3.14 这些版本的内核,但是3.19版本的编译时出了错误,也不知道要怎么修改,所以就放弃了,然后编译3.18版本的,编译完成后发现安装不了,然后又编译了3.14,但是配置内核特性的时候又出现了问题。

最后又重新编译了3.18,最后才正确。

3.在生成makefile的过程中,也出现了一些问题,首先就是没有生成alocal.m4文件,然后到最后我才发现原来是那个第一次生成的文件configure.ac需要修改,修改之后就对了。

4.在添加内核模块时也出现了错误,只是那些错误是命令符输入错误的问题。

六、程序清单(如:包括源程序、makefile、readme)
见上面。

七.图片(见附录)
附录:
1.编译内核:
2.生成makefile的结果:
3.添加内核模块。

相关主题