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

什么是核心(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. 虚拟化与函式库

核心的编译与安装:

编译核心与核心模块:

[root@www linux-2.6.30.3]# make clean    <==先清除缓存档
[root@www linux-2.6.30.3]# make bzImage  <==先编译核心
[root@www 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

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

  1. 鸟哥的Linux私房菜(基础篇)- 第二十六章、Linux 核心编译与管理

    第二十六章.Linux核心编译与管理 最近升级日期:2009/09/18 我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能,所以说,他重 ...

  2. 第二十六章、Linux 核心编译与管理

    我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能, 所以说,他重不重要啊!我们启动的时候其实就是利用启动管理程序加载这个核心文件来侦测硬 ...

  3. Linux 核心编译与管理

    摘自<鸟哥的linux私房菜基础学习篇> 我们说的 Linux 其实挃的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件幵提供系统所有的功能, 所以说,他重丌重要啊!我们开机 ...

  4. Note For Linux By Jes(14)-启动流程、模块管理与 Loader

    Linux的启动流程分析: 启动流程一览 加载BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置: 读取并运行第一个启动装置内MBR 的boot Loader (亦即是grub, s ...

  5. Note For Linux By Jes(1)-Linux 的文件权限与目录配置

    第一个字符代表这个文件是『目录.文件或链接文件等等』: 当为[d ]则是目录,例如上表档名为『.gconf』的那一行: 当为[- ]则是文件,例如上表档名为『install.log』那一行: 若是[l ...

  6. Note For Linux By Jes(8)-Linux 账号管理与ACL权限控制

    Linux的账号与群组: 使用者标识符:UID与GID 使用者账号:先找寻/etc/passwd里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的UID与GID (在/etc/grou ...

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

    备份要点: 备份数据的考量: 备份哪些文件: 哪些数据对系统或使用者来说是重要的?那些数据就是值得备份的数据!例如/etc/* 及/home/* 等. 选择什么备份的媒介: 是可读写光盘.另一颗硬盘. ...

  8. Note For Linux By Jes(3)-Linux文件与目录管理

    EXT2文件系统: superblock:记录此filesystem的整体信息,包括inode/block的总量.使用量.剩余量,以及文件系统的格式与相关信息等: inode:记录文件的属性,一个文件 ...

  9. Note For Linux By Jes(2)-Linux文件与目录管理

    目录与路径: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表『目前使用者身份』所在的家目录 ~account 代表account这个使用者的家目录(account是个帐号名称 ...

最新文章

  1. 为什么总是在__new __()之后调用__init __()?
  2. 原生js实现Ajax,JSONP
  3. TortoiseGit--小乌龟git项目中的使用简介
  4. 上位机与西门子PLC通信协议
  5. css案例_shortcut快捷导航样式
  6. 学计算机的看图写话,小老鼠上网看图写话
  7. 银河麒麟安装node
  8. csdn七牛云存储作为网站的图片外链
  9. Android桌面图标快捷方式
  10. IT6801FN图像质量调优
  11. HPE的通信技术集团将如何加速电信5G的普及和应用?
  12. Flash鼠绘入门第四课:绘制漂亮的梅花-梅花照片分析与学习
  13. proxmox VE开NAT小鸡 无法联网,怎么开NAT模式
  14. unity3d 锁定鼠标
  15. 自制操作系统——第一周
  16. Go Module使用 六大场景讲解示例
  17. 数据库(十)-单表查询(1)条件查询
  18. 【处理手记】U盘读不出+卷标丢失+像读卡器+大小0+无媒体
  19. nodejs爬取网页乱码解决方法
  20. matlab振动方程,数理方程关于振动方程的分析matlab.doc

热门文章

  1. 经过JDBC毗邻oracle数据库的十年夜才干
  2. Iphone, Ipad, Iwatch 屏蔽系统更新提示
  3. 【POJ No. 2431】 丛林探险 Expedition
  4. Swift5.1 语言指南(二十三) 协议
  5. json能传数字,不能传字符串
  6. 中文命名实体识别NER
  7. 极海推出APM32A系列车规级MCU
  8. php每日答题,持续更新!每日答题汇总
  9. 新版Edge检查项F12控制台改为英文
  10. web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentia