ucore-project3: loadkernel

昨天开始project3,本project是真正做一个有驱动、提供printf、strlen等功能的、可简单初始化的elf内核,然后通过MBR中的简单bootloader解析elf文件头,将elf内核以program header table中指定的位置载入内存。

 

今天完成文件的载入,在载入过程中,bootloader因为解析elf文件头,并完成elf内核的加载,导致虽然使用了gcc的文件大小优化(-Os),bootloader大小仍超过512字节(524字节),无法装载到MBR。看ucore完成相同功能的bootloader,才376字节,对比了一下两者的objdump反编译代码,发现我的inline函数没有起作用,我的函数头是这么写的:

inline unsigned short inb(unsigned short port)
{
....
}

 

而ucore的定义如下:

static uint8_t inb(uint16_t port) __attribute__ ((always_inline));
static uint8_t inb(uint16_t port)
{
....
}

 通过__attribute__,并且定义为static,则永远都是inline。

 

注意,使用__attribute__((always_inline))时,不能同时定义函数体。

 

这样修改后,代码大小由524字节变为484字节,仍然比ucore的代码多,不过可用了,不试验了,后续再优化。

 

 (23::37)刚改了一处冗余代码,现在是408字节了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值