zoukankan      html  css  js  c++  java
  • linux内核编译步骤

     linux内核编译步骤     
    对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在
    我归纳了一下,写出这一篇还算比较详细的步骤,希望能对各位新手有一些
    帮助。
    1、  准备工作
    (1)       整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。
    (2)       建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。
    (3)       A:下载并解压linux内核,建议从http://www.kernel.org/pub/linux/kernel/ 下载内核,因为安装系统时所安装的源代码默认情况下支持很多设备,这样给内核裁减增加了难度。以下假设你已经下载了内核的为linux-x-y-z.tar.gz。一般都将linux内核源代码放在/usr/src下,这里仍然遵守这个习惯,如果你的这个路径下已经存在这个版本的内核,建议将已有的改个名称。

                   B:如果内核已经安装(/usr/src/目录有linux子目录),跳过如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号), 比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核

    2、清除从前编译内核时残留的.o 文件和不必要的关联 
    cd /usr/src/linux
    make mrproper
        确保源代码目录下没有不正确的.o文件和文件依赖关系,执行该命令后,内核选项会回到默认的状态下。如果你是下载的内核源码,而且是第一次编译,就没有必要执行这一步操作

    3、配置内核,修改相关参数,请参考其他资料
    在图形界面下,make xconfig;字符界面下,make menuconfig
    在内核配置菜单中正确设置个内核选项,保存退出

    4、正确设置关联文件
    make dep
        根据上一步所选择的选项,建立文件的依赖关系。
    5、make clean
    清理一些不必要的文件,如果你在上次编译的基础上,删去了一些选项,建议你执行这一步操作,否则,就没有必要了。

    6、编译内核
    对于大内核(比如需要SCSI支持),make bzImage
    对于小内核,make zImage

    7、编译模块
    make modules
    编译可加载模块(即内核选项中选择为M的选项),编译时间跟M选项的数量有关。

    8、安装模块
    make modules_install
       即将编译好的modules拷贝到/lib/modules下,这就是为什么在“准备工作”的第三步提醒你备份的原因了。

    9、使用新内核
    方法一:
    (1)更换内核:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map
                     B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz
    (2)然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    linear
    default=linux-new    ### 告诉lilo缺省使用新内核启动linux ###
    append="mem=256M"

    image=/boot/vmlinuz-2.2.14-5.0
            label=linux
            read-only
            root=/dev/hda5

    image=/boot/bzImage(zImage)
            label=linux-new
            read-only
            root=/dev/hda5

    保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。

    保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效
    方法二:使用GRUB(修改grub.conf文件)
    (1)更换内核:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map
                     B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz
    (2)修改引导管理程序Grub,/etc/grub.conf
    内容如下:
    #boot =/dev/had
    default =0
    timeout =10
    splashimage =(hd0, 0)/grub/splash.xpm.gz
    title Red Hat Linux(2.4.20-8)
       root(hd0, 0)
       kernel /vmlinuz -2.4.20-8  ro root =LABEL =/
       initrd /initrd-2.4.20-8.img
    方法三:修改启动配置文件
    现在大多数使用的都是grub启动,需要修改/boot/grub/grub.conf,添加相应的启动信息,添加内容的最简单格式如下:
    title 显示在启动菜单上的名称
    root 根文件系统挂载分区
    kernel 压缩过的内核文件名
    initrd 根文件系统文件名
                  如:
                  title My new kernel
                  root (hd0,2)
                  kernel /boot/vmlinuz-x.y.z
                  initrd /boot/initrd-x.y.z.img
    10、重新生成ram磁盘
    如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过
    如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,
    使用mkinitrd initrd-内核版本号 内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
    mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
    之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
    initrd=/boot/initrd-2.2.14-5.0

    ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件

    11、重新启动,OK!

    ===============================================================================

    http://www.51cto.com/art/200707/52008.htm

    本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。

    个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686.

    ◆第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。

    如过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。如果该目录为空的话,则需要自己手动下载源代码。下载代码的方法和链接很多,也可以在CU上通过http://download.chinaunix.net/search/?key=&q=kernel&frmid=53去下载。不过,下载的内核版本最好和所运行的Linux系统的内核版本一致。当然,也可以比Linux系统内核的版本低,但高的话应该不行(个人尚未实践)。

    Debian下可以很方便的通过Debian源下载:

    首先查找一下可下载的内核源代码:

    # apt-cache search linux-source

    其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以了:

    # apt-get install linux-source-2.6.20

    下载完成后,安装在/usr/src下,文件名为:linux-source-2.6.20.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码:

    # tar jxvf linux-source-2.6.20.tar.bz2

    解压后生成一个新的目录/usr/src/linux——source-2.6.20,所有的源代码都在该目录下。

    注:该目录会因内核版本的不同而不同,各位动手实践的朋友只需知道自己的源代码所在的具体位置即可。

    ◆第二步:配置及编译内核。

    进入/usr/src/linux——source-2.6.20目录下,可以看到Makefile文件,它包含了整个内核树编译信息。该文件最上面四行是关于内核版本的信息。对于整个Makefile可以不用做修改,采用默认的就可以了。

    一般情况下,需要先用命令诸如"make menuconfig", "make xconfig"或者"make oldcofig"对内核进行配置,这几个都是对内核进行配置的命令,只是它们运行的环境不一样,执行一下这几个命令中的任何一个即可对内核进行配置:

    make menuconfig是基于界面的内核配置方法,make xconfig应该是基于QT库的,还有make gcofig也是基于图形的配置方法,应该是需要GTK的环境,make oldcofig就是对内核树原有的.config文件进行配置一下即可。

    其实内核的配置部分,主要是保证内核启动模块可动态加载的配置,默认配置里面应该已经包含了这样的内容,因此,我用的是make oldconfig.

    在内核源码的目录下执行:

    # make

    # make bzImage

    其中,第一个make也可以不执行,直接make bzImage。这个过程可能要持续一个小时左右,因此是对整个内核重新编译了。执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。

    然后执行:

    # make modules

    # make modules_install

    对内核的所有模块进行编译和安装。

    执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.20/。 在随后的编译模块文件时,要用到这个路径下的build目录。至此,内核编译完成。可以重启一下系统。

  • 相关阅读:
    jquery 序列化form表单
    nginx for windows 安装
    nodejs idea 创建项目 (一)
    spring 配置 shiro rememberMe
    idea 2018 解决 双击shift 弹出 search everywhere 搜索框的方法
    redis 在windows 集群
    spring IOC控制反转和DI依赖注入
    redis 的安装
    shiro 通过jdbc连接数据库
    handlebars的用法
  • 原文地址:https://www.cnblogs.com/dkblog/p/2092428.html
Copyright © 2011-2022 走看看