因为在虚拟机上进行开发过于卡顿,所以选择在 MacOS 上搭建实验环境。

在 MacOS 上搭建实验环境

  • step1: 下载包管理工具

    1. homebrew
    2. Macports
  • step2: 使用homebrew安装qemu
brew update
brew install qemu
  • step3: 安装 i386-elf-gcc
    这里有很多坑,网上普遍的做法是 brew tap 第三方库 ,然后 brew install i386-elf-gcc。但是因为现在那些仓库已经将 i386 改为 x64,所以下载下来后 make 仍然使用不了。所以这里只能使用 macports 进行安装。
sudo port -v selfupdate
sudo port install i386-elf-gcc

然后在 ~/.bash_profile 中添加下面两行

export PREFIX=/opt/local
export PATH="$PREFIX/bin:$PATH"
  • step4: 安装 i386-elf-gdb(我使用的是gdb,可以使用)
brew install i386-elf-gdb
  • step5: 测试
    进入 lab1_result 进行 make clean 然后 make 看一下是否有报错。

编译调试程序

  • step1: make gdb启动 qemu
ifndef QEMU
QEMU := $(shell if which qemu-system-i386 > /dev/null; \then echo 'qemu-system-i386'; exit; \elif which i386-elf-qemu > /dev/null; \then echo 'i386-elf-qemu'; exit; \else \echo "***" 1>&2; \echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \echo "*** Is the directory containing the qemu binary in your PATH" 1>&2; \echo "***" 1>&2; exit 1; fi)
endifUCOREIMG   := $(call totarget,ucore.img)gdb: $(UCOREIMG)$(V)$(QEMU) -S -s -parallel stdio -hda $< -serial null
  • step2: 编写 gdb 初始化脚本,clone 下来的代码已经帮我们编写好了,在 tools/gdbinit 中
file obj/bootblock.o
target remote :1234
break bootmain
continue
  • step3: gdb -x tools/gdbinit

GDB 常用命令

break FILENAME:NUM   在特定源文件特定行上设置断点
clear FILENAME:NUM  删除设置在特定源文件特定行上的断点
run 运行调试程序
step    单步执行调试程序,不会直接执行函数
next    单步执行调试程序,会直接执行函数
backtrace   显示所有的调用栈帧。该命令可用来显示函数的调用顺序
where continue  继续执行正在调试的程序
display EXPR    每次程序停止后显示表达式的值,表达式由程序定义的变量组成
file FILENAME   装载指定的可执行文件进行调试
help CMDNAME    显示指定调试命令的帮助信息
info break  显示当前断点列表,包括到达断点处的次数等
info files  显示被调试文件的详细信息
info func   显示被调试程序的所有函数名称
info prog   显示被调试程序的执行状态
info local  显示被调试程序当前函数中的局部变量信息
info var    显示被调试程序的所有全局和静态变量名称
kill    终止正在被调试的程序
list    显示被调试程序的源代码
quit    退出 gdb

参考文档

清华大学 ucore-lab0 MacOS相关推荐

  1. 清华大学ucore实验lab

    清华大学实验lab1 实验目的: 操作系统是一个软件,也需要通过某种机制加载并运行它.在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作.为此,我们需要完成一个能够切换到x86 ...

  2. ucore bootloader详解

    第一节:概要 ucore的bootloader用汇编语言和c语言混合编写.本文将详细解析bootsam.S和bootmain.C中的代码,以及代码牵扯到的知识点,如可执行文件的格式.段机制.A20ga ...

  3. 计算机科班学习 OS 的正确姿势!

    来源 | 编程指北 操作系统发展到今天,已经非常复杂了,像 Windows.Linux 任意一个都是几千万行代码级别,想靠个人完全搞懂,几乎是不可能的了. 所以需要先明确一下我们学习的目的,不同的学习 ...

  4. rust大油井频率怎么用_「Rust每日新闻」本周精选 • 第二十四期

    前言: 从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛.tg channel.Steemit.GitHub.语雀订阅都开通了Rust每日新闻,分享我每天的见闻,偶尔 ...

  5. 京香茱莉亚_茱莉亚的职能

    京香茱莉亚 Single, multiple, compound expressions, anonymous functions and scopes 单个,多个复合表达式,匿名函数和范围 This ...

  6. 【Rust日报】 2019-03-31

    Rust日报小组成立 从下周开始将由ChaosBot.Mike和Damody三位轮流发布日报,其中Damody为台湾同胞,如果大家看到中文繁体日报,就是他发布的. 发日报有什么好处?我来给大家透露一下 ...

  7. uCore学习笔记-Lab0

    uCore实验笔记 Bash Shell常用指令 ls:查询文件列表 ls 命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参 ...

  8. macos nginx php mysql_mac环境下搭建nginx + php + mysql开发环境

    1.安装homebrew(mac下好用的包管理器) 第一步,获取install文件 把官网给的脚本拿下来 curl -fsSL https://raw.githubusercontent.com/Ho ...

  9. 操作系统:ucore的部分Bug挑战练习

    ucore是清华大学提供的一个学习操作系统的平台.ucore有完整的mooc视频与说明文档. https://objectkuan.gitbooks.io/ucore-docs/content/# 本 ...

最新文章

  1. java独立承担,Java使用独立文件服务器
  2. C#利用Graphics类绘制进阶--实现图片等比例缩放
  3. POJ 1064 Cable master (二分答案)
  4. Varnish加速网站图片显示
  5. NSArray 和 NSMutableArray
  6. Windows10安装Matlab 2018b教程
  7. JAVA基础语法——关键字
  8. 读书百客:《山坡羊·北邙山怀古》赏析
  9. mysql 生成id函数_MySQL ID生成策略
  10. java课程管理系统_基于JAVA学生课程管理系统.doc
  11. 微信JS SDK开发 共享问题小结
  12. 工信部域名icp查询 在哪查询域名icp信息
  13. JS部分BOOM类封装函数
  14. IOS多线程开发详解
  15. 信道化接收机matlab,基于FPGA的数字信道化接收机研究与实现
  16. 没有身家也要有身价,有身家更要有身价
  17. HDU 1252 : Hike on a Graph-
  18. 电力电子-直流直流变流电路
  19. 2021年初级会计职称《初级会计实务》会计科目和借贷记账法
  20. 对自己学习的一点总结

热门文章

  1. kettle执行组件时为什么使用克隆对象
  2. application实现网页计数_手把手教你利用爬虫爬网页(Python代码)
  3. linux 终端最大化命令,11个让你吃惊的Linux终端命令
  4. Disruptor内存消息队列简单使用
  5. Linux安装RabbitMQ及问题
  6. ES启动错误 ERROR: the system property [es.path.conf] must be set
  7. oracle分组后合并(wm_concat)其中一个字段
  8. zookeeper 3.5.6安装
  9. mysql审计插件安装_MySQL审计插件安装使用说明文档--升级版
  10. 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)