构建SerenityOS

前言

为什么要选择这个项目呢?更主要的原因是它是主要用C++语言写的,我想通过它实践计算机网络的知识,也喜欢这段话。
SerenityOS 是一封写给 90 年代用户界面的情书,它采用了定制的类 Unix 内核。它从其他各种系统中汲取了精妙的创意,真诚地向 90 年代的用户界面致敬。
粗略地说,我们的目标是将 1990 年代后期生产力软件的美学与 2000 年代后期 *nix 的高级用户易用性相结合。这是一个由我们自己设计、为我们自己打造的系统,基于我们喜欢的元素。

一、准备条件

我使用的是 Windows,+ WSL2(完整的 Linux 系统) 构建 SerenityOS。
Arch Linux
微软商店自带的Winch WSL 有自带的g++,gcc,我又安装了下面的LLVM流安装包

sudo pacman -S clang lldb libc++ lld

sudo pacman -S --needed base-devel cmake curl mpfr libmpc gmp e2fsprogs ninja qemu-desktop qemu-system-aarch64 ccache rsync unzip

检查所有的包是否安装成功

pacman -Ss '^(base-devel|cmake|curl|mpfr|libmpc|gmp|e2fsprogs|ninja|qemu-desktop|qemu-system-aarch64|ccache|rsync|unzip)$'

在这里插入图片描述

构建 SerenityOS 的标准流程:

第 1 步:克隆 SerenityOS 源代码

打开终端,执行以下命令来获取最新的源代码:

# 克隆 SerenityOS 的主仓库到当前目录
git clone https://github.com/SerenityOS/serenity
# 进入 serenity 目录
cd serenity

在这里插入图片描述
在这里插入图片描述

第 2 步:运行构建脚本

SerenityOS 使用一个非常方便的脚本来管理构建过程。这个脚本会自动处理所有复杂的配置

# 进入构建工具目录
cd Meta

# 运行 SerenityOS 的构建环境脚本
./serenity.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当你第一次运行这个脚本时,它可能会:
1、检查你的构建环境。
2、提示你安装任何可能缺失的依赖包(虽然你已经安装了主要依赖)。
3、引导你完成初始设置。

第 3 步:开始构建系统
环境设置好后,你可以开始构建整个操作系统:

# 在 Meta/ 目录下,运行构建命令
./serenity.sh build

在这里插入图片描述
由于网络的问题,SerenityOS 的构建系统需要下载一个时区数据库文件 (tzdb.tar.gz),下载失败了,所以得手动下载。

# 进入 SerenityOS 源码目录
cd ~/serenity

# 创建缓存目录
mkdir -p Build/superbuild-x86_64/../caches/TZDB

# 手动下载 tzdb.tar.gz
cd Build/superbuild-x86_64/../caches/TZDB
curl -L -O https://data.iana.org/time-zones/releases/tzdb-2024a.tar.gz

# 然后重新构建
cd ~/serenity/Meta
./serenity.sh build

在这里插入图片描述
又发现缺个bcm2711-rpi-4-b.dtb,和之前一样重新下载。

# 进入 SerenityOS 源码目录
cd ~/serenity

# 创建缓存目录(如果不存在)
mkdir -p Build/caches

# 下载树莓派4的设备树文件
cd Build/caches
curl -L -o bcm2711-rpi-4-b.dtb https://github.com/raspberrypi/firmware/raw/master/boot/bcm2711-rpi-4-b.dtb

在这里插入图片描述

# 4. 继续构建
cd ~/serenity/Meta
./serenity.sh build

在这里插入图片描述
定位到cldr,zip问题,同上操作

# 进入 SerenityOS 源码目录
cd ~/serenity

# 创建 CLDR 缓存目录
mkdir -p Build/caches/CLDR

# 下载 CLDR 数据
cd Build/caches/CLDR
curl -L -o cldr.zip https://github.com/unicode-org/cldr/archive/refs/heads/main.zip
# 有时curl下载不了,可以用比较稳定wget下载, 此处地址是报错的信息中看到的cldr.zip包源,下载后记得改为cldr.zip
cd /home/rain/serenity/caches/CLDR/
wget -O cldr.zip "https://github.com/unicode-org/cldr-json/releases/download/45.0.0/cldr-45.0.0-json-modern.zip"

(以下三步是可选用操作,主要用于检查cldr.zip是否完整)
# 检查文件大小 - 应该不是 0
ls -lh cldr.zip
# 检查文件类型
file cldr.zip
# 检查 ZIP 文件是否完整
unzip -t cldr.zip

# 返回继续构建
cd ~/serenity/Meta
./serenity.sh build

在这里插入图片描述
这里发生了一个奇怪的事情,我手动下载了cldr.zip ,但是当我重新构建时候,它又被自动删除了,所以又报相同的错误。经过查阅后发现构建系统不仅要检查文件"存在",还要验证其完整性和新鲜度(checksum、版本等)。手动放置的文件可能无法通过这些验证,会被自动删除。所以需要我们下载后设置只读权限,这样就不会删除。

chmod 444 cldr.zip

在这里插入图片描述
但即使这样依然被删除了
在这里插入图片描述
我决定换个思路,预下载

cd ~/serenity/Meta

# 方法1:使用预下载(最简单)
./serenity.sh predownload

# 然后正常构建
./serenity.sh build

然后又给我删除了,真是多事之秋啊! 我构建前设置个环境变量

./serenity.sh clean

# 设置个环境变量,告诉构建系统跳过下载验证
export SERENITY_EXTRA_CMAKE_ARGS="-DSERENITY_SKIP_DOWNLOAD_VERIFICATION=ON -DSERENITY_SKIP_CLDR_DOWNLOAD=ON"

./serenity.sh build

费劲一番心思,终于构建完毕了
在这里插入图片描述

运行serenityOS

接下来启动在~/serenity/Meta下

# 启动serenity OS
./serenity.sh run 

在这里插入图片描述
在这里插入图片描述
你以为这就成功了,当我这么沉浸在努力了半天的成果当中的时候,我发现操作不了,当我去看arch linux 的shell时,发现上有这下面这个问题
在这里插入图片描述
来分析一下这个错误:
Disabling interface ep2s1: SerenityOS 检测到一个网络接口(可能是模拟的)并试图配置它,但失败了,于是禁用了该接口。
ioctl: No such process (errno=3): 这是一个底层系统调用错误,通常意味着进程间通信失败。

系统并没有崩溃,而是"优雅地"退出。这说明内核基本工作是正常的。
在这里插入图片描述
我在网上搜洛了一番,并没有得到解决,在重启之后发现可以操作。
在这里插入图片描述
再查说是这个 route 命令的错误只是系统启动日志中的一个无害提示,表明某些非关键的网络配置没有完全成功,是个次要错误,所以我就此撩开手了。

测试SerenityOS

在这里插入图片描述

1.测试网络栈

验证 SerenityOS 的 TCP/IP 协议栈(操作系统里处理网络通信的软件部分)是否正常启动并运行 √
在这里插入图片描述

2.Text Editor 可以用

在这里插入图片描述

3.其他好玩的

在这里插入图片描述
在这里插入图片描述
今天就到这里吧,其他的在测。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值