30天自制操作系统吧 关注:1,381贴子:4,825
  • 15回复贴,共1

摆脱30天工具链的方法

只看楼主收藏回复

众所周知,现在主流的操作系统编译软件是:汇编nasm,C语言gcc,少数情况会有g++等软件的参与。
但是30天自制操作系统中,使用的是nask汇编,且最终都会归到nask上。
而这是制作操作系统过程中一个很烦人的话题,因此这里统一介绍一下。
以第12天的内容harib09a为例。


1楼2022-05-22 12:26回复
    1.IPL
    首先我们需要更改ipl的内容,将ipl10.nas重命名为ipl10.asm。
    然后找到“RESB 18”,把它改成“TIMES 18 DB 0”。(懒得找?查找并替换适合你哦)
    对于最后的RESB 0x7dfe - $,由于nasm并不使用绝对位置而是使用相对位置,我们需要把它改成“TIMES 510 - ($ - $$) DB 0”。
    对于其他的细枝末节,如INT 0x10的标准写法是INT 010h等,因为nasm仍支持INT 0x10的写法,因此不做处理。
    做完以上的修改之后,对于IPL的处理就做完了。


    2楼2022-05-22 12:30
    回复
      2.asmhead
      随后对于asmhead的修改不涉及太多的内容,仍然是先把asmhead.nas改名为asmhead.asm,
      然后在GDT0标签下,把RESB 8改成TIMES 8 DB 0即可。


      3楼2022-05-22 12:31
      回复
        3.*.c
        由于cc1是gcc的汇编器,因此对于c文件我们可以不加修改的直接使用,具体的其他内容参见后文Makefile。


        4楼2022-05-22 12:32
        回复
          4.qemu
          作者提供的qemu中bug繁多,因此我们需要更新qemu,具体的上文提到的工具(gcc、nasm、qemu新版)均可在后文下载,此处不多赘述。


          5楼2022-05-22 12:33
          回复
            5.Makefile
            对于Makefile的修改较多,因为gcc主要用于编写应用程序,写操作系统的话需要一长串参数,对变量的更改如下:
            NASM = $(TOOLPATH)nasm.exe
            GCC = $(TOOLPATH)bin/gcc.exe -m32 -I$(INCPATH) -nostdinc -nolibc -nostdlib -fno-builtin -ffreestanding -fno-stack-protector -Qn -fno-pic -fno-pie -fno-asynchronous-unwind-tables -mpreferred-stack-boundary=2 -fomit-frame-pointer -O0 -finput-charset=UTF-8 -w -c


            6楼2022-05-22 14:23
            回复
              6.naskfunc.nas
              改名nasmfunc.asm


              7楼2022-05-22 14:23
              回复
                7.编译选项
                对于nasmfunc.asm,编译代码如下:
                nasmfunc.obj : nasmfunc.asm Makefile
                $(NASM) -f win32 nasmfunc.asm -o nasmfunc.obj
                一般规则修改如下:
                %.obj : %.c Makefile
                $(GCC) $*.c -o $*.obj


                8楼2022-05-22 14:25
                回复
                  如有需要,发邮箱至2276316223@qq.com


                  9楼2022-05-22 14:28
                  回复
                    edimg有可以避免的办法吗


                    IP属地:四川10楼2022-06-05 19:43
                    收起回复
                      书中出现的网站有没有推荐的


                      IP属地:四川11楼2022-08-03 19:25
                      回复
                        怎么制作镜像


                        IP属地:浙江12楼2023-12-30 12:29
                        回复
                          制作镜像可以用bximage,或者干脆用python写一个脚本,写入1474560个'\0'。
                          然后下载一个dd for windows,写入ipl:
                          dd if=ipl.bin of=a.img bs=512 count=1
                          写入其他文件的时候,把imgin改成a.img(这里用edimg举例):
                          edimg imgin:a.img copy from:haribote.sys to:@: imgout:a.img
                          写入其他文件同理。
                          如果需要edimg以外的文件写入方案,可以按贴里说的用fatimg,或者干脆自己写一个,FAT文件系统还算比较亲民了。


                          IP属地:北京13楼2024-01-20 20:28
                          回复
                            fatimg链接:https://gitee.com/viifo/fatimg


                            IP属地:浙江14楼2024-01-26 13:04
                            回复