Note For Linux By Jes(20)-Linux 核心编译与管理
来源:互联网 发布:华为云计算论坛 编辑:程序博客网 时间:2024/05/01 13:21
编译前的任务:认识核心与取得核心原始码:
什么是核心(Kernel)
Kernel:核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块,这个核心文件通常被放置成/boot/vmlinuz。
核心模块(kernel module)的用途:将一些不常用的类似驱动程序的咚咚独立出核心,编译成为模块,然后,核心可以在系统正常运行的过程当中加载这个模块到核心的支持,存在/lib/modules/$(uname-r)/kernel/中。
自制核心– 核心编译
升级核心的目的:
新功能的需求:
我需要新的功能,而这个功能只有在新的核心里面才有,那么为了获得这个功能,只好来重新编译我的核心了。例如iptables这个防火墙机制只有在2.4.xx以后的版本里面才有,而新开发的主板芯片组,很多也需要新的核心推出之后,才能正常而且有效率的工作!原本核心太过臃肿:
如果你是那种对於系统『稳定性』很要求的人,对於核心多编译了很多莫名其妙的功能而不太喜欢的时候,那么就可以重新编译核心来取消掉该功能罗;与硬件搭配的稳定性:
由於原本Linux核心大多是针对Intel的CPU来作开发的,所以如果你的CPU是AMD的系统时,有可能(注意!只是有可能,不见得一定会如此)会让系统跑得『不太稳!』。此外,核心也可能没有正确的驱动新的硬件,此时就得重新编译核心来让系统取得正确的模块才好。其他需求(如嵌入式系统):
就是你需要特殊的环境需求时,就得自行设计你的核心罗!(像是一些商业的套装软件系统,由於需要较为小而美的操作系统,那么他们的核心就需要更简洁有力了!)
核心原始码的取得方式:
原本distribution提供的核心原始码文件
取得最新的稳定版核心原始码
保留原本配置:利用patch升级核心原始码
核心原始码的解压缩/安装/观察:
核心原始码的解压缩与放置目录:/usr/src/kernels/
核心原始码下的次目录:
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
最旧式的功能挑选方法,每个项目都以条列式一条一条的列出让你选择,如果配置错误只能够再次选择,很不人性化啊!
核心功能细项选择:
General setup
loadable module + block layer
CPU 的类型与功能选择
电源管理功能
一些汇流排(bus)的选项
编译后运行档的格式
核心的网络功能
各项装置的驱动程序
文件系统的支持
核心黑客、资讯安全、口令应用
虚拟化与函式库
核心的编译与安装:
编译核心与核心模块:
[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开头的档名
移动核心到/boot且保留旧核心文件
创建相对应的Initial Ram Disk (initrd)
编辑启动菜单(grub)
重新以新核心启动、测试、修改
额外(单一)核心模块编译:
编译前注意事项:kernel-devel
单一模块编译:
硬件开发商提供的额外模块
利用旧有的核心原始码进行编译,先到目前的核心原始码所在目录下达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 核心编译与管理
- Note For Linux By Jes(2)-Linux文件与目录管理
- Note For Linux By Jes(3)-Linux文件与目录管理
- Note For Linux By Jes(8)-Linux 账号管理与ACL权限控制
- Note For Linux By Jes(5)-认识与学习 BASH
- Note For Linux By Jes(9)-磁盘配额(Quota)与进阶文件系统管理
- Note For Linux By Jes(11)-程序管理与SELinux 初探
- Note For Linux By Jes(14)-启动流程、模块管理与 Loader
- Note For Linux By Jes(19)-Linux 备份策略
- Note For Linux By Jes(1)-Linux 的文件权限与目录配置
- Note For Linux By Jes(7)-学习 shell scripts
- Note For Linux By Jes(12)-认识系统服务(daemons)
- Note For Linux By Jes(18)-X Window 配置介绍
- Note For Linux By Jes(15)-系统配置工具(网络与打印机)与硬件侦测
- Note For Linux By Jes(4)-文件的压缩与打包
- Note For Linux By Jes(6)-正规表示法与文件格式化处理
- Note For Linux By Jes(13)-认识与分析日志文件
- Note For Linux By Jes(16)-软件安装:原始码与 Tarball
- shell模拟双色球开奖
- 5 个很好的 Python 面试题
- noip 2006
- Java中垃圾回收和静态类型
- 复习“JDK+JVM”的知识点
- Note For Linux By Jes(20)-Linux 核心编译与管理
- 你是谁不重要 重要的是你和谁在一起
- S城生活,告别凌晨两点半
- IOS面试题归总
- 在resin4.0部署项目,出现server 'default' 错误
- html5位置定位
- 冒泡排序
- HDU 3572 Task Schedule(最大流Dinic算法)
- iOS常用设计模式——原型模式