章节团体框架
x86保护模式
项目团体工程组织架构
Makefile文件(怎么编译链接)
- d# 工具链前缀,如果是windows和mac,使用x86_64-elf-
- # 如果是linux,使用x86_64-linux-gnu-
- # 工具链前缀,如果是windows和mac,使用x86_64-elf-
- # 如果是linux,使用x86_64-linux-gnu-
- ifeq ($(LANG),)
- TOOL_PREFIX = x86_64-linux-gnu-
- else
- TOOL_PREFIX = x86_64-elf-
- endif
- # GCC编译参数
- CFLAGS = -g -c -O0 -m32 -fno-pie -fno-stack-protector -nostdlib -nostdinc #编译c文件时候给GCC传的编译相关的参数
- # 目标创建:涉及编译、链接、二进制转换、反汇编、写磁盘映像
- #创建我们最终要生成的操作系统的文件(disk.img)
- all: source/os.c source/os.h source/start.S
- $(TOOL_PREFIX)gcc $(CFLAGS) source/start.S # 编译这个汇编文件成目标文件
- $(TOOL_PREFIX)gcc $(CFLAGS) source/os.c # 编译.c文件成目标文件
- $(TOOL_PREFIX)ld -m elf_i386 -Ttext=0x7c00 start.o os.o -o os.elf #将生成的目标文件链接在一起,然后生成这个os.elf
- ${TOOL_PREFIX}objcopy -O binary os.elf os.bin #将os.elf文件转成.bin文件
- ${TOOL_PREFIX}objdump -x -d -S os.elf > os_dis.txt #因为我们有时候需要看反汇编结果,所以需要将其反汇编转为txt,好随时打开查看
- ${TOOL_PREFIX}readelf -a os.elf > os_elf.txt
- dd if=os.bin of=../image/disk.img conv=notrunc #将OS生成的二进制文件(os.bin)写到我们的磁盘文件(disk.img),这个文件会给qemu加载
- # 清理
- clean:
- rm -f *.elf *.o
复制代码 当我们去启动调试的时候,就会去实验tasks.json文件
- {
- // See https://go.microsoft.com/fwlink/?LinkId=733558
- // for the documentation about the tasks.json format
- "version": "2.0.0",
- "tasks": [
- {
- "label": "启动qemu",
- "type": "shell",
- "command": "bash ${workspaceRoot}/script/qemu-debug-osx.sh",
- "windows": {
- // windows下特殊一些
- "command": "${workspaceRoot}/script/qemu-debug-win.bat",
- },
- "linux":{
- "command": "bash ${workspaceRoot}/script/qemu-debug-linux.sh",
- },
- "options": {
- "cwd": "${workspaceRoot}/../image/"
- }
- },
- ]
- }
复制代码 qemu-debug-win.bat
- start qemu-system-i386 -m 128M -s -S -drive file=disk.img,index=0,media=disk,format=raw //将disk.img当作系统盘去加载OS,
复制代码 编译我们的工程
make clean就会清除make编译天生的文件
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |