一个64位操作系统的设计与实现踩坑记录(一)

Bochs的配置

这里我是在Ubuntu18.04的服务器上进行代码的编写和编译,将生成的boot.img拷贝到windows平台下面的bochs运行。由于我的bochs运行在win平台上,因此并没有作者书中提到的./configure等选项,所以配置也和作者书中的不太一样,下面是我的配置文件供参考:

#################################################################
# Bochs的配置文件
# Configuration file for Bochs
#################################################################
 
# how much memory the emulated machine will have
megs: 2048
 
# filenameof ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
 
# which disk image will be used 这个是启动软盘,我们虚拟出来的那个a.img
floppya: type=1_44, 1_44="boot.img", status=inserted, write_protected=0
 
# choose the boot disk 确定启动方式
boot: floppy
 
# where do we send log messages?
log: bochsout.txt
 
# disable the mouse
mouse: enabled=0
 
# enable key mapping ,using US layout as default
keyboard: keymap=$BXSHARE/keymaps/x11-pc-us.map

#####################################################
vga: extension=vbe, update_freq=5  #注意这里,没有这句话会卡在Get SVGA VBE Info ERROR这个地方
floppy_bootsig_check: disabled=0
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=none
ata0-slave: type=none
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=0
ata3: enabled=0
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5
print_timestamps: enabled=0
debugger_log: -
magic_break: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0
clock: sync=none, time0=local, rtc_sync=0
# no cmosimage
# no loader
log: -
logprefix: %t%e%d
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
speaker: enabled=1, mode=system
parport1: enabled=1, file=none
parport2: enabled=0
com1: enabled=1, mode=null
com2: enabled=0
com3: enabled=0
com4: enabled=0

cpu: count=1:1:1, ips=4000000,  model=corei7_sandy_bridge_2600k, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0, msrs="msrs.def"

#cpuid: x86_64=1, mmx=1, sep=1, simd=sse4_2, apic=xapic, aes=1, movbe=1, xsave=1
#cpuid:avx_f16c=1,avx_fma=1,bmi=bmi2
cpuid: x86_64=1,level=6, mmx=1, sep=1, simd=sse4_2, aes=1, movbe=1, xsave=1,apic=x2apic,sha=1,movbe=1,adx=1,xsaveopt=1,1g_pages=1,pcid=1,fsgsbase=1,smep=1,smap=1,mwait=1,vmx=1
cpuid: family=6, model=0x1a, stepping=5, vendor_string="GenuineIntel", brand_string="Intel(R) Core(TM) i7-4770 CPU (Haswell)"

高版本gcc使用makefile文件报错

和这位博主遇到的问题一样,主要是

ld -b elf64-x86-64 -z muldefs -o system head.o main.o printk.o -T Kernel.lds 
printk.o: In function `number':
printk.c:(.text+0x4a6): undefined reference to `__stack_chk_fail'
printk.o: In function `vsprintf':
printk.c:(.text+0x866): undefined reference to `strlen'
printk.o: In function `color_printk':
printk.c:(.text+0x13f2): undefined reference to `__stack_chk_fail'
Makefile:20: recipe for target 'system' failed
make: *** [system] Error 1

可以参考这位博主的解决方法:https://blog.csdn.net/m0_37329910/article/details/89633342
修改makefile之后再,将inline strlen函数注释掉,直接在printk.c文件中进行声明和定义。

运行结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值