为什么要配置内核

基于硬件和软件的需求选出需要的功能,去掉不要的功能。

内核配置的方法

make config:基于文本交互的配置。

make menuconfig:基于图形菜单的配置。

make menuconfig配置方法

1.菜单项的分类

processor type and features   处理器类型

networking support            网络协议支持

device drivers                设备驱动支持

file systems                  文件系统支持

2.菜单项的选择方式

< >,表示不选择该功能。

<*>,表示该功能对应的源文件(.c)先被编译成中间文件(.o),然后合并到内核映像中,该功能最终运行在内存里面。需要一直使用的功能选择该方式。

<M>,表示该功能对应的源文件(.c)先被编译成中间文件(.ko),然后集中到相应的文件夹中。模块最终存放在辅存上,当需要使用时再动态加载到内存。不需要一直使用的功能选择该方式。

3.配置文件保存位置

与Makefile文件同目录下的.config文件保存了配置结果,该文件为隐藏文件,通过ls –a命令可以看到此文件。该文件中每一项与菜单项的每一项对应。在配置菜单中选择help可以查看与之对应项的名称。

4.如何配置内核配置

4.1.选择一个已有的配置文件简化配置。

4.2.不清楚的配置项保存为默认值。

内核的配置与编译

1.配置内核配置文件

1.1.复制配置文件

复制PC机上的Linux系统中的/boot/config...的内核配置文件到内核源代码中。在arch/<cpu>/configs文件夹中也保存有相应参考的配置文件。

1.2.载入配置文件

make menuconfig->load an alternate configuration file->exit->yes

1.3.修改配置文件

make menuconfig->networking options->< >the ipv6 protocol->exit->yes

2.编译内核映像

选择为<*>的模块会被编译成内核映像文件(zImage)

示例:

make zImage

make bzImage

使用V=1选项显示详细编译信息

make zImage V=1

make bzImage V=1

编译好的内核位于arch/<cpu>/boot/目录下

3.编译内核模块

选择为<M>的模块会被编译成内核模块文件

示例:

make modules

4.移动内核模块

编译出来的内核模块散落在内核目录的各个位置,通过移动内核模块,移动到系统根目录的/lib/modules/目录下

示例:

make modules_install

5.打包内核模块(制作ramdisk)

格式:

mkinitrd initrd-$version $version

示例:

mkinitrd initrd-2.6.39 2.6.39

$version表示/lib/modules/目录下的对应文件夹名称,在运行命令的目录下会产生initrd-2.6.39文件

6.安装内核文件(x86)

1.拷贝内核映像

cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.39

2.拷贝内核模块

cp initrd-2.6.39 /boot/

3.修改启动文件

vim /etc/grub.conf

title Red Hat Enterprise Linux (2.6.)
root (hd0,)
kernel /vmlinuz-2.6. ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=128M LANG=zh_CN.UTF- rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initrd-2.6.

4.重新启动系统

uname –r 查看内核版本

7.清理内核文件

1.在配置的阶段产生了.config文件

2.在编译的过程中产生了很多中间文件(.o),一部分中间文件变成了内核映像(zImage),另一部分文件变成了内核模块(.ko)

示例:

make clean       清除编译产生的文件

make distclean   清除配置和编译产生的文件

[国嵌攻略][099][Linux内核配置与编译]的更多相关文章

  1. [国嵌攻略][108][Linux内核链表]

    链表简介 链表是一种常见的数据结构,它通过指针将一系列数据节点连接成一条数据链.相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入 ...

  2. [国嵌攻略][098][Linux内核简介]

    Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...

  3. [国嵌攻略][107][Linux进程管理子系统]

    进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 2.进程:是一个执行中的程序,它是一个动态的实体. 进程四要素 1.有一段程序供其执行.这段程序不一定是某个进程所 ...

  4. [国嵌攻略][103][Linux内核模块基础]

    什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...

  5. [国嵌攻略][106][Linux内存管理子系统]

    内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址.虚拟地址简单的来说就是程序中使用的地址 ...

  6. [国嵌攻略][104][Linux内核模块设计]

    内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk ...

  7. [国嵌攻略][070-095][Linux编程函数手册]

    第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 ...

  8. [国嵌攻略][119][Linux中断处理程序设计]

    裸机中断: 1.中断统一入口. 2.注册中断处理程序. 3.根据中断源编号,调用中断处理程序. Linux中断 1.在entry-armv.S中的_irq_svc是中断统一入口. 2.获取产生中断源的 ...

  9. [国嵌攻略][109][Linux系统调用]

    系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用. 工作流程 1.通过软中断(swi)从用户空间切换到内核空间.entry-common.S中的ENTRY(vector_swi) ...

随机推荐

  1. 简单记录一下原生ajax

    面试老忘记,代码如下 function ajax() { var xmlHttpRequest = null; //定义XMLHttp对象的容器 if(window.XMLHttpRequest) { ...

  2. DNS查询的工作原理

    二.DNS查询的工作原理 1.DNS查询过程按两部分进行     1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析     2.如果不能再本机解析查询, 可根据设定的查询DN ...

  3. linux下配置Tomcat开机启动

    我们在linux下安装好tomcat之后:经常是需要配置到开机启动的: 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在ce ...

  4. Python函数篇(7)-正则表达式

    1.正则表达式   正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供了基础,简单的来说,正则表达式是由一些字符和特殊符号组成的字符串.Python通过标准库中的re模块来支持正 ...

  5. 本机向windows服务器传输文件的三种方法

    闲来无事,在腾讯云上申请了一个免费的服务器,想将自己写的网页发布到服务器上,服务器的申请很简单,百度搜索 腾讯云 ,然后新人第一次注册能申请到免费一个月的云主机,虽然配置不怎么高,但是还是能用的,这是 ...

  6. windows server数据库备份

    @echo off //设置生成文件名字 set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"//使用mysqldump输出sql文件 cesec ...

  7. ASP.NET MVC框架开发系列教程

    本系列教程是自己在工作中使用到而记录的,如有错误之处,请给与指正 文章目录 MVC4 开篇 第一章 初识MVC4 第二章 下山遇虎(@helper) 第三章 Models模块属性详解 第四章 在MVC ...

  8. Linux上安装Redis

    很多编程的小朋友一提到Linux脑袋就大了,我也一样,我是一个大专的学生,没有学过Linux,感觉自己欠缺很多,也知道了人和人之间的差距,当你真正的走上社会,才知道社会是什么,才知道没有学历找工作有多 ...

  9. css3弹性盒模型flex快速入门与上手(align-content与align-items)

    接着上文css3弹性盒模型flex快速入门与上手1继续,上文还剩下两个父容器的属性align-items和align-content. 一.align-content:多行的副轴对齐方式 含义 多行的 ...

  10. JS中date日期初始化的5种方法

    创建一个日期对象: 代码如下: var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yyyy hh ...