从零开始搭建环境编写操作系统 AT&T GCC (一)搭建环境和测试环境

本文记录了在Ubuntu上使用GCC编写操作系统的过程,包括搭建环境、创建OranOS文件夹、列出所需工具如GCC、gedit、qemu,并详细介绍了如何创建loader.s、loader.lds和Makefile。通过汇编和链接,作者完成了软盘镜像的创建,简化的loader程序,并调用BIOS中断实现了软盘内容加载到内存。文章适合有一定Linux基础的读者,旨在提供一个操作系统开发的起点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  又有闲时间了,一直没有在x86的计算机上做过裸机编程,只要闲下来就手痒,去买了本《30天自制操作系统》,因为之前听说过这本书,而且是在x86的windows电脑上做的,所以就买来研读了一番,之前写的东西也只在群里共享了,这次正好想开个博客,剩下有一年的闲时间可以打理一下这个博客。所以说,这是第一篇文章,我不去照搬照抄书上的内容,我只是参考一下它搭建的过程,所有我操作的过程我会记下来放在这里,以后给自己和大家能有一个参考,毕竟GCC编写操作系统和AT&T汇编这方面的资料太少了。

  作为一个忠实的linux用户,我的操作系统在linux上搭建,具体点说是ubuntu,而且有很多地方我写的比较粗,还是得有一定linux基础的小伙伴来看这些文章。有不太懂的或者我写错的地方,可以直接评论区回复,我会尽可能的回答。

  创建一个文件夹,以后这就是操作系统的诞生地了,我起的名字是OranOS

一、罗列一下要用的工具
  
  编译器:GCC,具体说是as、ld和gcc,这三个经常写硬件的小伙伴应该是耳熟能详了,第一个是AT&T格式的汇编器,第二个是连接器,第三个是c语言编译器
  
  汇编语言的编写:gedit,默认的gedit不会高亮显示AT&T汇编语言,我一会儿传一个脚本上来,是从国外网站上搬进来的,特别好用,支持AT&T i386高亮显示而且做的挺好看的,当然Eclipse也是个不错的选择,但是前期就没有必要使用了,等系统复杂了我再使用Eclipse
  
  虚拟机:qemu,书上就是用的这个虚拟机,我之前一直都是vmware,不过看起来还是很好用的,apt-get install装上,具体怎么用现学现卖吧

  好像写一个系统也就这些东西,似乎很简单的样子,写文章总喜欢感谢一下GNU,在这里再感谢一下这帮伙计。

二、创建今天用的文件
  
  开始了,第一步,在文件夹里创建好今天要用的文件,先说一嘴,操作系统的大致启动步骤,首先CPU上电,内部电路控制CPU去0xFFFFFFF0这个位置取指令,就是在这16个bytes中存着一个小程序,把BIOS加载到内存某个位置,然后jmp去启动BIOS,BIOS会将某种启动方式的启动程序加载到0x7c00处,比如说用U盘启动,它会把U盘最开始的512个字节加载到0x7c00处,然后这512个字节中就要我们自己写一个loader程序,把我们的系统加载到内存中并且启动起来,真复杂哈,不如arm处理器做的简洁。当然,如果作为一个Linux老司机,GRUB是必须的,GRUB会把操作系统加载到0x10000位置,然后启动。我们写的是基于bios启动的,所以,不关心GRUB了,我们的第一步当然就是把这个loader做出来。

  创建今天用的文件:
  loader.s:loader的汇编源程序
  loader.lds:我习惯用lds指定link方式,当然不用也可以
  Makefile:如果想每次都输入那么长的命令行的话,就把这个也省略了吧

  1、先把次要工作做完,把Makefile的代码贴上来

run : loader.bin
    dd if=loader.bin of=loader.img bs=512 count=1
    dd if=/dev/zero of=zero.img bs=1474048 count=1 conv=sync
    dd if=zero.img of=loader.img bs=512 seek=1 
    qemu-system-i386 -fda loader.img -boot a

loader.bin : loader.o Makefile loader.lds
    ld -M --oformat binary -m elf_i386 -o loader.bin loader.o -T loader.lds

loader.o : loader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值