个人拼凑
先是获取内核源码
方法1、内核官网下载内核
官网: 在 kernel 的官网上有三种版本,mainline,stable,longterm
mainline 是主线版本,最新的,像 linux-3.7 或是 3.8-rc1 stable 是稳定版,像 linux-3.7.1
longterm 是长期支持版,目前官网上是 2 个,3.0,3.4,再加一个后娘养的 3.2
还有一个是 eol,当然就是不再支持了,3.5.3.6 就是 eol 了 选那个随便 建议稳定版
方法2、是用git ,git 的优点是取出很快,不用打补丁,缺点是第一次比较慢
稳定版 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
老大版 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
先装上 git-core 这个软件包 一般默认是 master 这个分支,当然大家可以查看远程分支
git branch -r 取出的话,可以看根据上面的版本 然后 git checkout 你要的版本
下次更新 直接 git pull,包下载,包整合,如果是整合失败再手工整合,几率比较小
首先获取一下root权限
sudo -s -H
安装必要的工具
make gcc gdb bison m4 autoconf automake libtool dpkg-dev libncurses5-dev build-essential kernel-package fakeroot
可选安装:
sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt
这一步安装qt库 实现图型配置 不是必须个人没使用
找到你内核下载的目录 把源码复制到any directory you like然后tar -jxvf +内核文件名
然后进到解压目录 ls一下看下几个目录找到跟你下载的内核文件名一样的文件夹
进到目录 然后配置内核参数
cp /boot/config-`uname -r` ./.config
这是用现在的内核配置新内核
内核配置 make nconfig 自定义配置 nconfig 是在 2.6.35 之后推荐用的,也建议不要再用回以前的menuconfig
恩 内核编译重要的就是内核配置 这块需要单独拿出来讲 先放一边 如果嫌这样配置麻烦的话可以从最小化配置,make defconfig,再make nconfig或者用make localmodconfig自动精简内核
接下来就是编译了
make-kpkg clean (sudo)fakeroot make-kpkg --initrd --append-to-version= -内核名字 kernel_image kernel-headers -jn
n根据gentoo的手册上推荐是线程数+1 这个可以自己根据情况来
然后等一会就可以了 编译好的内核在上一层目录。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb两个文件,image那个是内核
切换到上一层目录然后
(sudo)dpkg -i + 新内核
我们打补丁一般的目的是为了稳定或者加一些其他功能,比如打上 3.7.1 的补丁 或者加入 realtime 的补丁,打补丁是在主线版本之上的,像 3.7.1 是在 3.7 上面 patch
可能过几天又出来 3.7.2,也是在 3.7 上的,这时你如果是 3.7.1,要先删除掉 3.7.1 如果是 3.8-rc1,也是在 3.7.0 上面打的,而不是 3.7.1
打补丁实例,假设以我们下载的是 patch-3.7.1.xz,
先切换到你的源码目录,接着 xzcat 补丁包的位置/patch-3.7.1.xz | patch -p1
删除:xzcat 补丁包的位置/patch-3.7.1.xz | patch -p1 -R
建议下载一个相近的主线版本,然后用补丁包构造出你想要的版本,这样不用一直下载 整包,建议大家用 xz 的压缩包 打补丁这项工作一般是下载完源码后就要做的
kernel官方的方法,deb-pkg,这个是在上层目录中生成image,header,libc-dev或者也包括 firmware,这个也是生成deb包的,安装就是dpkg -i xx,推荐用这种方法
命令:make deb-pkg
现在cpu都是多核的,要快点是这样
make -j2 deb-ppkg
j2就很快了,4核的话也可以j4
如果想知道用多少时间,是这样
time make -j2 deb-pkg
通用编译方法
所谓通用,就是你编好后,也可以放在其他系统,比如gentoo
make 然后 make modules_install && make install
但这是以前的方法,现在就算要这样,上面的方法显得太暴力了,现在推荐的是这样:
make -j2 tar-pkg/make -j2 targz-pkg/make -j2 tarbz2-pkg/make -j2 tarxz-pkg
这样编译出来是一个tar包/tar再压缩的包,
安装的时候只要这样 切换到root,然后
tar xvf 你的包名 -C /
意思就是把你的包解压到/根目录,这样在/boot下就是你装的文件,还有/lib/modules/下
最后你要做的是更新下grub,debian更是简单,update-grub
如果要删除,也很简单
rm /boot/下面的systemxx vmlinzxx configxx
还有与之相对应的一些模块
rm /lib/modules/你要删除版本的文件夹
然后update-grub
前提,如果你只是这样编译出来,只有vmlinuz,如果有需要initramfs,还要手动构建initramfs
如果用deb-pkg包安装,这个是自动构建的 如果你不想要initramfs,看下面
initramfs
debian虽然名叫initrd,但是用的是initramfs
简单一点,就是启动时先构建一个小环境,然后再挂载/这个文件系统
但是这样一来启动时间会慢些,因为要等~~~比如ext4,ahci编译成模块的时候
如果不要这样,我们直接从内核启动,那首要条件是下列的一定要编译到内核里
而不是做为模块,不然内核会恐慌~~~
Serial ATA and Parallel ATA drivers一定要为内核,在子菜单里你的磁盘控制器驱动也要Y
SCSI device support里的SCSI device support&&SCSI disk support
Generic Driver Options->
Maintain a devtmpfs filesystem to mount at /dev
Automount devtmpfs at /dev, after the kernel mounted the rootfs
还有文件系统比如ext4,一定要到内核
总结
make deb-pkg和make tar-pkg的优缺点
deb-pkg的优点:
安装完后可以用apt来删除,更和谐
deb-pkg的缺点:
只能在debian用,而且你安装时自动构建initramfs
make tar-pkg优点:
通用,你可以应用在其他的系统,比如arch/gentoo
不会自动创建initramfs(这个算优点吧,因为没强加给你)
缺点:
得手工删除,但其实也不算缺点,就是有点不和谐
其实就是删除一个文件夹和几个文件
内核相关文件只在三个地方
/boot下面是内核的本体,二进制文件,一般都会自带版本号
/usr/src下面是内核的源代码文件,不是跟驱动有关的模块等都是根据/usr/src/linux/的软链接来·判断内核的版本的,同时除了linux文件夹外,其他的源代码文件夹一样带版本号
/lib/modules 内核模块,也是编译好的,也带了版本号。其余的基本就没了
不工作的内核除了占空间没什么用途,有一个可启动的内核就行了 把没用的删了更新一下grub.cfg就行