建立并安装一个定制的内核
脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用
首先对内核构建目录做一个快速的浏览。 这里所提到的所有目录都在 /usr/src/sys 目录中; 也可以通过 /sys 来访问它。 这里的众多子目录包含了内核的不同部分, 但对我们所要完成的任务最重要的目录是 arch/conf,您将在这里编辑定制的内核配置; 以及 compile,编译过程中的文件将放置在这里。 arch 表示 i386、 alpha、 amd64、 ia64、 powerpc、 sparc64, 或 pc98 (在日本比较流行的另一种 PC 硬件开发分支)。在特定硬件架构目录中的文件只和特定的硬件有关; 而其余代码则是与机器无关的,则所有已经或将要移植并运行 FreeBSD 的平台上都共享这些代码。 文件目录是按照逻辑组织的,所支持的硬件设备、 文件系统, 以及可选的组件通常都在它们自己的目录中。
这一章提供的例子假定您使用 i386 架构的计算机。 如果您的情况不是这样,只需对目录名作相应的调整即可。
注意: 如果您的系统中 没有 /usr/src/sys 这样一个目录, 则说明没有安装内核源代码。安装它最简单的方法是通过以 root 身份运行 sysinstall, 选择 Configure, 然后 Distributions, 然后 src, sys。 如果您不喜欢 sysinstall 并且可以使用 “官方的” FreeBSD CDROM, 则也可以通过命令行来安装:
# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
接下来, 进入 arch/conf 目录下面, 复制 GENERIC 配置文件, 并给这个文件起一个容易辨认的名称,它就是您的内核名称。例如:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
通常,这个名称是大写的,如果您正维护着多台不同硬件的FreeBSD机器,以您机器的域名来命名是非常好的主意。我们把它命名为MYKERNEL就是这个原因。
提示: 将您的内核配置文件直接保存在 /usr/src 可能不是一个好主意。 如果您遇到问题, 删掉 /usr/src 并重新开始很可能是一个很好的选择。 一旦开始做这件事,您可能几秒钟之后才会意识到您同时会删除定制的内核配置文件。 另外, 也不要直接编辑 GENERIC, 因为下次您 更新代码 时它会被覆盖, 而您的修改也就随之丢失了。
您也可以考虑把内核配置文件放到别的地方, 然后再到 i386 目录中创建一个指向它的符号链接。
例如:
# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL
注意: 必须以 root 身份执行这些和接下来命令,否则就会得到 permission denied 的错误提示。
现在就可以用您喜欢的文本编辑器来编辑 MYKERNEL 了。如果您刚刚开始使用 FreeBSD, 唯一可用的编辑器很可能是 vi,它的使用比较复杂, 限于篇幅, 这里不予介绍, 您可以在 参考书目 一章中找到很多相关书籍。 不过, FreeBSD 也提供了一个更好用的编辑器, 它叫做 ee, 对于新手来说,这很可能是一个不错的选择。 您可以修改配置文件中的注释以反映您的配置, 或其他与 GENERIC 不同的地方。
如果您在SunOS™或者其他BSD系统下定制过内核,那这个文件中的绝大部分将对您非常熟悉。如果您使用的是诸如DOS这样的系统,那GENERIC配置文件看起来就非常困难, 所以在下面的 配置文件章节将慢慢地、仔细地进行介绍。
注意: 如果您和 FreeBSD project 进行了 代码同步, 则一定要在进行任何更新之前查看 /usr/src/UPDATING。这个文件中描述了更新过的代码中出现的重大问题或需要注意的地方。 /usr/src/UPDATING 总是和您的 FreeBSD 源代码对应,因此能够提供比手册更具时效性的新内容。
现在应该编译内核的源代码了。 一共有两种方法来完成这项工作,使用哪一种取决于您为什么要重新编译内核, 以及所运行的 FreeBSD 版本。
如果您只安装内核源代码,使用方法1。
如果您在没有升级源代码的情况下编译一个新内核(也许您只想为内核添加一个新的选项, 如IPFIREWALL),可以使用任何一种方法。
如果您打算把重新构建内核作为 make buildworld 过程的一部分来进行, 则应使用方法 2。
如果从上次成功地完成 buildworld-installworld 以来您还 没有 升级过代码 (也就是没有运行 CVSup、 CTM, 或使用 anoncvs), 则可以放心使用 config、 make depend、 make、 make install。
联编内核
进入 /usr/src 目录:
# cd /usr/src
编译内核:
# make buildkernel KERNCONF=MYKERNEL
安装新内核:
# make installkernel KERNCONF=MYKERNEL
注意: 使用这种方法联编内核时, 需要安装完整的 FreeBSD 源代码。
提示: 默认情况下, 在联编您所定制的内核时, 全部 内核模块也会同时参与构建。 如果您希望更快地升级内核,或者只希望联编您所需要的模块, 则应在联编之前编辑 /etc/make.conf:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
这个变量的内容是所希望构建的模块列表。 如果希望了解更多与构建内核有关的变量, 请参见 make.conf(5) 联机手册。
新内核将会被复制到 /boot/kernel 目录中成为 /boot/kernel/kernel 而旧的则被移到 /boot/kernel.old/kernel。 现在关闭系统, 然后用新的内核启动计算机。如果出现问题, 后面的一些 故障排除方法 将帮您摆脱困境。 如果您的内核 无法启动, 请参考那一节。
注意: 其他与启动过程相关的文件, 如 loader(8) 及其配置,则放在 /boot。 第三方或定制的模块也可以放在 /boot/kernel, 不过应该注意保持模块和内核的同步时很重要的,否则会导致不稳定和错误。
相关文章
- 然 Ubuntu 提供了优秀的图形化软件管理工具,我们绝大多数时间并不需要使用命令行来管理 Snap 软件包,但命令行拥有更强的功能和灵活性,学会如何使用可以帮你更好地掌控系2024-10-18
Flatpak和Snapcraft怎么选? Linux软件包管理系统优缺点对比
Linux 软件的打包和分发方式在过去几年中也取得了长足地进展,本文将探讨 Flatpak 和 Snapcraft 之间的关键差异,它们各自的优/缺点,以期望帮助用户找到更适合自己的一款2024-10-18linux服务器重启命令哪个好用? Linux服务器重启命令汇总
在 Linux 系统中,最严谨的重启命令是 shutdown -r now,该命令直接将系统重启,而不进行任何清理或准备工作,确保系统彻底重启,但也有很多其他命令,详细如下文介绍2024-10-17教你如何在Linux中使用apt命令? Linux APT命令实战教程
apt是一个软件包管理工具,apt命令相当强大,要是在Ubuntu和Debian系统中使用,可以用来对软件进行安装等操作,需要超级管理员(root)权限进行操作2024-09-29apt 和 apt-get有什么区别? Linux包管理解密
为什么 Debian 系 Linux 发行版同时拥有apt和apt-get这两个雷同的命令?他们之间有什么区别?详细请看下文介绍2024-09-29- Linux圈曝出严重远程代码执行RCE漏洞,已存在10多年,几乎影响所有GNU/Linux发行版,目前尚未有修复补丁,不过可以缓解,解决方案如下2024-09-27
- 在Linux系统中,分区管理是非常重要的一项工作,在使用Linux系统的过程中,有时候我们需要删除某个分区来释放存储空间或重新规划硬盘空间,那么,如何在Linux系统上删除分2024-09-14
深度操作系统deepin 25开发计划公布: 2025 年 01 月发布
deepin 25 计划发布时间为 2025 年01 月,此版本的主要目标是修复 deepin 23 中的遗留问题,提升系统稳定性2024-09-14- FDISK是一个用于硬盘分区的工具,特别是在较早的操作系统版本中,如Windows 98和早期的Linux系统中,FDISK是进行硬盘分区的主要工具,这里就为大家分享一下linux系统中使用2024-08-29
黑神话悟空怎么下载安装? 深度操作系统deepin23黑神话悟空安装教程
deepin23系统想要体验《黑神话:悟空》游戏,该怎么下载安装呢?下面我们就来看看详细的图文教程2024-08-22
最新评论