Linux内核的编译

浅浅的花香味﹌ 2022-04-05 07:38 374阅读 0赞

Linux内核的编译

www.jz123.cn 2010-10-03 来源: 中国建站 责任编辑(袁袁) 我要投递新闻

  作为一名Linux系统工程师怎么可以不会编译Linux内核呢,就像当兵不会打仗。男人不会保护自己心爱的人一样,太丢人了..

  Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。

  客套的话,空洞的话咱都不说了,说了也没费劲,你还不一定看。下面以Linux 2.6.15.5内核源代码为例:

  第一步:下载Linux 2.6.15.5内核源代码linux-2.6.15.5.tar.bz,放入/usr/src 目录。

  第二步:一般情况下要用下面命令来配置内核,可以使用下面命令的任意一个,看自己喜欢了:

  #make config(基于文本的最为传统的配置界面,不推荐使用)

  #make menuconfig(基于文本菜单的配置选项)

  #make xconfig(要求QT被安装)

  #make gconfig(要求GTK安装) 其中最值得推荐的当然是menuconfig选项,不需要额外的库,还直观形象

  

内核配置

  选择了自己要用的选项后保存退出。我这里为了以后能将自己写的内核驱动模块加入内核,选择了”Enable loadable module support”,嵌入式产品一般不需

  要动态卸载模块,所以”可以卸载模块”不用选,当然你说哥非要选,就是要跟你做对,你能把我咋滴。说真的,我还真不能把你咋滴..

  第三步:#cd ****进入内核源码目录,,编译内核,并将映像复制到相应的目录:

  #make bzImage (生成使用giz压缩的内核,生成的文件位于/usr/src/linux/arch/i386/boot 目录)

  #make modules modules_install (编译内核模块并安装到/lib/modules/2.6.15.5 目录)

  #cd /usr/src/linux

  #mv arch/i386/boot/bzImage /boot/bzImage2.6.15.5

  #mv System.map /boot/System.map-2.6.15.5 (System.map-2.6.15.5是编译生成的Linux 2.6.15.5内核的符号表)

  #cd /boot

  #mv System.map oldSystem.map

  #ln –s System.map-2.6.15.5 System.map(创建相应的System.map符号链接)

  第四步:修改启动选项。以支持从Linux 2.6.15.5启动选择菜单

  修改/boot/grub/grub.conf文件,进行如下配置:

  title Red Hat Linux (2.6.15.5)

  root (hd0,0)

  kernel /boot/vmlinuz ro root=/dev/hda2 hdc=ide-scsi //—-你的linux所在的分区

  进过此配置后,Linux启动时就会出现选择菜单。

  说明:最后在上面的Linux 2.6.15.5启动中,没有设置initrd,这是因为我们直接把SCSI,EXT3等编译进了内核。如果将他们编译成模块,initrd则是必须的,否则

  启动会提示”VFS:unable to mounting root fs”.为使用initrd,则需要下载较新的mkinitrd并安装,由于程序包mkinitrd依赖程序包device-mapper,而程序包

  device-mapper又依赖于lvm2,因此还要同时下载程序包device-mapper和程序包lvm2。安装完毕后#mkinitrd /boot/initrd_2.6.15.5.img 2.6.15.5就可以

  了,如果执行mkinitrd命令时,提示“No module dm-mem-cache found for kernel 2.6.29.4, aborting.”时,表明该版本的mkinitrd有bug。升级mkinitrd或

  参考这篇文章解决这个问题。解决方法:

  1是当使用mkinitrd时,使用”–without-dmraid”这个参数。

  2是在使用mkinitrd之前,先创建一个noraid文件。创建方法如下:

  # echo “DMRAID=no” > /etc/sysconfig/mkinitrd/noraid

  # chmod 755 /etc/sysconfig/mkinitrd/noraid

  然后再运行mkinitrd命令。

  initrd(Bootloader initialized RAM disk)是指由Bootloader初始化的内存盘。在linux内核启动前,Bootloader会将存储介质中的initrd文件加载到内存,内核

  启动时会在访问真正的根文件系统前先访问该内存的initrd文件系统。

  为了启动时加载initrd,只需修改grub.conf引导配置文件,在最后添加”initrd /boot/initrd-2.6.15.5.img “这样就没问题了。

发表评论

表情:
评论列表 (有 0 条评论,374人围观)

还没有评论,来说两句吧...

相关阅读

    相关 linux内核编译

    如何编译内核 如果你不想改变内核的版本,直接到第四步。 第一步:在任何一个子目录下(但通常是在/usr/src/下)untar 解开新的内核源程序: tar xvfz

    相关 Linux内核编译

    学习Linux内核开发必须掌握的知识之一 配置Linux内核选项 几种方式 1。图形化界面(推荐) 使用命令make menuconfig 如果中间报错,安装一些库就

    相关 Linux内核编译

    前言 我第一次接触Linux,还是几年前学怎么是去破解别人家的wifi然后做ARP欺骗的那会,用的是Kali Linux。后来没怎么继续钻研也就忘得差不多了。本学期所修的

    相关 Linux内核编译

    下面简单介绍一下Linux内核编译过程。(附注:本博客所讲的内容是在Ubuntu上进行操作的,Cent OS并未验证) 1、下载内核源码,可以到[kernel.org][]上

    相关 (一)编译Linux内核

    获取内核源码和源码的解压缩                 从www.kernel.org中下载现在最新的linux kernel, 我下载下来的压缩包为: linux-3.