@Lxjeng
2016-03-23T13:29:43.000000Z
字数 2121
阅读 1750
- 姓名:梁晓静 学号:1405010530 班级:计算机5班
- 报告提交日期:2016.3.25 报告提交截止日期:2016.3.25
- Linux内核的编译和安装
- 1、完成Linux内核的配置、编译、安装及验证和测试
- 2、生成Makefile文件、添加和移除内核模块
- 下载源码linux-3.12.56.tar.xz,在Linux环境下配置、编译、安装内核,并完成验证和测试。
- 虚拟机Linuxmint-17.2、源码linux-3.12.56.tar.xz、automake和autoconf工具(用于Makefile文件的生成)
1、准备阶段
- 在www.kernel.org下载源码linux-3.12.56.tar.xz,建立内核编译环境,将源码解压到/usr/src,建立到/usr/src/linux的符号链接。
- # tar xvf linux-3.12.56.tar.xz
- # ln -sv /usr/src/linux-3.12.56 /usr/src/linux
2、配置内核
- # make menuconfig:打开一个文件窗口选择菜单
在此之前遇到没有规则创建目标的错误,因此安装了相关工具,解决如图:
开始正式配置内核:
3、编译内核
- # make -j2
4、安装模块和内核
- # make modules_install
- # make install
5、验证并测试
- # cat/boot/grub/grub.conf

此时已经编译好自己的内核了:
6、生成Makefile文件
- ①在/home/lxj下新建文档编写mian.c、fib.c、fib.h文件
#include<stdio.h>#include"fib.h"int main(){int n=0;printf("input n=\n");scanf("%d",&n);printf("fib(%d)=%dn",n,fib(n));return 0;} //main.c
int fib(int n);//fib.h
#include"fib.h"int fib(int n){if(n ==0)return 0;if(n==1||n==2){ return 1;return fib(n-1)+fib(n-2);}}//fib.c
如图:

- ②新建Makefile.am文件
AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=fibfib_SOURCES= fib.c fib.h main.c

- ③# aclocal:成功后会在目录下产生aclocal.m4和autom4te.cache文件
# autoheader:成功后会在目录下产生config.h.in文件
# autoconf:成功后会在目录下产生configure文件
# automake --add-missing:成功后会在目录下产生depcomp、install-sh 、missing和Makefile.in文件
# ./configure:自动生成Makefile文件
注:在编写Makefile.am时居然将OPTIONS少写了一个字母,所以导致了各种错误!
7、添加和删除内核模块
- ①新建hello.c和Makefile(输出Hello,World)
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>static int hello_init(void){printk(KERN_ALERT "Hello World!/n");return 0;}static void hello_exit(void){printk(KERN_ALERT "Bye World!/n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("WFJ");//hello.c

- ②# make
注:这些错误又由于粗心,没有注意格式,在编写Makefile时make前应加Tab键。
- ③添加模块并查看其情况
# insmod ./hello.ko
# tail /var/log/kern.log
- ④删除模块并查看其情况
# rmmod hello
# tail /var/log/kern.log
- ①通过本次编译内核的实验,我了解了一个内核从准备阶段、配置、编译、安装及验证和测试的大概过程,Linux内核的体积结构虽然是单内核的,具有模块化,耦合度高的特点,但其在管理系统的进程、内存、设备驱动程序、文件和网络等方面更高效稳定。
②实验过程中遇到了很多棘手的问题,比如没有相关规则和环境找到目标之类,但在同学的帮助下,一一将有用的东西安装好,才能一步步往下进行。之前从未接触过内核编译的我,一开始遇到错误根本不知道原因何在,但经过同学远程控制的帮助下,将繁琐的问题解决,也让我学会了很多相关知识。
③为时三天左右的时间,可能由于我的电脑配置不高,老是卡住,而且一打开虚拟机,鼠标就用不了,影响了实验的进度。当然,这种情况也让我认识到耐心和坚韧的重要性,学习计算机是一件痛并快乐着的事情!