一个操作系统的实现--从loader到内核和扩充内核的错误兼参考指令

来源:互联网 发布:广州经济开发区知乎 编辑:程序博客网 时间:2024/06/05 07:29
======================================

chapter5/e  运行程序命令记录


======================================

# 先制作内核

nasm -f elf -o kernel.o kernel.asm
ld -s -m elf_i386 -Ttext 0x30400 -o kernel.bin kernel.o string.o start.o

# 再制作磁盘和引导程序

bximage  #生成a.img软盘

nasm boot.asm -o boot.bin    #引导扇区,加载引导程序
nasm loader.asm -o loader.bin    #编译引导程序,引导内核

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc    

sudo mount -o loop a.img /mnt/floppy/
sudo cp -fv loader.bin /mnt/floppy/
sudo cp -fv kernel.bin /mnt/floppy/
sudo umount /mnt/floppy/

#最后运行
bochs
c

======================================

chapter5/f  运行程序命令记录

======================================

# 先制作内核

nasm -f elf -o kernel.o kernel.asm
nasm -f elf -o string.o string.asm
nasm -f elf -o kliba.o kliba.asm
gcc -c -m32 -fno-builtin -o start.o start.c
ld -s -m elf_i386 -Ttext 0x30400 -o kernel.bin kernel.o string.o start.o kliba.o


# 再制作磁盘和引导程序

bximage  #生成a.img软盘

nasm boot.asm -o boot.bin    #引导扇区,加载引导程序
nasm loader.asm -o loader.bin    #编译引导程序,引导内核

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc    


sudo mount -o loop a.img /mnt/floppy
sudo cp -fv loader.bin /mnt/floppy
sudo cp -fv kernel.bin /mnt/floppy
sudo umount /mnt/floppy

#最后运行

bochs

c

========================================

chapter6/g 运行程序命令记录

=========================================

#修改Makefile:
第20,21行: 分别增加 -m32 和 -m elf_i386
CFLAGS        = -I include/ -c -m32 -fno-builtin
LDFLAGS        = -s -m elf_i386 -Ttext $(ENTRYPOINT)  

#执行
make image
bochs
c

=======================================

chapter6/h  运行程序命令记录

=======================================


#Makefile中第20行: CFLAGS 加上 -m32
第21行        :  LDFLAGS 加上 -m elf_i386

make image

出现错误:
ld -s -m elf_i386 -Ttext 0x30400 -o kernel.bin kernel/kernel.o kernel/start.o kernel/i8259.o kernel/global.o kernel/protect.o lib/klib.o lib/kliba.o lib/string.o
lib/klib.o:在函数‘disp_int’中:
klib.c:(.text+0xe6):对‘__stack_chk_fail’未定义的引用
make: *** [kernel.bin] 错误 1

------------------------------------------------
# 解决办法: 在顶层的Makefile里找到CFLAGS然后在参数后面添加-fno-stack-protector标志

make clean
make image
bochs
c

=================================================
2 0