图片无法显示,请右键点击新窗口打开图片

当前 BiscuitOS 对 CXL 的实践还处于早期,因此会具有很多实践限制,请各位开发者见谅. BiscuitOS 项目维护在 Github 仓库Gitee 仓库, 项目全部代码都是开源的. 由于 BiscuitOS 基于 QEMU 运行,因此需要一台 X86 机器作为开发机,开发机目前支持的版本如下:

  • Ubuntu18.04 (支持)
  • Ubuntu20.04 (支持)
  • Ubuntu22.04 (支持)
  • Ubuntu24.04 (支持)
  • Windows+VirtualBox+Ubuntu24.04(部分功能受限)
  • Windows+WMware+Ubuntu24.04(部分功能受限)

准备好一台开发机之后,开发者根据使用不同发行版需要提前安装开发工具,这些工具主要用于项目的下载和部署前期的准备,参考如下代码:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install git make figlet gawk flex bison

基础开发软件安装完毕之后,接下来从 Github/Gitee 上下载 BiscuitOS 项目源码,开发者为了加快下载速度可以使用 depth 参数,如果想看所有的代码提交,需要一定时间下载,参考如下代码:

git clone https://github.com/BiscuitOS/BiscuitOS.git --depth=1
or
git clone https://gitee.com/BiscuitOS_team/BiscuitOS.git --depth=1

  • arch 目录是架构相关的配置
  • board 目录是 BiscuitOS 支持硬件开发板相应的配置
  • boot 是 BiscuitOS 系统使用的 BOOTLOAD 相关的配置
  • config 目录下是 BiscuitOS 项目支持的部署开发环境
  • dl 目录是 BiscuitOS 项目部署过程中下载的源码压缩包
  • fs 目录是 BiscuitOS 使用的文件系统配置
  • kernel 目录是 BiscuitOS 部署内核相关的配置
  • package 目录是 BiscuitOS 支持的开源软件库配置
  • scripts 目录是 BiscuitOS 部署过程中使用的脚本
  • toolchain 目录是 BiscuitOS 部署使用的交叉编译工具配置
  • output 目录是 BiscuitOS 部署不同版本 Linux 开发环境的位置

BiscuitOS 项目里的目录大部分都是配置相关的,里面可能只包含一些 Kconfig 文件和 Makefile 文件,这些文件用户控制整个部署过程。由于 BiscuitOS 是基于 Kbuild 构建,那么可以使用 config 下面的配置文件直接部署 Linux 环境,也可以图形化的配置部署过程. 如果开发者是第一次部署, 那么需要执行如下命令完成开发工具的安装:

make linux-6.9-x86_64_defconfig 
make install

基础环境安装完毕之后,那么接下来就是部署 Linux 开发环境了,开发者可以在 configs 目录下选择一个进行部署,configs 目录里面全部是某个架构指定 Linux 的部署配置,例如选择 linux-6.9-x86_64_defconfig, 名字中的 6.9 部署表示 Linux 源码版本是 Linux 6.9,名字中的 x86_64 字段指明部署的架构是 X86-64 架构,开发者使用如下命令:

make linux-6.9-x86_64_defconfig

命令执行完毕之后,BiscuitOS 项目将部署基于 X86-64 架构的 Linux 6.9 源码开发环境,如果开发者还想添加其他开源软件一同部署,那么可以直接使用命令开启图形化配置,与 Linux 内核的 Kbuild menuconfig 一致:

make menuconfig

  • Porject Name 选项指明开发环境在 output 目录下的名字
  • Architecture configure 选项下面用于选择部署环境的架构
  • Board setup 选项下面用于选择与模拟硬件相关的信息
  • Bootloaders 选项下面用于选择 BiscuitOS 启动是采用的 Bootloader
  • DIY BiscuitOS/Broiler Hardware 选项下面用于自定义 BiscuitOS 运行时的硬件
  • package 选项下面用于添加第三方开源软件
  • Root-Filesystem 选项下面用于配置 BiscuitOS 系统根文件系统的配置
  • Compile toolchain 选项下面用于配置开发环境编译使用的交叉编译工具
  • linux 用于配置 Linux 的版本.

上图是 Kbuild 图形化配置界面,当开发者使用了 “make linux-6.9-x86_64_defconfig” 命令之后,Kbuild 已经自动配置上图相关的配置,开发者可以根据自己的需要进行修改。修改完毕之后使用如下命令进行一键部署:

make

部署完毕之后,开发者会看到 4 条信息,第一条信息指明了 Linux 开发环境的位置; 第二条信息指明 Linux 源码的位置; 第三条信息指明 Linux 开发手册; 第四条是 BiscuitOS 社区的链接. 接下来进入开发环境所在的目录,BiscuitOS 里所有的开发环境均放在 output 目录下:

  • Broiler-system: Broiler 目录支持自定义硬件模拟
  • busybox: BiscuitOS 系统使用的 BUSYBOX 源码目录
  • FreezeDir: BiscuitOS 系统数据盘挂载目录
  • HardStack.BS: 里面 BiscuitOS 代码仓库配置文件
  • Hardware: BiscuitOS 模拟的硬件,包括磁盘、内存等
  • linux: Linux 源码目录
  • package: 第三方开源软件目录
  • qemu-system: BiscuitOS 模拟底座 QEMU 源码目录
  • README.md: 开发环境说明文档
  • rootfs: BiscuitOS 系统使用的根文件系统
  • RunBiscuitOS.sh: BiscuitOS 运行脚本

BiscuitOS 一键部署的开发环境基本布局如上,其中 RunBiscuitOS.sh 是自动生成,只要在 BiscuitOS 项目顶层执行一次 make 命令,那么 RunBiscuitOS.sh 脚本就自动生成一次,脚本里面包含了 BiscuitOS 虚拟机启动的参数、硬件配置等. README.md 里描述了编译 Linux、Busybox 以及打包 ROOTFS 的命令,由于不同版本的 Linux 配置不同,无法将 README 里面的步骤自动化,因此开发者接下来需要参考 README.md 里面的内容完成最后的编译工作:

当执行完 README.md 里面的命令之后,可以启动 BiscuitOS,此时 BiscuitOS 系统作为一个虚拟机运行,开发者可以发挥自己的想象,任意修改 BiscuitOS 进行实践. 至此 BiscuitOS 安装成功!

部署 TIERED MEMORY

BiscuitOS 支持 TIERED MEMORY 开发环境的一键部署和实践,免去了复杂的源码查找、编写、编译、打包等操作,开发者可以参考如下步骤在 BiscuitOS 上实践 TIERED MEMORY, 首先使用 BiscuitOS 部署 TIERED MEMORY,其部署逻辑如下:

# 切换到 BiscuitOS 项目目录
cd BiscuitOS
# 选择开发环境,如果已经选择过可以跳过,这里与 linux 6.9 X86 为例
make linux-6.9-x86_64_defconfig
# 通过 Kbuild 选择需要部署的应用程序
make menuconfig

  [*] Package  --->
      [*] HETEROGENEOUS MEMORY MANAGEMENT  --->
          [*] TIERED MEMORY  --->
      [*] BiscuitOS Demo Code
          [*] Kernel Demo Code on BiscuitOS  --->


# 配置完毕保存,然后进行部署
make

接下来需要打开内核相关宏,参考如下命令:

cd BiscuitOS/output/linux-6.9-x86_64/package/BiscuitOS-kernel-default
# 配置内核
make menuconfig
# 打开以下宏
CONFIG_CXL_BUS=y
CONFIG_CXL_PCI=y
CONFIG_CXL_MEM_RAW_COMMANDS=y
CONFIG_CXL_ACPI=y
CONFIG_CXL_PMEM=y
CONFIG_CXL_MEM=y
CONFIG_CXL_PORT=y
CONFIG_CXL_SUSPEND=y
CONFIG_CXL_REGION=y
CONFIG_CXL_REGION_INVALIDATION_TEST=y
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_PMEM=m
CONFIG_FS_DAX=y
CONFIG_FS_DAX_PMD=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_LIBNVDIMM=y
CONFIG_BLK_DEV_PMEM=y
CONFIG_ND_CLAIM=y
CONFIG_ND_BTT=y
CONFIG_BTT=y
CONFIG_ND_PFN=y
CONFIG_NVDIMM_PFN=y
CONFIG_NVDIMM_DAX=y
CONFIG_NVDIMM_KEYS=y
CONFIG_DAX=y
CONFIG_DEV_DAX=y
CONFIG_DEV_DAX_PMEM=y
CONFIG_DEV_DAX_HMEM=y
CONFIG_DEV_DAX_CXL=y
CONFIG_DEV_DAX_HMEM_DEVICES=y
CONFIG_DEV_DAX_KMEM=m
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_RMEM=y
CONFIG_NUMA_BALANCING=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
CONFIG_ACPI_HOTPLUG_MEMORY=y
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y

# CONFIG_DEV_DAX_KMEM 必须是 m
# 宏打开完毕之后,保存退出,执行如下命令重编译内核
make module
make module_install

最后部署实践案例和所需的工具

# 部署完毕之后,首先部署 NUMACTL
cd BiscuitOS/output/linux-6.9-x86_64/package/BiscuitOS-TIERED-MEMORY-default
# 部署依赖工具
make prepare
# 部署实践代码
make download
make build
# 运行 BiscuitOS

系统启动之后,直接运行 RunBiscuitOS.sh 脚本,里面包含了实践所需的所有命令。以上便是 TIERED MEMORY 部署全部内容.