最近比较闲,定了一个任务就是学习linux的内核原理,网上找了些资料进行了汇总和记录如下:
1、找到ubuntu网站(https://launchpad.net/ubuntu/+source/linux/3.8.0-19.29)下载内核源码linux_3.8.0.orig.tar.gz
解压到本地文件夹;
2、本文采用make menuconfig方式进行内核的编译(方法有很多种);
即 apt-get install libncurses5-dev
,安装后进入解压的文件夹,运行命令make menuconfig
即可出现图形化界面;
得到如下图所示的界面:
以上则表示进入了内核的配置界面。
这过程中也遇到了一个问题,libncurses5-dev
无法安装的问题(无法解析软件包文件 /var/lib/apt/lists/cn.archive.......),主要是源太旧了,需要apt-get update 一下,网上的方法可以解决问题,即:
正在读取软件包列表… 有错误!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/cn.archive.ubuntu.com_ubuntu_dists_
natty_main_i18n_Translation-en
E: 无法解析或打开软件包的列表或是状态文件。
问题:软件包出错
解决方案:
sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update
下一步翻译和分析下配置选项的含义和作用:
A:最上面说明翻译如下:
箭头表示含有子菜单
enter选择子菜单
高亮的字母表示热键
<Y>表示包含
<N>表示除外
<M>模块化功能
按 Esc Esc 两次退出
<?>表示帮助
</>表示查询
图例:[*] 内置;[ ] 除外;<M> 模块;< >模块 capable
B:帮助选项中的概览说明如下:
这个接口让你可以选择需要的功能和参数进行编译。功能可以是内置的,模块化的或者直接忽略。参数必须以十进制或十六进制或文本的方式进行输入。
菜单选项中的行首括号代表的含义如下:
[ ] 表示可以内置或者移除
<>表示可以内置,模块化或者移除
{ }表示内置或模块化(根据其他功能选择)
- - 根据其他功能选择
但 括号中为*,M或者空白时表示内置,以模块编译或者单独的执行该功能
如要改变这些功能选项,则可以将光标移动到对应选项上进行高亮选中,然后按<Y>来内置,<M>模块化功能,或<N>来移除。
也可以通过按空格键来循环可选项(ie. Y->N->M->Y)
下方框中的内容依次是:
x x General setup ---> x x 常规设置
x x [*] Enable loadable module support ---> x x 允许模块加载支持
x x [*] Enable the block layer ---> x x 允许块设备支持
x x Processor type and features ---> x x 处理器类型和功能
x x Power management and ACPI options ---> x x 电源管理和ACPI选项
x x Bus options (PCI etc.) ---> x x 总线选项(PCI等)
x x Executable file formats / Emulations ---> x x 可执行文件格式/仿真
x x -*- Networking support ---> x x 网络支持
x x Device Drivers ---> x x 设备驱动
x x Firmware Drivers ---> x x 固件驱动
x x File systems ---> x x 文件系统
x x Kernel hacking ---> x x 内核监视
x x Security options ---> x x 安全选项
x x -*- Cryptographic API ---> x x 密码API
x x [*] Virtualization ---> x x 虚拟化
x x Library routines ---> x x 程序库程序
x x --- x x
x x Load an Alternate Configuration File x x 加载备用配置文件
x x Save an Alternate Configuration File x x 保存备用配置文件
(一)General setup:
与Linux 最相关的程序互动、核心版本说明、是否使用程序代码等信息都在这里设定。 这里的项目主要都是针对核心不同程序之间的相关性来设计。
(二)Enable loadable module support:
模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。在启动时不用到的功能,编成模块是最有效的方式。
(三)Enable the block layer:
使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。如果不选,那么 blockdev 文件将不可用,一些文件系统比如 ext3 将不可用。这个选项会禁止 SCSI 字符设备和 USB 储存设备,如果它们使用不同的块设备。
(四)Processor type and features:
根据自己CPU的类型进行适合的设置。
(五)Power management and ACPI options:
对电源进行管理。ACPI表示高级配置和电源管理接口(Advanced Configuration and Power Management Interface)。
(六)Bus options (PCI etc.) :
这个项目和总线有关。分为最常见的 PCI和 PCI-express 的支持,还有笔记本电脑常见的 PCMCIA 插卡等等。
(七)Executable file formats / Emulations:
是给 Linux 核心运作执行文件之用的数据。通常与不编译行为有关。
(八)Networking support:
是相当重要的选项,因为他还包括了防火墙相关的项目。由于防火墙是在启动网络之后再设定即可,所以绝大部分的内容都可以被编译成为模块,而且也建议编成模块。有用到再载入到核心即可。
(九)Device Drivers:
设备驱动设定。
(十)Firmware Drivers:
固件驱动设定。
(十一)File systems:
文件系统的支持也是很重要的一项核心功能。因为如果不支持某个文件系统,那我们的 Linux kernel 就无法识别,当然也就无法使用。
(十二)Kernel hacking:
这里和核心开发者比较有关的部分,这部分建议保留默认值即可, 应该不需要去修改,除非你想要进行核心方面的研究。
(十三)Security options:
这里是属于信息安全方面的设定,包括 SELinux 这个细部权限强化模块也是在这里编入核心的,这部分可以作一些额外的设定。
(十四)Cryptographic API:
是微软在 Windows 操作系统中添加的密码编译机能,作为资料加密与解密功能的重要基础,CryptoAPI 支持同步,异步的金钥加密处理,以及操作系统中的数位凭证的管理工作。
(十五)Virtualization:
虚拟化是近年来非常热门的一个议题,因为计算机的能力太强,所以时常闲置在那边, 此时,我们可以透过虚拟化技术在一部主机上面同时启劢多个操作系统来运作,这就是所谓的虚拟化。 Linux 核心已经主动的纳入虚拟化功能。而 Linux 认可的虚拟化使用的机制为 KVM(Kernel base Virtual Machine)。
(十六) Library routines:
常用的核心函式库也可以全部编为模块
(十七)Load an Alternate Configuration File:
(十八)Save an Alternate Configuration File:
3、第一个选项回车后得到如下界面:
突然发现内容挺多的,所以下一篇在写general setup的内容,否则看起都累,还容易搞混。