对应原书第六章,与原书步骤大致相同(注意部分代码及代码解释在原书中有所以没有贴出,本系列博客需结合原书食用)
与之前实验过程相同,生成kernel.bin后挂载到a.img(相较于第五章代码多了
kernel/main.c
、include/proc.h
、include/sconst.inc
),由于第五章最后讲过makefile了,之后的实验不再一步步展示编译链接挂载过程(有特殊情况会说明),直接执行make
命令即可。make
出现不兼容错误是因为没有把64位转为32位,需要在对应FLAGS
后加对应转32位的编译参数(见此系列博客(四))
实验1:进程启动
这里除了64位转32位的问题外,还出现undefined reference to ‘__stack_chk_fail’
错误,在修改后的Makefile
的CFLAGS
后再加上-fno-stack-protector
(即不需要栈保护)即可。
# 只改了Makefile文件中的20、21行,修改为如下:
CFLAGS = -I include/