欢迎光临散文网 会员登陆 & 注册

Zeal8bit操作系统Build & Run In Emulator (基于macOS)

2023-06-24 21:54 作者:timfang1990  | 我要投稿

0. 前言

基于macOS build Zeal8bit操作系统 OS,并在Web Emulator上成功运行,依然踩了不少坑,给想动手尝试一下的同学们分享下~ 

书接上文:Zeal8bit操作系统Build & Run In Emulator (基于Ubuntu)

没想到这么快就来填坑了~

为什么已经在Ubuntu上成功build了Zeal8bit OS了还需要在macOS上再重复一遍呢?因为手头有一台MacBook作为个人学习的主力平台,Z80的各种资料都准备好了,不在macOS上把build flow建立起来说不过去吧?

Build flow已经成功在macOS跑通了,还是踩了不少坑。相比于Ubuntu上主要的坑集中在build z88dk-z80asm的bin文件上,在macOS的坑集中shell命令和Ubuntu的差异上。由于Zeal8bit大佬的Makefile是在Linux上构建和使用的,也许他压根没有想到会有人把这个flow运行在macOS上。

话不多说,开始咱们今天的build细节分享~

1. 环境及所需工具

  • macOS (本机版本:Monterery 版本12.6.6);

  • Python 3及PIP3 Mac版

  • z88dk-osx-2.2.zip

2. 工具安装

Python3及pip3安装

MacOS下安装python3和pip3的教程比较普遍,我这边也不再赘述。安装成功后,在terminal中用which命令展示的效果:

Python3及pip3安装后的效果

z88dk-asm安装

从https://kgithub.com//z88dk/z88dk/releases目录下载z88dk-osx-2.2.zip压缩包:

z88dk-osx-2.2.zip压缩包下载选择

需要注意的是,macOS默认会阻止不受信任的软件来源下载导致下载失败。因此下载前先修改下系统设置,让macOS能够接受来自非App Store的软件下载,做法如下:

首先在terminal中输入:sudo spctl --master-disable,输入密码点击Enter确认即可;

输入terminal命令放宽软件下载管制

然后打开“系统偏好设置”,在弹出的界面上点击“安全性和隐私”,接着点击左下角的锁解锁后,就可以在本界面的“允许从以下位置下载的App”中选择“任何来源”了。

系统偏好设置允许任何来源软件下载

这样设置以后,系统就不会阻止不受信任的软件下载了。

我这边就默认放在Download目录下了, 使用unzip命令解压压缩包即可获得z88dk-z80asm的bin文件了,无需自己build(隔壁Ubuntu默默留下嫉妒的泪水,并点了个赞)

解压即得z88dk-z80asm的bin文件

同时记得在z88dk目录下修改一下set_environment.sh的内容如下,防止z88dk/bin的目录重复设置到$PATH中:

防止重复设置$PATH

最后source set_environment.sh把z88dk-z80asm编译工具的路径添加到系统变量$PATH中,方便后面的步骤直接使用z88dk-z80asm命令。

添加系统path变量

3. Image Build

老规矩,先从github上把OS代码先clone下来:git clone https://kgithub.com/Zeal8bit/Zeal-8-bit-OS.git,获得Zeal-8-bit-OS目录,进入该目录下。

Step 1. 下载安装menuconfig及Makefile预处理

根据之前在Ubuntu下的操作经验,先用pip3 install kconfiglib,然后找到menuconfig文件的目录,比如我的menuconfig目录就在python3的bin目录下:

安装menuconfig

如果像我一样在Python3 user base目录下没有安装menuconfig的话,那就这样修改Makefile目录下的menuconfig target下的内容:

修改Makefile能够正确配置menuconfig

根据已知的Makefile执行在macOS和Linux上的差异(实际是踩坑加测试总结出来的),在macOS下的Makefile中,define后面不能接“=”,否则define不生效。因此需要把Makefile中任何define行中的“=”去除掉(Makefile中有3处,记得都去除下),如下图所示:

删除define行中的“=”

Step 2. Execute ‘make menuconfig’

如Zeal8bit大佬视频中所说,直接默认参数保存即可。命令执行完成后,确保include目录下生成了osconfig.asm.

make menuconfig

Step 3. Execute 'make'

执行make命令,不出意外,你会遇到如下错误:

Build Error 1:build/build/init_TEXT.bin: No such file or directory

在Ubuntu上build就遇到的老问题了,小case,将target/zeal8bit/romdisk/Makefile的第25行和第29行修改成如下的内容:

解决init_TEXT.bin文件找不到问题

Pass,下一个~

Build Error 2:stat: illegal option -- c

macOS上遇到的新问题,上网搜索下,发现macOS并不支持stat -c命令。

首先解释下stat -c命令的含义:'stat -c [-option] file_name' 可以指定格式输出file的某些状态信息,比如本Makefile中使用的 'stat -c %s target//zeal8bit//romdisk/disk.img'就是以字节数获取disk.img的文件大小。

显然,macOS并不支持stat -c命令:

macOS并不支持stat -c命令

既然知道错误原因以及这个命令的目的就是获取文件的占用字节数,而且macOS看起来是支持stat -x选项的,那我们就可以用其他命令平替。

修改target/zeal8bit/unit.mk的第30行为:

修改SIZE获取命令以适配macOS

Build Error 3:du: invalid option -- b

继续执行make,发现在执行到“post commands”的时候还有错。仔细看target/zeal8bit/unit.mk的POSTCMD我们可以发现,这边使用了du -b选项用来以字节数方式获取文件大小,而du -b选项在macOS中还是不支持:

du -b在macOS中不支持

不过仔细看POSTCMD,我们发现使用du命令只是为了打印文件大小信息,并没有其他用途,因此我们用-h或者-k选项大概表示一下文件大小就行了,修改target/zeal8bit/unit.mk第42, 44和48行,把-b选项修改为-h:


修改du的-b选项为-h

再次执行make,大功告成~

build成功后生成的文件

4. Run OS in Web Emulator

按照上篇文章中运行OS img的步骤,加载os_with_romdisk.img后运行结果:

Zeal8bit OS在Web Emulator上运行成功


5. 总结

在macOS上把build flow又试了一遍,遇到新坑,填新坑。

只有在不断地折腾中,才能让自己的知识不断丰富起来。

好了,从现在开始正式尝试学习Zeal8bit OS的代码了,等哪一天我把OS在我的RISC-V上运行起来了,兴许可以发个视频~


Zeal8bit操作系统Build & Run In Emulator (基于macOS)的评论 (共 条)

分享到微博请遵守国家法律