昨天开始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字节了
分享到:
相关推荐
hive 开发UDF 使用maven工程 引发jar包缺失 hive 开发UDF 使用maven工程 引发jar包缺失
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-...
- 在Keil MDK的Project Manager中选择添加RT-Thread的相关组件,如内核、库函数、中间件等。 4. **配置与编译** - 使用RT-Thread Studio或Keil MDK内置的配置工具,对RT-Thread进行参数设置,如内存管理、任务...
Udacity-前端网页开发纳米学位-项目3-经典街机游戏克隆-欢迎来到游戏:《蛙人》 -直播版本链接: ://tulysg.github.io/Front-End-NanoDegree-Project3/ -支持课程:Object Oriented JavaScript, ...
gEDA homepage: http://www.geda-project.org -----gschem.exe 1.9.2 (g9e1f72c) -----pcb.exe Compile Time Options ----- GUI: gtk : Gtk - The Gimp Toolkit Exporters: bom : Exports a Bill of Materials ...
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 固定资产信息系统项目....
本文使用intellij idea搭建Maven3多模块项目,并进行配置相关配置,以实现项目的构建打包。项目结构multi-module-project是我们的项目名称,其中包含多个模块:mmp-dal模块:数据访问层,提供对原始数据(主要指...
431-Project1:RIT CSCI 431
WebUml-ProjectManager WebUml项目管理器后端。 职责: 用于元模型和表示模型元素的CRUD 要求: GIT 1.9( ) Java 8( ) Maven 3.0.5( ) heroku-toolbelt 3.6.0( ) MongoDB的 推荐工具: jq( ) 在...
ZOO-Kernel : A powerful server-side C Kernel which makes it possible to manage and chain Web services coded in different programming languages. ZOO-Services : A growing suite of example Web services...
composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction 使用composer require ...您可以将新的依赖项下载到您的安装中。 cd some-dir composer require drupal/devel ...
前端:vue-projectManage 后台:mycloud-admin 提供前端服务:mycloud ps:springcloud实现 文件在线预览服务:file-online-preview github地址: 1.vue-projectManage:...
Lesson 3 - Introducing Python: a programming language Lesson 4 - Variables and expressions: giving names and values to things Lesson 5 - Object types and statements of code 46 Lesson 6 - Capstone ...
llvm-project-18.1.8.src 官方离线下载包 # 下载 llvm-project wget -nc https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-project-18.1.8.src.tar.xz # 解压 llvm-project-18.1.8.src...
来自emule-project的原版emule,里面没有关键字过滤,可以自由的下载一切资源,不可多得啊~
3. **科研项目**:结合"nih"标签,ncpi-project-forge 可能特别适用于科研项目管理,为研究团队提供定制化的项目规划和协作环境。 4. **开源软件**:"ncpi-project-forge-master" 提示这是一个开源项目,意味着源...
midterm-project-aagamsh1:GitHub Classroom创建的midterm-project-aagamsh1
:gear: 自行设定# Clone repo$ git clone https://github.com/marcorichetta/cs50-project1.git$ cd cs50-project1# Create a virtualenv (Optional but reccomended)$ python3 -m venv myvirtualenv# Activate the...
team-project-team2:由GitHub Classroom创建的team-project-team2