zoukankan      html  css  js  c++  java
  • Debian编译内核教程

    个人拼凑

    基本方法

    先是获取内核源码
    方法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 + 新内核

    ps:打补丁

    我们打补丁一般的目的是为了稳定或者加一些其他功能,比如打上 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就行

  • 相关阅读:
    C# listView载入图片以大图标方式显示
    判断序列是否对称
    非走不可的弯路
    张国荣的《我》
    函数:找出一句话中的第二个单词
    压缩与解压缩示例:游标编码(runlength encoding)
    前行
    书单
    一个数组中的元素头尾两端依次对调
    第一遍读书笔记
  • 原文地址:https://www.cnblogs.com/timeship/p/2937714.html
Copyright © 2011-2022 走看看