Note For Linux By Jes(20)-Linux 核心编译与管理

编译前的任务:认识核心与取得核心原始码

什么是核心(Kernel)

  1. Kernel:核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块,这个核心文件通常被放置成/boot/vmlinuz
  2. 核心模块(kernel module)的用途:将一些不常用的类似驱动程序的咚咚独立出核心,编译成为模块,然后,核心可以在系统正常运行的过程当中加载这个模块到核心的支持,存在/lib/modules/$(uname-r)/kernel/
    中。
  3. 自制核心– 核心编译

升级核心的目的:

  • 新功能的需求:

    我需要新的功能,而这个功能只有在新的核心里面才有,那么为了获得这个功能,只好来重新编译我的核心了。例如iptables
    这个防火墙机制只有在2.4.xx
    以后的版本里面才有,而新开发的主板芯片组,很多也需要新的核心推出之后,才能正常而且有效率的工作!

  • 原本核心太过臃肿:

    如果你是那种对於系统『稳定性』很要求的人,对於核心多编译了很多莫名其妙的功能而不太喜欢的时候,那么就可以重新编译核心来取消掉该功能罗;

  • 与硬件搭配的稳定性:

    由於原本Linux
    核心大多是针对Intel
    的CPU
    来作开发的,所以如果你的CPU
    是AMD
    的系统时,有可能(注意!只是有可能,不见得一定会如此)会让系统跑得『不太稳!』。此外,核心也可能没有正确的驱动新的硬件,此时就得重新编译核心来让系统取得正确的模块才好。

  • 其他需求(如嵌入式系统):

    就是你需要特殊的环境需求时,就得自行设计你的核心罗!(像是一些商业的套装软件系统,由於需要较为小而美的操作系统,那么他们的核心就需要更简洁有力了!)

核心原始码的取得方式:

  1. 原本distribution
    提供的核心原始码文件
  2. 取得最新的稳定版核心原始码
  3. 保留原本配置:利用patch
    升级核心原始码

核心原始码的解压缩/安装/观察:

  1. 核心原始码的解压缩与放置目录:/usr/src/kernels/
  2. 核心原始码下的次目录:
  • arch:与硬件平台有关的项目,大部分指的是CPU
    的类别,例如x86, x86_64, Xen虚拟支持等;
  • block:与区块装置较相关的配置数据,区块数据通常指的是大量储存媒体!还包括类似ext3等文件系统的支持是否允许等。
  • crypto:核心所支持的加密的技术,例如md5
    或者是des
    等等;
  • Documentation:与核心有关的一堆说明文件,若对核心有极大的兴趣,要瞧瞧这里!
  • drivers:一些硬件的驱动程序,例如显卡、网络卡、PCI相关硬件等等;
  • firmware:一些旧式硬件的微命令码(韧体)数据;
  • fs:核心所支持的filesystems
    ,例如vfat, reiserfs,nfs
    等等;
  • include:一些可让其他程序呼叫的标头(header)
    定义数据;
  • init:一些核心初始化的定义功能,包括挂载与init
    程序的呼叫等;
  • ipc :定义Linux操作系统内各程序的沟通;
  • kernel:定义核心的程序、核心状态、运行绪、程序的排程(schedule)、程序的讯号(signle)
  • lib:一些函式库;
  • mm:与内存单元有关的各项数据,包括swap
    与虚拟内存等;
  • net:与网络有关的各项协议数据,还有防火墙模块(net/ipv4/netfilter/*)等等;
  • security:包括selinux等在内的安全性配置;
  • sound:与音效有关的各项模块;
  • virt :与虚拟化机器有关的资讯,目前核心支持的是KVM (Kernel baseVirtual
    Machine)

核心编译的前处理与核心功能选择

保持干净原始码:make mrproper

开始挑选核心功能:make XXconfig

  • make menuconfig

    最常使用的,是文字模式底下可以显示类似图形介面的方式,不需要启动X Window
    就能够挑选核心功能菜单!

  • make oldconfig

    透过使用已存在的./.config文件内容,使用该文件内的配置值为默认值,只将新版本核心内的新功能选项列出让使用者选择,可以简化核心功能的挑选过程!对於作为升级核心原始码后的功能挑选来说,是非常好用的一个项目!

  • make xconfig

    透过以Qt
    为图形介面基础功能的图形化介面显示,需要具有X window
    的支持。例如KDE
    就是透过Qt
    来设计的X Window,因此你如果在KDE
    画面中,可以使用此一项目。

  • make gconfig

    透过以Gtk
    为图形介面基础功能的图形化介面显示,需要具有X window
    的支持。例如GNOME
    就是透过Gtk
    来设计的X Window,因此你如果在GNOME
    画面中,可以使用此一项目。

  • makeconfig

    最旧式的功能挑选方法,每个项目都以条列式一条一条的列出让你选择,如果配置错误只能够再次选择,很不人性化啊!

核心功能细项选择:

  1. General setup
  2. loadable module + block layer
  3. CPU 的类型与功能选择
  4. 电源管理功能
  5. 一些汇流排(bus)
    的选项
  6. 编译后运行档的格式
  7. 核心的网络功能
  8. 各项装置的驱动程序
  9. 文件系统的支持
  10. 核心黑客、资讯安全、口令应用
  11. 虚拟化与函式库

核心的编译与安装

编译核心与核心模块:

[[email protected] linux-2.6.30.3]# make clean    <==先清除缓存档
[[email protected] linux-2.6.30.3]# make bzImage  <==先编译核心
[[email protected] linux-2.6.30.3]# make modules  <==再编译模块

最后制作出来的数据是被放置在/usr/src/kernels/linux-2.6.30.3/

实际安装模块

两个解决方法啦:

  • 先将旧的模块目录更名,然后才安装核心模块到目标目录去;
  • 在make menuconfig
    时,那个Generalsetup
    内的Local version
    修改成新的名称。

开始安装新核心与多重核心菜单(grub)

核心文件放置在/usr/src/kernels/linux-2.6.30.3/arch/x86/boot/bzImage,但是其实系统核心理论上都是摆在/boot
底下,且为vmlinuz
开头的档名

  1. 移动核心到/boot
    且保留旧核心文件
  2. 创建相对应的Initial Ram Disk (initrd)
  3. 编辑启动菜单(grub)
  4. 重新以新核心启动、测试、修改

额外(单一)核心模块编译

编译前注意事项:kernel-devel

单一模块编译:

  1. 硬件开发商提供的额外模块
  2. 利用旧有的核心原始码进行编译,先到目前的核心原始码所在目录下达make menuconfig
    ,然后将
    NTFS 的选项配置成为模块,之后直接下达:

make fs/ntfs/

那么ntfs
的模块(ntfs.ko)
就会自动的被编译出来了!然后将该模块复制到/lib/modules/2.6.30.3vbird/kernel/fs/ntsf/
目录下,再运行
depmod -a

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 21:33:56

Note For Linux By Jes(20)-Linux 核心编译与管理的相关文章

Note For Linux By Jes(19)-Linux 备份策略

备份要点: 备份数据的考量: 备份哪些文件: 哪些数据对系统或使用者来说是重要的?那些数据就是值得备份的数据!例如/etc/* 及/home/* 等. 选择什么备份的媒介: 是可读写光盘.另一颗硬盘.同一颗硬盘的不同partition.还是使用网络备援系统?哪一种的速度最快,最便宜,可将数据保存最久?这都可以考虑的. 考虑备份的方式: 是以完整备份(类似ghost)来备份所有数据,还是使用差异备份仅备份有被更动过的数据即可? 备份的频率: 例如MySQL 数据库是否天天备份.若完整备份,需要多久

2018-04-28 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第24章 Linux核心编译与管理

硬件的驱动程序可以编译成为核心模块,所以可以在不改变核心的前提下驱动你的新硬件. 编译核心的时机可以归纳为几大类:?新功能的需求:我需要新的功能,而这个功能只有在新的核心里面才有,那么为了获得这个功能,只好来重新编译我的核心了.例如 iptables 这个防火墙机制只有在 2.4.xx 以后的版本里面才有,而新开发的主板芯片组, 很多也需要新的核心推出之后,才能正常而且有效率的工作!?原本核心太过臃肿:如果你是那种对于系统『稳定性』很要求的人,对于核心多编译了很多莫名其妙的功能而不太喜欢的时候,

Linux学习笔记(20) Linux系统管理

1.进程管理 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用有判断服务器健康状态.查看系统中所有进程及杀死进程.一般都可以采用正确的命令终止进程,只有当终止失效时,才强制杀死进程. (1) 查看系统中所有进程 ① ps aux命令表示查看系统中所有进程,使用BSD操作系统格式 USER:该进程是由哪个用户产生的: PID:进程的ID号: %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源: %MEM:该进程占

linux进程的地址空间,核心栈,用户栈,内核线程

linux进程的地址空间,核心栈,用户栈,内核线程 地址空间: 32位linux系统上,进程的地址空间为4G,包括1G的内核地址空间,和3G的用户地址空间. 内核栈: 进程控制块task_struct中保存了2个page大小的信息. 为什么每一个进程都是用各自的内核栈呢? 引用(http://hi.baidu.com/iruler/blog/item/0c3363f377ccc5c90a46e023.html)“ 假设某个进程通过系统调用运行在内核态(使用这个全局内核堆栈),此时如果被抢占,发生

转 Linux命令及Linux终端的20个趣事

https://linux.cn/article-2831-1.html 1. 命令:sl (蒸汽机车) 你可能了解 ‘ls’ 命令,并经常使用它来查看文件夹的内容.但是,有些时候你可能会拼写成 ‘sl’ ,这时我们应该如何获得一些乐趣而不是看见“command not found”呢? 安装 sl [email protected]:~# apt-get install sl (In Debian like OS) [email protected]:~# yum -y install sl

Cordova3.6.3下载安装并创建整合Android项目for Linux(Fedora 20)

注:Crodova2.9版本以后就不可以直接下载ZIP进行安装,需要先安装nodejs.下面以Linux(Feoda 20)为例 一.先安装Nodejs   $ sudo yum install nodejs 二.把把Cordova安装在application/目录下(安装位置任意) $ cd application/      进入目录 $ npm install cordova     安装 三.回到根目录配置环境变量 $ cd ~ $ gedit .bashrc export PATH=/

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

《linux 内核完全剖析》chapter 13 内存管理 (不含swap.c)

内存管理(memory.c 和swap.s 部分) "倒着看" 先看memory management,很明显,前面各种阻力,都是因为涉及内存管理.不先看这个,我估计前面看了也是白看 我估算着理论打基础砸了差不多一个星期的时间在memory management上面了...感觉很有收获,是时候用实践(code)印证理论了! <modern operating system>讲内存管理那一章 http://blog.csdn.net/cinmyheart/article/de

setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux

This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux 6 using Openswan as the IPsec server, xl2tpd as the l2tp provider and ppp for authentication. We choose the IPSEC/L2TP protocol stack because