免费注册 查看新帖 |

Chinaunix

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

看linux kernel 0.11内核代码遇到的问题,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-20 21:32 |只看该作者 |倒序浏览
首先看源代码:
startup_32:

  movl $0x10,%eax  # 0x10是GDT中数据段选择符。
  mov %ax,%ds
  lss init_stack,%esp
  call setup_idt  # 设置IDT。先把256个中断门都填默认处理过程的描述符。
  call setup_gdt



这汇编段代码在head.s中,左边部分是编译出的.o二进制代码,如下:

   0:        b8 10 00 00 00                  mov    $0x10,%eax
   5:        8e d8                                 mov    %eax,%ds
   7:        0f b2 25 b0 0a 00 00         lss    0xab0,%esp
   e:        e8 0f 00 00 00                   call   22 <setup_idt>
  13:       e8 02 00 00 00                   call   1a <setup_gdt>

ld 链接之后,去掉头部88字节(为什么不是84字节?)之后,查看相应的 lss    0xab0,%esp二进制代码为如下蓝色部分,

0000050    1000    0000    0000    0000    10b8    0000    8e00    0fd8
0000060    25b2    8b08    0804    0fe8    0000    e800    0002    0000
0000070    feeb    010f    c215    0480    c308    158d    80aa    0804

问题是 : ld对head.o 代码做了什么工作

注: 以上是学习kernel 0.11的结果,Makefile 大致如下:

AS86    =as86 -0 -a
LD86    =ld86

AS    =as
LD    =ld
LDFLAGS    =-s -x -M
CC    =gcc
CFLAGS    =-Wall -O -g -fstrength-reduce -fomit-frame-pointer
CPP    =cpp -nostdinc -Iinclude

...
boot/head.o: boot/head.s

boot/head:boot/head.o
    $(LD) $(LDFLAGS) boot/head.o -o boot/head
...


非常感谢大家的回答!

[ 本帖最后由 tonutu 于 2008-11-20 21:33 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP