[国嵌攻略][099][Linux内核配置与编译]
为什么要配置内核
基于硬件和软件的需求选出需要的功能,去掉不要的功能。
内核配置的方法
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内核配置与编译]的更多相关文章
- [国嵌攻略][108][Linux内核链表]
链表简介 链表是一种常见的数据结构,它通过指针将一系列数据节点连接成一条数据链.相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入 ...
- [国嵌攻略][098][Linux内核简介]
Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...
- [国嵌攻略][107][Linux进程管理子系统]
进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 2.进程:是一个执行中的程序,它是一个动态的实体. 进程四要素 1.有一段程序供其执行.这段程序不一定是某个进程所 ...
- [国嵌攻略][103][Linux内核模块基础]
什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...
- [国嵌攻略][106][Linux内存管理子系统]
内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址.虚拟地址简单的来说就是程序中使用的地址 ...
- [国嵌攻略][104][Linux内核模块设计]
内核模块示例 #inlcude <linux/init.h> #inlcude <linux/module.h> static int hello_init(){ printk ...
- [国嵌攻略][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 所属头文件 ...
- [国嵌攻略][119][Linux中断处理程序设计]
裸机中断: 1.中断统一入口. 2.注册中断处理程序. 3.根据中断源编号,调用中断处理程序. Linux中断 1.在entry-armv.S中的_irq_svc是中断统一入口. 2.获取产生中断源的 ...
- [国嵌攻略][109][Linux系统调用]
系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用. 工作流程 1.通过软中断(swi)从用户空间切换到内核空间.entry-common.S中的ENTRY(vector_swi) ...
随机推荐
- bzoj 3620: 似乎在梦中见过的样子
Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...
- 一、源代码-面向CLR的编译器-托管模块-(元数据&IL代码)
本文脉络图如下: 1.CLR(Common Language Runtime)公共语言运行时简介 (1).公共语言运行时是一种可由多种编程语言一起使用的"运行时". (2).CLR ...
- struts2 使用filter解决中文乱码问题
1.编写fliter的代码 import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChai ...
- 妙味课堂:JavaScript初级--第12课:json与数组
1.json数据格式及json语法 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- c#实现超实用的<证件照换底色>小工具
1前言 我们在工作和生活中经常要填写一些个人资料,这时候往往需要放证件照上去,但是有时候人家要求是红底或白底,但是偏偏不巧的是你以前照了张蓝底的.这时候你想换个底色,于是在百度上一搜“证件照换 ...
- Nginx编译配置介绍
源码包 nginx-1.6.2.tar.gz --help 使用帮助 --prefix=PATH Nginx安装路径,如果没有指定,默认为/usr/local/nginx. --sbin-path=P ...
- Python 实现网页截屏、查库、发邮件
本文介绍了使用 Python(2.7版本)实现网页截屏.查库.发邮件的 demo.用到了 selenium.phantomjs.mailer.jinja2.mysqldb 还有 image,都是比较典 ...
- mysql存储过程 详细注释
原文:https://my.oschina.net/u/3582142/blog/1581929
- HashMap分析之红黑树树化过程
概述 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例 ...
- ajax写登录页面
静态配置 STATICFILES_DIRS = ( os.path.join(BASE_DIR,'my_blog','static'), ) AUTH_USER_MODEL = "app01 ...