我想了解 Zircon 的(Fuchsia OS 内核)如何在 ARM64 中分配页面,所以我找到了 mmu.cpp https://fuchsia.googlesource.com/fuchsia/+/4277d3203daa0fc5e4dd1625cf96891dd9882f44/zircon/zircon/ .cc#328
但它只是:
if (likely(!test_page_alloc_func_)) {
status = pmm_alloc_page(0, &page, paddrp);
}
Run Code Online (Sandbox Code Playgroud)
从哪里来pmm_alloc_page:https : //fuchsia.googlesource.com/fuchsia/+/4277d3203daa0fc5e4dd1625cf96891dd9882f44/zircon/kernel/vm/pmm.cc#61
此处定义的 pmm 节点:https : //fuchsia.googlesource.com/fuchsia/+/4277d3203daa0fc5e4dd1625cf96891dd9882f44/zircon/kernel/vm/pmm_node.h说:
// per numa node collection of pmm arenas and worker threads
class PmmNode {
Run Code Online (Sandbox Code Playgroud)
我在谷歌和 Fuchsia 文档中都找不到 PMM 区域是什么。有人可以向我澄清这些概念吗?
我想了解在 Zircon 内核上的 ARM64 中如何处理 MMU
根据ARM 文档,线程 ID 寄存器类似于TPIDR_EL0或TPIDR_EL1,
提供存储软件线程和进程 ID 的位置,以用于操作系统管理目的。这些寄存器对处理器行为没有影响。
为什么有人想要将线程 ID 存储在特殊寄存器中?ARM 处理器是否要求线程在内存中拥有特殊的结构,就像 MMU 一样?线程对于 ARM 来说是特殊的东西吗?ARM 期望在某个地方找到它吗?或者我可以在不使用这个寄存器的情况下(有效地)实现线程吗?
我这么问是因为我在 Fuchsia OS 的 Zircon 内核上找到了这段代码:
static inline void arch_set_current_thread(Thread* t) {
__arm_wsr64("tpidr_el1", (uint64_t)&t->arch_.thread_pointer_location);
__isb(ARM_MB_SY);
}
Run Code Online (Sandbox Code Playgroud)
在启动时,它创建一个线程并将其指针存储在tpidr_el1
我想下载 Fuchsia 的源代码。
我输入了在fuchsia.dev-s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash上找到的curl 。
我有''base64'' is not recognized as an internal or external command, operable program or batch file.
我下载了base64工具但没有成功。
我应该怎么做才能使这个命令起作用?
我试图获取 Google Fuchsia 源代码,但我不断遇到以下错误:
ERROR: 'git fetch -p origin' failed:
stdout:
stderr:
fatal: unable to access 'https://fuchsia.googlesource.com/third_party/github.com/google/cppdap/':
gnutls_handshake() failed: The TLS connection was non-properly terminated.
command fail error: exit status 128
Run Code Online (Sandbox Code Playgroud)
因此,下载永远不会完全完成,并且我有一个不完整的 Fuchsia 存储库克隆。
我知道我的 Git 安装没问题,因为我可以通过 https 访问 GitHub 存储库(我经常这样做)。
我使用的是 WSL2(Ubuntu 20.04 LTS)。
我该如何修复这个错误?
最初我以为Fuchsia是第一个广泛使用基于功能的安全性的内核,但是看起来在seL4中它们也是主要的安全性原语。
使用 $ nano ~/.bash_profile 更新了我的 shell 脚本,添加了以下行 export PATH=~/directory/.jiri_root/bin:$PATH source ~/directory/scripts/fx-env.sh
我遇到的问题是,每当我尝试运行 fx 命令时,我都会收到一条错误消息“无法在目录的父目录中找到平台源代码树”。我必须使用 $ fx set Product.board 但显示错误。
我用Google搜索了很多关于L4微内核的信息,发现L4上的资源非常少.