昨天开始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字节了
分享到:
相关推荐
Version : 5.7 Vendor : Fedora Project Release : 2.20090207.fc11 Date : 2009-02-26 09:37:30 Group : Development/Libraries Source RPM : ncurses-5.7-2.20090207.fc11.src.rpm Size : 1.71 MB Packager :...
Root project 'Almost-Famous' +--- Project ':famous-cloud' +--- Project ':famous-config' \--- Project ':famous-unique' +--- Project ':famous-common' +--- Project ':famous-login' +--- Project ':famous-...
Java-EE-Project1:Java EE
Daniels-Project:https://khadijaserag.github.ioDaniels-Project
hive 开发UDF 使用maven工程 引发jar包缺失 hive 开发UDF 使用maven工程 引发jar包缺失
MEng-Y3-Group-Project-:医学教育的人眼3D动力学模型
2006-03-11 15:26 122,880 关键路径分析.mpp 2005-10-06 00:21 339,456 固定资产信息系统项目.mpp 2005-11-17 16:56 622,592 固定资产信息系统项目.多比较基准.mpp 2005-11-17 16:56 637,440 固定资产信息系统项目....
ncpi-project-forge::light_bulb::notebook:Project Forge的材料和计划
TodoList-Project-:PHP-OPP-Todolist项目
iat339-project2:iat339-project2-蔡妍公园和王Ceyao团队
HTML-CSS-Project1:HTML&CCS firt项目
JAVA-Project2:JAVA项目
CS-347-Project1:CS 347 Web开发项目1
431-Project1:RIT CSCI 431
cs32-project4:代码编辑器
td-project2:技术学位项目2
webpro-project2:Web编程项目2
Caleb-Project1:最好的商店应用
joshford-project0:Joshua Ford的Project 0存储库
new-file-of-msc-it-final-project-:C ++源代码(仅一个类)