linux 内核编译流程
- 格式:docx
- 大小:10.89 KB
- 文档页数:1


linux内核编译步骤
对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在
我归纳了一下,写出这一篇还算比较详细的步骤,希望能对各位新手有一些
帮助。
1、 准备工作
(1) 整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。
(2) 建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。
(3) A:下载并解压linux内核,建议从/pub/linux/kernel/ 下载内核,因为安装系统时所安装的源代码默认情况下支持很多设备,这样给内核裁减增加了难度。以下假设你已经下载了内核的为linux-x-y-z.tar.gz。一般都将linux内核源代码放在/usr/src下,这里仍然遵守这个习惯,如果你的这个路径下已经存在这个版本的内核,建议将已有的改个名称。
B:如果内核已经安装(/usr/src/目录有linux子目录),跳过如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号), 比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh
kernel-source-2.xx.xx.rpm安装内核
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
确保源代码目录下没有不正确的.o文件和文件依赖关系,执行该命令后,内核选项会回到默认的状态下。如果你是下载的内核源码,而且是第一次编译,就没有必要执行这一步操作
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。
想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。
内核版本号
由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable
tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.2.16,最新发布的Redhat7.0所采用的就是2.2.16的内核;开发树的最新版本是2.3.99。也许你已经发现和多网站上都有2.4.0-test9-pre7之类的内核,但是这并不是正式版本。内核版本的更新可以访问。
湖北大学
学 生 实 验 报 告
实验课程 网络实用技术
开课学院 计算机与信息工程学院
任课教师 徐 婕
学生姓名 骆 婧
学生学号 ************** 70
专业班级 计 科 一 班
学生年级 2011级
2013-2014 学年 第二学期 一. 实验目的
通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。
二. 实验内容
1. Linux环境下的C或者C++编译和调试工具的使用
2. 向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和姓名信息。
3. Linux新内核的编译、安装和配置。
4. 编写应用程序以测试新的系统调用并输出测试结果。
三、实验步骤
第一步:解压文件
1.下载linux-3.13.3.tar.xz压缩包。
2.在Ubantu系统下,解压该文件,解压之后得到linux-3.13.3文件包
# tar –xf linux-3.13.3.tar.xz
3.将解压后的文件包复制到/usr/src
# cp linux3.13.3 /usr/src
第二步:修改源程序,增加系统调用
1. gedit /usr/src/linux-3-13.3/kernel/sys.c (增加系统调用,使用面向内核的打印函数printk打印姓名学号)
使用gedit命令,可以直接在文档编辑器中直接修改。修改好后按保存关闭文档编辑器。
在开头加入头文件:
#include
Linux内核编译menuconfig介绍
menuconfig
menuconfig是常用的配制工具,不用特意安装,好像是和GCC一起装上的。
注:menuconfig要用到ncurses的库,所以要安装它。下面的命令可以安装。
apt-get install libncurses*
选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”- 将该功能编译进内核
“N”- 不将该功能编译进内核
“M”- 将该功能编译成可以在需要时动态插入到内核中的模块。
将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。
make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。
中括号:要么是空,要么是"*",代表要么不要,要么编译到内核里。
尖括号:可以是空,"*"和"M",多一样选择,可以编译成模块。
圆括号:所提供的几个选项中选择一项。
menuconfig相关命令:
$sudo make menuconfig
配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。 选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。