先搭环境
相关书籍:自备,《30天自制操作系统》,于渊的《自己动手写操作系统》,王爽的《汇编语言》,各位大神的书,请各位自行阅读,俺只是代码的搬运工
代码放在git上:https://github.com/qdhjkztm/study.git,可以作为参考
开发工具:vs code
开发使用操作系统:win10
虚拟机:自备
编译环境:centos7
所需技能:shell,汇编,nasm,makefile,git,c吧
所以,开发流程是win10下使用vs code开发(ctrl-c+ctrl-v),然后提交到github,虚拟机下centos下用git下载代码进行编译。对于编译后的img文件,在虚拟机下查看结果,至于如何调试os,还没学会
参考内容
https://asmtutor.com/,nasm汇编学习
https://github.com/wlmnzf/oranges.git,这个代码应该是来自于渊的《自己动手写操作系统》,若果有问题,请指正,随时候着删除。
linux下代码架构
myAll
----study(从git上clone)
--------huibian(以前代码全来自https://asmtutor.com/)
-----------------lesson1
-----------------lesson2
-----------------lesson3
-----------------等等
--------os
----------------day1
----------------day2
----------------等等
--------make.sh(接收execute.sh传过来的参数,决定编译哪个文件夹下的内容)
----output(make编译输出)
--------huibian(输出汇编编译结果)
--------os(输出os编译结果)
---------execute.sh(负责从git上拉代码,并编译)
编译举例:
cd /usr/loca/myAll/output
sh execute.sh h lesson1
cd huibian
./main
execute.sh参考
#!/bin/bash cd /usr/local/myAll/study git pull https://github.com/qdhjkztm/study.git sh make.sh $1 $2
讯享网
make.sh参考
讯享网#!/bin/bash rootPath=/usr/local/myAll/study outputFilePath=/usr/local/myAll/output if [ $1 == "c" ] ;then echo "进入c文件夹" cd $rootPath/c/release/ echo "清除可能存在的编译" make clean echo "开始编译" make echo "结束编译" echo "进入编译后的文件夹" cd $outputFilePath/c echo "开始执行" ./main elif [ $1 == "h" ] ;then echo "进入汇编文件夹" cd $rootPath/huibian for dir in `ls` do if [ $dir == $2 ] ; then echo "开始进入:${dir}" cd $dir echo '开始清理' make clean echo '开始编译' make echo '结束编译' fi done echo "进入编译后的文件夹" cd $outputFilePath/huibian echo "开始执行" ./main elif [ $1 == "o" ] ;then echo "进入os文件夹" cd $rootPath/os for dir in `ls` do if [ $dir == $2 ];then echo "开始进入:${dir}" cd $dir echo '开始清理' make clean echo '开始编译' make echo '结束编译' fi done fi
先来一个hello world,lesson1.asm
section .data msg: db "hello, world", 10 len equ $-msg section .text global main main: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 ;直接使用sys_write系统调用 int 0x80 mov ebx, 0 mov eax, 1 int 0x80
makefile编译,makefile
讯享网outputFilePath=/usr/local/myAll/output/huibian/ OBJ = $(outputFilePath)lesson1.o TARGET=$(outputFilePath)main RM = rm -f $(TARGET):$(OBJ) gcc -g -o $@ $< $(OBJ):$(outputFilePath)%.o:%.asm nasm -f elf64 -g $< clean: rm -f $(TARGET) *.o
如果您的文件夹结构和上面的相同:
请执行
cd /usr/loca/myAll/output
sh execute.sh h lesson1
cd huibian
./main
如果不相同,请自行修改outputFilePath路径,也可以默认为当前路径
没讲解,回头改
俺啥也不懂-不知道什么时候才会编写操作系统-再写Hello World-第一版makefile

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/65020.html