macbook 编写操作系统——前置知识

gcc

gdb

makefile

Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是: 
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。 

交叉编译器—— i386-elf-gcc

你不可能在一台“裸机”上进行开发,所以你需要在自己的机器(host)上写你的操作系统,然后让编译器将源代码编译成目标机器(guest)上运行的代码。这样的“跨平台”编译则需要交叉编译器(Cross Compiler)的支持,GCC就是一个非常好的交叉编译器!

选定了GCC之后,我们还需要选择具体GCC的目标架构!例如如果我们希望我们地操作系统运行在ARM CPU上和运行在Intel 386架构上的GCC版本是不一样的(因为CPU所支持的指令集不一样)。

我们这里就选用比较常用的架构── i386,具体需要的编译器有:

  1. i386-elf-ld: GNU i386-ELF连接器,将多个目标文件链接成一个二进制文件用。

  2. nasm (Netwide Assmebler, 汇编编译器): 在写操作系统的时候,有些代码是无法用C来完成地,这时候我们就需要用到汇编。

  3. i386-elf-gcc (里面包括 i386-elf-binutils): GCC 交叉编译器,如果你想用C来写操作系统的话就需要这个。

  4. 可选:i386-elf-gdb : 可以不装GDB,bochs虚拟机里自带了汇编级别的调试器。

其中 ELF 是 Excutable and Linkable Format 的意思,即我们编译出来的多个目标文件是可以被连接器LD链接在一起成为一个二进制文件的。

在Mac下,这些可以通过MacPorts直接安装,linux下也可以通过apt-get等来安装。

虚拟机——Qemu

还有一个比较适合开发操作系统的虚拟机是:Qemu ! 它可以支持 GDB stub:通过 socket 将虚拟机里的内核二进制程序和本机里的symbol file联系起来进行调试,下载地址是:[a]http://www.qemu.org[/a] ,Mac下的用户可以直接在 [a]http://www.kju-app.org/[/a] 下载到Q的dmg文件。

在我们的Makefile中,CFLAGS里一定要加上:” -nostdlib -nostartfiles -nodefaultlibs
“,也就是gcc在编译的时候不增加任何标准库和其他额外信息,因为我们要写的是操作系统,所有这些标准库都应该是我们提供的,我们的新操作系统里没有自带这些东西,一切从零做起!

教程

参考资料

$(V)$(QEMU) -parallel stdio -hda $< -serial null
使用 dev 设备的命令如:
        `-serial dev'
            重定向虚拟串口到主机设备 dev 中。
        `-parallel dev'
            重定向虚拟并口到主机设备 dev 中。
        `-monitor dev'
`-s'
   等待 gdb 连接到端口 1234。
`-p port'
    改变 gdb 连接端口到 port。
`-S'
    在启动时不启动 CPU, 需要在 monitor 中输入 'c',才能让qemu继续模拟工作。
-parallel stdio 
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是: 
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。 
-hda $< 
-serial null

汇编知识

汇编语言入门教程

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值