Slackware Kernel-Package Build
From PostgreSQL 中文维基, PostgreSQL 中文站, PostgreSQL 中国社区, PostgreSQL Chinese community
[编辑] 构建 Slackware 可用的 kernel package
在 slackware-source 我们可以拿到 kernel-huge-smp 和 kernel-modules-smp 这两个 SlackBuild 目录。我的方案就是 base 在这两个工具的基础上的。
[编辑] 官方这两个工具的不足
官方 kernel package 的流程:在 当前目录 和 /usr/src/linux-${VERSION} 这两个目录找 bzImage 及其相关文件,如果有的话,就以这个为基础做包。
官方 kernel modules package 的流程:把 /lib/modules/${VERSION} 目录下的 modules 都 copy 到包中。
这种方式至少有如下几点不足:
- 由于 laser 这种 patch 爱好者大量存在,因此,很容易出现 X 版本的源代码目录中,其实包含的是 Y 版本的 kernel 源代码的情况。看下面这个目录
luoyi@skyking:/usr/src/linux-2.6.19.2$ head -n 5 Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 20 EXTRAVERSION = .1 NAME = Homicidal Dwarf Hamster
很明显,这个目录最开始是 2.6.19.2 的源代码,后来由 laser 同学持续不断地 patch 到了 2.6.20.1,此时,官方打包方案对这种目录结构失效了。
- 很多时候我并不希望直接把 kernel modules 安装到系统中。而 kernel 的 Makefile 也提供了这个选项:
luoyi@skyking:/usr/src/linux-2.6.19.2$ make help |grep modules_install modules_install - Install all modules to INSTALL_MOD_PATH (default: /)
也就是说我们只需指定 INSTALL_MOD_PATH 就可以把 modules 安装到任意目录。
- 官方的工具限定死我们的 LOCALVERSION 只能是 smp,我想用自己的名字。例如 laser 的惯用命名法:
luoyi@skyking:/usr/src/linux-2.6.19.2$ grep 'hewp1' ./.config CONFIG_LOCALVERSION="-hewp1"
- 打包 kernel 的时候有一句 read junk,打包 modules 的时候有一句 sleep 5。这些都没用。
- 官方的脚本,会默认将 /boot 下面的 vmlinuz soft link 到包内的 kernel ,这也许并不是我们所需要的。
[编辑] 对官方工具的增强
我对这两个官方工具作了一些 patch 的工作,放到了 这里。简单修改 kerpkg.sh 就可以做出需要的 kernel package
luoyi@skyking:/export/m1/luoyi/src/lyk$ head -n 6 kerpkg.sh
#!/bin/sh
LOCALVER=hewp1
VERSION=2.6.20.1
KSRC=/usr/src/linux-2.6.19.2/
MODROOT=${KSRC}/vroot
这里的几个变量是需要按照实际需要修改的。使用的时候只需要:
luoyi@skyking:/export/m1/luoyi/src/lyk$ sudo kerpkg.sh .........省略大量输出 luoyi@skyking:/export/m1/luoyi/src/lyk$ ls *.tgz kernel-ly-hewp1-2.6.20.1_hewp1-i686-1.tgz kernel-modules-hewp1-2.6.20.1_hewp1-i686-1.tgz
同时,还保留了相应的 slack-desc,installpkg -menu 的时候可以看到如下画面:
kerpkg.sh 实际的工作流程是这样的:
- make modules_install 把 modules 安装到 $MODROOT
- 构建 kernel pakcage
- 构建 kernel modules package
