免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1472 | 回复: 0
打印 上一主题 下一主题

linux内核编译流程-基于debian的2.6.26内核 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-01 19:15 |只看该作者 |倒序浏览

                1下载最新的内核代码
在[color="#0000ff"]www.kernel.org或者到ftp上的kernel.org下载了最新的主线内核代码linux-2.6.26.tar.gz到文件夹/usr/src/kernel(当然也可以是其他的文件夹.)
2准备工作
先进入/usr/src/kernel
可以看到现在的内核的源代码.把下载的压缩包解压.
[color="#ffffff"]tar -zxvf  linux-2.6.26.tar.gz
tar的第三个参数是要解压的文件的路径名,可以是相对路径名,也可以是绝对路径名,默认的情况下,tar会将解压后的文件放在当前文件夹,我们可以通过-C(大写C)选项来更改,比如tar -zxvf linux-2.6.26.tar.gz -C /usr/src/kernel,会得到和上面相同的结果。
3.配置
这一步是真正最最重要的一步,希望自己运行的内核里面有什么,支持什么,还有管理很多资源的算法,都是由在这一步里面的选择决定的。要想看懂里面的每一个选项,大概还得需要对于操作系统原理的一定的理解才行。不过,大多数选项采用默认的就较好。可以对自己熟悉的选项根据需要进行定制。很多kernel提供多种配置方式,一般推荐的是菜单配置方式,需要有ncurses库(也就是用来写vi的那个库)的支持,否则执行的时候报错,即
[color="#ffffff"]make menuconfig
也提供多种GUI界面:
对于kde环境有
[color="#ffffff"]make  xconfig
对于gnome环境有 [color="#ffffff"]make  gconfig
4.编译与安装
这是最最无聊的一部分.需要等待很长时间,有点耐心吧.如果开发套件安装的比较完整的话,其实就只需要一个很简单的命令
[color="#ffffff"]make
他就会根据早写好的makefile以及前一步生成的配置文件编译成.o目标文件再链接,之后如果有在配置时有以模块形式存在要加下两步(一般都是必须的)
[color="#ffffff"]make modules  
现在是安装,首先安装的是模块
make modules_install
这样会自动在/lib/modules下产生文件夹2.6.26,里面即是模块相关的文件。
之后,安装grub或lilo启动条目,以及启动时相关文件,也可自己手动配置
[color="#ffffff"]make        install
[color="#339966"]以下的步骤是可选的,一般是开发者才需要:
之后,可以安装内核头文件
[color="#ffffff"]make        headers_install
将安装配置的内核头文件到/usr/include
最后,清除编译中间文件
[color="#ffffff"]make        clean
再把内核代码安放到/usr/src/kernel/2.6.26下
手动配置启动文件
现在我们的焦点转移到/boot文件夹。
先了解我们需要动到的文件
1.vmlinuz-X.X.X
vmlinuz是可引导的、压缩的内核,."vm"代            表"VirtualMemory"。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制,Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”,它一般是一个软链接.
2.initrd-X.X.X
这是bootloaderinitializedRAMdisk的简称.initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。initrd实现加载一些模块和安装文件系统等功能,主要是用于加载ext3等文件系统及scsi设备的驱动.要创建initrd文件。要用到
mkinitrd,在Debian下这个工具在一个名为initrd-tools的包里(也不知道这个包到底在哪张盘里,但是Debian官网上给的源里有这个包).
3.System.map-X.X.X
System.map是一个特定内核的内核符号表.
我们打开看看
00000400 A __kernel_vsyscall
00000410 A SYSENTER_RETURN
00000420 A __kernel_sigreturn
00000440 A __kernel_rt_sigreturn
00400000 A phys_startup_32
c0400000 T _text
c0400000 T startup_32
.
.
.
.
.
.
左边是地址,右边就是变量名.往内核中条件模块的时候需要用到它来定位各种各样的调用。
可见以上三部分是启动是重要的内核文件,于是我现在就要更新它们
源文件存在于我们解压好的文件中,复制过去就行了.(一般情况下,在执行命令make install的时候,这两个文件是已经复制过去了的。)
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.26
cp System.map /boot/System.map-2.6.26
initrd 还要自己作
cd /boot
mkinitrd -o initrd-2.6.26 2.6.26
后面的2.6.24,也就是版本号,要和/lib/modules里的一样.运行命令后我看到
31457 blocks
最后是修改menu.list
menu.list在/boot/grub里打开
加入下面四行
title Linux (2.6.26)
          root (hd0,2)
          kernel /boot/vmlinuz-2.6.26 ro root=LABEL=/ vga=788 splash=silent
          initrd /boot/initrd-2.6.26.im
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87729/showart_2063367.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP