ubuntu-8.04:linux-restricted-modules & linux-ubuntu-modules




如何编译内核:

1. 安装Linux源代码
下载2.6.24-21-generic版本内核:
apt-get source linux-image-2.6.24-21-generic
下载当前使用版本内核:
apt-get source linux-image-$(uname -r)
注意,打过补丁后Linux的版本号需要手动更改,修改Makefile如下:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 24
#EXTRAVERSION = .3
EXTRAVERSION = -21-generic

2. 编译内核
a. 传统方法
make menuconfig
make bzImage
make modules
make install                  # 将bzImage拷贝至在/boo/ 目录下的vmlinuz,并创建符号链接
make modules_install    # 会在/lib/modules/下创建2.6.24-21-generic目录
sudo mkinitramfs -o initrd.img-2.6.24-21-generic 2.6.24-21-generic

b. 使用debian编译系统
CONCURRENCY_LEVEL=2 AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules binary-generic
具体介绍 ref:http://wiki.ubuntu.org.cn/index.php?title=UbuntuHelp:Kernel/Compile/zh&variant=zh-cn#Speeding_Up_The_Build


如何编译 linux-restricted-modules 和 linux-ubuntu-modules:

1. 安装如下deb包
fakeroot、build-essential、kernel-wedge、debhelper、dpkg-dev、po-debconf

2. 下载源码包
apt-get source linux-restricted-modules-common
apt-get source linux-ubuntu-modules-2.6.24-21-generic

3. 编译linux-restricted-modules-common
cd linux-restricted-modules-2.6.
修改 debian/rules 中的 abi_version=21、kernel_version=2.6.24
修改 debian/rules 中的 flavours := $(addprefix $(kernel_abi_version)-,generic)
修改 debian/d-i/kernel-versions.in,注释掉除了 generic 以外的其他行
debian/rules debian/control
fakeroot debian/rules binary
ref http://wiki.ubuntu.org.cn/index.php?title=UbuntuHelp:Kernel/Compile/zh&variant=zh-cn#Speeding_Up_The_Build

4. 编译linux-ubuntu-modules-2.6.24-21-generic
cd linux-ubuntu-modules-2.6.

fakeroot debian/rules binary-arch arch=i386 flavours="generic"    # debian/rules中有一个如何编译的example

5. 安装deb包
经过3,4两步编译,将在上一层目录../下生成一系列deb包
安装deb包
dpkg -i linux-restricted-modules-2.6.24-21-generic.deb
dpkg -i linux-ubuntu-modules-2.6.24-21-generic
.deb


----------
deb工具包 module-assistant:tool to make module package creation easier
其用法实例参见
https://help.ubuntu.com/community/BinaryDriverHowto/ATI?highlight=(linux-restricted-modules)#Instructions%20for%207.04%20(Feisty)
----------

如何动态生成内核驱动模块:

以如ATI显卡模块fglrx.ko为例

当 linux-restricted-modules-2.6.24-16-generic deb 包被安装后,在 /lib/linux-restricted-modules/2.6.24-16-generic/ 目录下会有一个 fglrx 文件夹,放置有生成 fglrx.ko 模块所需的 .o 文件

系统启动过程执行脚本 /etc/init.d/linux-restricted-modules-common
它会调用 /sbin/lrm-manager –quick

脚本 lrm-manager 读取配置文件 /etc/default/linux-restricted-modules-common
如果配置中没有禁用 fglrx 模块,则 lrm-manager 会根据 fglrx/ 目录下的
.o 文件,生成内核模块 fglrx.ko

因此如果根据ATI显卡驱动源码自己编译驱动模块,而不使用 linux-restricted-modules-2.6.24-16-generic deb包安装 fglrx 驱动,应该在该配置文件中禁用 fglrx

同样,/lib/linux-restricted-modules/2.6.24-16-generic/ 下的其他文件夹中的 .o 文件,用于动态生成对应 .ko 模块,如果不需要,则在配置文件中禁用








end