社区导航

 

搜索
查看: 2757|回复: 4

读Kernel感悟-Linux内核启动-内核的生成

[复制链接]

98

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-4-30 13:58 | 显示全部楼层 |阅读模式
    这段时间在看《Linux内核源代码情景分析》,顺便写了一些感悟。读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言,数据结构与算法,计算机体系结构等等计算机的基础课程串起来。
   我看内核源代码是用lxr+glimpse(不一定要自己架,可以直接访问校内外的lxr网站)的。如果在windows下也可以用source insight。以下的当前路径为内核源代码路径,通常为/usr/src/linux。内核版本为2.6.13,平台为x86好,让我们开始Linux内核之旅。
    我们的出发点是在CPU加电的一刹那,系统处于16位实地址模式下,终点是内核开始运行start_kernel(),系统处于32位页式寻址的保护模式下。那时内核映象bzImage已经解压完毕,运行于内核态。系统中已经有了一个叫swapper的0号进程,有自己的内核堆栈,情况就相对好理解得多。(尽管与用户态程序相比,还要多操心不少事,包括对硬件的直接操作,内核态各种数据结构的初始化,对页表的操作等等)。不过,不妨先做些准备动作。
    首先,什么是内核?目前,只知道编译内核后,产生一个叫bzImage的压缩内核映象。它不同于任何普通的可执行程序。我们甚至不知道它从哪里开始执行。只知道把它往/boot/下一放,往boot loader的配置文件(例如grub的menu.lst)中写上相关信息,机子就顺利启动了。因此,我对它的生成过程产生了浓厚兴趣。于是,我查看了相关资料,最直接的资料来自于arch/i386/boot/下的Makefile。从Makefile中可以知道。bzImage的产生过程是这样的:不过我不满足于此。于是,我想到了去看arch/i386/boot/下的Makefile。从arch/i386/boot/Makefile和arch/i386/boot/compressed/Makefile中可以看出(具体过程省略,)

1.先生成vmlinux.这是一个elf可执行文件

2.然后objcopy成arch/i386/boot/compressed/vmlinux.bin,去掉了原elf文件中的一些无用的section等信息。

3.gzip后压缩为arch/i386/boot/compressed/vmlinux.bin.gz

4.把压缩文件作为数据段链接成arch/i386/boot/compressed/piggy.o

5.链接:arch/i386/boot/compressed/vmlinux = head.o+misc.o+piggy.o

其中head.o和misc.o是用来解压缩的。

6.objcopy成arch/i386/boot/vmlinux.bin,去掉了原elf文件中的一些无用的section等信息。

7.用arch/i386/boot/tools/build.c工具拼接bzImage = bootsect+setup+vmlinux.bin

过程好复杂。
   这里要介绍一下objcopy命令,它的作用是把一个object文件转化为另一种格式的文件。在这里,objcopy的作用就是去掉原来elf文件中的elf header和一些无用的section信息。为什么要这么做呢?因为elf文件中的elf header和一些section的作用是告诉elf loader如何载入elf可执行文件。但是,linux内核作为一种特殊的elf文件,需要特殊折辅助程序去装载它。往往它的装载地址是固定的。这时,为了保证通用性而存在的elf header和一些section对内核的装载就没有意义了。加上为了使内核尽可能小,所以干脆把这些信息去掉。
   我们可以看一下vmlinux和arch/i386/boot/compressed/vmlinux。用file命令查看,它们也是elf可执行文件。只是没有main函数而已




114

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-4-30 14:13 | 显示全部楼层
拜读兼接分...

回复

使用道具 举报

119

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-4-30 14:22 | 显示全部楼层
uping

回复

使用道具 举报

95

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-5-2 14:55 | 显示全部楼层
手上有书,还没来得及看呢。。。

回复

使用道具 举报

108

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-5-2 22:51 | 显示全部楼层
mark 接分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-1-29 04:03 , Processed in 0.176867 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表