Linux——核心的编译与安装

1、编译核心与核心模块

[root@study linux-3.10.89]# make vmlinux <==未经压缩的核心
[root@study linux-3.10.89]# make modules <==仅核心模块
[root@study linux-3.10.89]# make bzImage <==经压缩过的核心(预设)
[root@study linux-3.10.89]# make all <==进行上述的三个动作

我们常见的在 /boot/ 底下的核心文件,都是经过压缩过的核心文件,因此,上述的动作中比较常用的是 modules 与 bzImage 这两个,其中 bzImage 第三个字母是英文大写的 I 喔!bzImage 可以制作出压缩过后的核心, 也就是一般我们拿来进行系统开机的信息啰!所以,基本上我们会进行的动作是:
[root@study linux-3.10.89]# make -j 4 clean <==先清除暂存档
[root@study linux-3.10.89]# make -j 4 bzImage <==先编译核心
[root@study linux-3.10.89]# make -j 4 modules <==再编译模块
[root@study linux-3.10.89]# make -j 4 clean bzImage modules <==连续动作!
上述的动作会花费非常长的时间,编译的动作依据你选择的项目以及你主机硬件的效能而不同。此外,为啥要加上 -j 4 呢? 因为我的系统上面有四个 CPU 核心,这几个核心可以同时进行编译的行为,这样在编译时速度会比较快!如果你的 CPU 核心数 (包括超线程) 有多个, 那这个地方请加上你的可用 CPU 数量吧!
最后制作出来的数据是被放置在 /usr/src/kernels/linux-3.10.89/ 这个目录下,还没有被放到系统的相关路径中喔!在上面的编译过程当中,如果有发生任何错误的话, 很可能是由于核心项目的挑选选择的不好,可能你需要重新以 make menuconfig 再次的检查一下你的相关设定喔! 如果还是无法成功的话,那么或许将原本的核心数据内的 .config 文件,复制到你的核心原始文件目录下, 然后据以修改,应该就可以顺利的编译出你的核心了。最后注意到,下达了 make bzImage 后,最终的结果应该会像这样:

Setup is 16752 bytes (padded to 16896 bytes).
System is 4404 kB
CRC 30310acf
Kernel: arch/x86/boot/bzImage is ready (#1)
[root@study linux-3.10.89]# ll arch/x86/boot/bzImage
-rw-r--r--. 1 root root 4526464 Oct 20 09:09 arch/x86/boot/bzImage

2、实际安装模块

对于同一版本的模块反复安装会产生冲突,解决方法:
· 先将旧的模块目录更名,然后才安装核心模块到目标目录去;
· 在 make menuconfig 时,那个 General setup 内的 Local version 修改成新的名称。

3、开始安装新贺新年与多重核心选单

<1>移动核心到 /boot 且保留旧核心文件
保留旧核心有什么好处呢?最大的好处是可以确保系统能够顺利开机啦!因为核心虽然被编译成功了,
但是并不保证我们刚刚挑选的核心项目完全适合于目前这部主机系统, 可能有某些地方我们忘记选
择了,这将导致新核心无法顺利驱动整个主机系统,更差的情况是, 你的主机无法成功开机成功!
此时,如果我们保留旧的核心,呵呵!若新核心测试不通过,就用旧核心来启动啊!嘿嘿! 保证比
较不会有问题嘛!另外,核心文件通常以 vmlinuz 为开头,接上核心版本为依据的档名格式,因此
可以这样做看看:

[root@study linux-3.10.89]# cp arch/x86/boot/bzImage /boot/vmlinuz-3.10.89vbird <==实际核心
[root@study linux-3.10.89]# cp .config /boot/config-3.10.89vbird <==建议配置文件也复制备份
[root@study linux-3.10.89]# chmod a+x /boot/vmlinuz-3.10.89vbird
[root@study linux-3.10.89]# cp System.map /boot/System.map-3.10.89vbird
[root@study linux-3.10.89]# gzip -c Module.symvers > /boot/symvers-3.10.89vbird.gz
[root@study linux-3.10.89]# restorecon -Rv /boot

<2>建立相对应的 Initial Ram Disk (initrd)
由于鸟哥的系统使用 SATA 磁盘,加上刚刚 SATA 
磁盘支持的功能并没有直接编译到核心去,所以当然要使用 initramfs 来加载才行! 使用如下的方
法来建立 initramfs 吧!记得搭配正确的核心版本喔!

[root@study ~]# dracut -v /boot/initramfs-3.10.89vbird.img 3.10.89vbird

<3>编辑开机选单 (grub)
前面的文件大致上都摆放妥当之后,同时得要依据你的核心版本来处理档名喔!接下来就直接使用
grub2-mkconfig 来处理你的 grub2 开机选单设定即可!让我们来处理处理先!

[root@study ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.89vbird # 应该要最早出现!
Found initrd image: /boot/initramfs-3.10.89vbird.img
.....(底下省略).....

因为预设较新版本的核心会放在最前面成为默认的开机选单项目,所以你得要确认上述的结果中,第
一个被发现的核心为你刚刚编译好的核心文件才对喔! 否则等一下开机可能就会出现使用旧核心开
机的问题。现在让我们重新启动来测试看看啰!
<4>重新以新核心开机、测试、修改
如果上述的动作都成功后,接下来就是重新启动并选择新核心来启动系统啦!如果系统顺利启动之后,
你使用 uname -a 会出现类似底下的数据:

[root@study ~]# uname -a
Linux study.centos.vbird 3.10.89vbird #1 SMP Tue Oct 20 09:09:11 CST 2015 x86_64
x86_64 x86_64 GNU/Linux

包括核心版本与支持的硬件平台都是 OK 的!嘿嘿!那你所编译的核心就是差不多成功的啦! 如果
运作一阵子后,你的系统还是稳定的情况下,那就能够将 default 值使用这个新的核心来作为预设开
机啰! 这就是核心编译!那你也可以自己处理嵌入式系统的核心编译

5、以最新核心版本编译centos7.x的核心

1. 先下载 ELRepo 上面的 SRPM 文件!同时安装它:
[root@study ~]# wget 
http://elrepo.org/linux/kernel/el7/SRPMS/kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm
[root@study ~]# rpm -ivh kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm
2. 根据上述的文件,下载正确的核心原始码:
[root@study ~]# cd rpmbuild/SOURCES
[root@study SOURCES]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.3.tar.xz
[root@study SOURCES]# ll -tr
.....(前面省略).....
-rw-r--r--. 1 root root 85523884 Oct 3 19:58 linux-4.2.3.tar.xz # 核心原始码
-rw-rw-r--. 1 root root 294 Oct 3 22:04 cpupower.service
-rw-rw-r--. 1 root root 150 Oct 3 22:04 cpupower.config
-rw-rw-r--. 1 root root 162752 Oct 3 22:04 config-4.2.3-x86_64 # 主要的核心功能
3. 修改核心功能设定:
[root@study SOURCES]# vim config-4.2.3-x86_64
# 大约在 5623 行找到底下这一行,并在底下新增一行设定值!
# CONFIG_VFIO_PCI_VGA is not set
CONFIG_VFIO_PCI_VGA=y
[root@study SOURCES]# cd ../SPECS
[root@study SPECS]# vim kernel-ml-4.2.spec
# 大概在 145 左右找到底下这一行:
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-%{LKAver}.tar.xz
# 将它改成如下的模样:
Source0: linux-%{LKAver}.tar.xz
4. 开始编译并打包:
[root@study SPECS]# rpmbuild -bb kernel-ml-4.2.spec
# 接下来会有很长的一段时间在进行编译行为,鸟哥的机器曾经跑过两个小时左右才编译完!
# 所以,请耐心等候啊!
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-devel-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-headers-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/perf-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/python-perf-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-4.2.3-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-devel-4.2.3-1.el7.centos.x86_64.rpm
如上表最后的状态,你会发现竟然已经有 kernel-ml 的软件包产生了!接下来你也不需要像手动安装
核心一样,得要一个一个项目移动到正确的位置去, 只要使用 yum install 新的核心版本,就会有
4.2.3 版的核心在你的 CentOS 7.x 当中了耶!相当神奇!
[root@study ~]# yum install /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm
[root@study ~]# reboot
[root@study ~]# uname -a
Linux study.centos.vbird 4.2.3-1.el7.centos.x86_64 #1 SMP Wed Oct 21 02:31:18 CST 2015 x86_64
x86_64 x86_64 GNU/Linux

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值