VirtualBox修改

代码基于官方下载的virtualbox 7.0.0 正式版

windows编译

未能编译成功

强制取消cpuid中的虚拟机标记

src/VBox/VMM/VMMR33/CPUMR3CpuId.cpp文件的cpumR3CpuIdSanitize函数中

pStdFeatureLeaf->uEcx |= X86_CPUID_FEATURE_ECX_HVP; //<==add this
  /* Mask out PCID unless FSGSBASE is exposed due to a bug in Windows 10 SMP guests, see @bugref{9089#c15}. */

RUST 学习

环境

rust环境支持所有的都放在用户权限的目录,好处就是尽可能不依赖平台的限制,比如平台默认安装的版本可能比较老了。库版本的代码和编译中间文件也如此,好处就是编译速度会变快,缺点就是有些库可能因为 版本的关系,造成部分的不兼容。比如某个项目依赖A的版本从1.1(真实的支持版本)的api,但项目的依赖直接写了1.0的版本(非严格判断), 然后正好其他项目有一个1.0的版本依赖的缓存在本地,这时候编译 就会出现问题。这种方式在同类解决方案中也是相同的存在。 继续阅读RUST 学习

rust-osdev 笔记

bootloader部分

由于涉及到启动,引导部分,所以需要从模拟器启动,比如qemu启动:

qemu-system-x86_64 -hda boot-bios-basic_example.img

bootloader的例子中配置workspace,然后配置runner中的包为workspace的包名,通过编译workspace项目 来简化编译,启动盘生成,模拟器运行。

bootloader的create_disk_images和启动qemu-system-x86_64都需要使用root

cargo kbuild #构建内核
cargo kimage #生成启动盘
cargo krun #运行qemu并且设置磁盘为生成的启动盘

#![no_std]

代码中使用no_std指示不包含标准库函数,但这样编译的时候就确实了panic函数。于是需要手动写个panic函数

#![no_main]

表示代码中没有main函数,可以适用entry_point宏将指定的函数作为入口函数,如:

entry_point!(kernel_main);