LinuxKernelImage生成过程.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LinuxKernelImage生成过程

我详细解析了bootsect.s,同时阅读了setup.s。其中bootsect.s存放于 磁盘的主引导扇区,bios-startup程序加载该程序(bootsect.s)到内存 0x700 处,并由此执行bootsect.s来引导Linux kernel。在bootsect.s中加载setup.s 至内存中,并在执行完它自身后,jump跳至刚刚已读入的setup部份,继续执 行。 Linux Kernel Image 生成过程: 一. 引导扇区汇编代码bootsect.s被预处理成bbootsect.s或bootsect.s (无论有无D_BIG_KERNEL),当然这取决于编译目标是bzImage还是bImage。 bbootsect.s被汇编,然后被转化成合法的二进制文件,通过调用bbootsect.s。 (或者是bootsect.s被汇编,然后被转化成合法的二进制文件,通过调用 bootsect.s。) 二. 启动代码setup.s(include video.s)被预处理成bsetup.s(就bzImage 而言),或者是setup.s(就zImage而言)。和bootsect.s一样,不同的是bzImage 使用-D_BIG_KERNEL来标志。结果同样也将被转化成合法的二进制文件,通过调 用bsetup.s或setup.s。 三. 进入子目录 arch/i386/boot/compressed 把/usr/src/linux/vmlinux 转变成$tmppiggy.gz(临时文件名,合法的二进制格式)。删除.note 和.comment 文件,在这个目录arch/ARM/boot/ compressed下的Makefile文件中TEXTADDR (0xC0008000)表示内核起始运行的地址,在这个arch/ARM/boot/目录下 arch/i386/boot/下的Makefile中ZRELADDR(0是将内核解压到目 标板上的地址, 四. gzip -9 $tmppiggy $tmppiggy.gz。(gunzip()在main.c中被实现。 用于解压缩部份Linux内核,负责解压缩Linux内核的函数还有 decompressed()) 五. 联接(Link)$temppiggy.gz ,使其成为 ELF relocate(ld -r)文件 piggy.0。 六. 编译压缩程序 head.s 和 misc.c(仍然存在于子目录 arch/i386/boot/compressed中。)成ELF的目标文件head.o和misc.o。 七. 联接 (Link)所有的目标文件head.o、misc.o、piggy.o成bvmlinux(或 者vmlinux,就zImage而言,注意:不要错误地把它认为是 /usr/src/linux/vmlinux !)。一定要注意到这两者之间的不同:-Ttext 0x1000(调用的是经过压缩的内核镜像vmlinux),-Ttext 0x100000(调用的是未 经过压缩的大内核镜像bvmlinux,还有bzImage compression loader 将被 high-loaded,调到内存高地址处)。 八.最后返回 arch/i386/boot 子目录,bvmlinux转化成合法的二进制文 件 bvmlinux.out ,删除 .note 和.comment部份。 九. 最后返回 arch/i386/boot 子目录,使用编程工具把 bbootsect+bsetup+compressed/bvmlinux.out 编译成bzImage。(也可以使编 译成zImage)。 总结: 1.在/usr/src/linux/这个目录的Makefile文件中先把 『include arch/$(ARCH)/Makefile vmlinux: include/linux/version.h init/main.o init/version.o kernel drivers mm fs net ipc lib $(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o \ --start-group \

文档评论(0)

wnqwwy20 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档