objcopy -O binary init.bin去掉就好了

在尝试构建OS的过程中,遇到启动程序运行失败的问题。检查环境配置和编译过程无误后,发现批处理文件中objcopy命令可能多余。去掉该命令后,镜像文件成功运行。尽管对objcopy的具体作用理解不透彻,但问题得到解决,显示出在操作系统开发中遇到的挑战与团队合作的信心。

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

    今天第一天着手os,中午开始看《Linux0.01内核分析与操作系统设计》,下午正好师兄在网上,他这个东西已经搞了一段时间了,对开发环境比较熟悉,于是决定冲到他那边请教请教,也免得我自己还要研究半天。

    到他那边,讲了一通环境的配置,还给了我们这两天他写的一个启动程序,于是高高兴兴的回到了寝室,搭平台、配环境,也正好用他的代码熟悉一下整个开发工具。环境配置由于暑假研究过一段时间所以很快就搞定了,然后开始将师兄的源文件重新生成镜像文件——c.img。一切看起来都很顺利,但是错误的情况出现了,当我用bochs跑得时候,运行失败了。我首先想到了,环境配置是不是有问题,但一个个试验告诉我——环境配置no problem;之后我又想到了,是不是编译程序有问题,但最后断定也是没问题的;于是我叫telescope试一下,结果问题和我一样,这下我就晕了,一样的环境配置,一样的编译程序,为什么我们这里会出错,师兄就是好的呢?

    到晚上8点,实在没办法了,只能暂时作罢,决定到综A看书,以缓解郁闷的情绪。可是心里的这块石头就是放不下,自习一点心情都没有,9点决定回寝,继续——

    到了寝室搞了一会还是没结果,这是正好室友在看电影,正郁闷中的我于是也跟着一起看了起来,片子还蛮搞笑,结束之后心情好多了,决定接着研究。这时候发现批处理文件中的有个奇怪的地方(下面加粗的语句),感觉上ld生成的已经是binary文件了,问什么还要去生成一次呢?(这里一些细节还是没弄懂),于是我将这句话去掉,重新生成新的镜像,果然运行正常了。 

nasm -f bin -o boot.bin boot.s
partcopy boot.bin 0 200 c.img 0
rem as -o head.o head.s
gcc -c head.s
gcc -Wall -O0 -nostdinc -c main.c
ld -Ttext 0 -e startup_32 -nostdlib -o init.bin head.o main.o
objcopy -O binary init.bin
partcopy init.bin 0 5c00 c.img 200

    于是马上查到objcopy的用法,但是还是有些懵懵懂懂,对于他的具体实现比较模糊。

    整件事最让人搞不懂的是,为什么师兄加上这句话生成的binary文件就运行正常,我们的就不行呢?让人百思不得其解,今天太晚了,我懒得去搞为什么了,l过两天一定和师兄好好讨论讨论。

    没想到,第一天正式着手os就遇到了这么晕的事情,可想而知要真正做成这一个项目,要走的路还很长,困难一定无数,不过我对我们这个团队有信心,对师兄有信心,对telescope有信心,当然对我自己也有信心,我们一定会成功的,加油!夜已深,今天就说到这里————小敏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值