洛佳 组件化驱动、ROM运行环境与RustSBI第三届中国Rust开发者大会 组件化驱动、ROM运行环境与RustSBI 洛佳 华中科技大学 网络空间安全学院 2023年6月 本次演讲…… 关于我…… • 笔名洛佳 • 华中科技大学网络空间安全学院研一 在读(导师:周威老师) • 研究方向:物联网安全、系统安全 • 热爱开源,乐于尝试新技术 • RustSBI项目维护者 • 致力于向科研、教学和产业界推广 Rust语言 Rust语言 汲取Rust嵌入式和操作系统生态经验,总 结而成的新一代驱动开发方法。动、静态 基地址结合,高灵活性;一次开发,同时 复用于嵌入式、固件和内核中。 # 组件化驱动 合理利用嵌入式、桌面和服务器芯片片内 ROM代码,构造零开销的运行环境。进一 步地,可完成安全引导、安全镜像分发和 通常的嵌入式开发等功能。 # ROM运行环境 # 2023年的RustSBI 作为RISC-V 作为RISC-V SBI固件的RustSBI,2023年 将与UEFI、LinuxBoot擦出火花。在驱 动、环境和SBI接口的基础上,提供快速 实现具体引导流程的解决方案。 目录 组件化驱动 第 01 部分 什么是组件化驱动? 运 用 生 命 周 期 、可 变 性 等 最 新 的 编 程 语 言 理 论 成 果 ,构 造 适 应 开 发 需 求 的 驱 动 程 序 。可 结 合 过 程 宏 等 工0 码力 | 21 页 | 3.12 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0容,都将其追加(不 24/562Rust 程序设计语言 简体中文版 会覆盖其原有内容)到一个字符串中,因此它需要字符串作为参数。这个字符串参数应该是可 变的,以便 read_line 将用户输入附加上去。 & 表示这个参数是一个 引用(reference),它允许多处代码访问同一处数据,而无需在内存中 多次拷贝。引用是一个复杂的特性,Rust 的一个主要优势就是安全而简单的操纵引用。完成 当 不过,过长的代码行难以阅读,所以最好拆开来写。通常来说,当使用 .method_name() 语法 调用方法时引入换行符和空格将长的代码行拆开是明智的。现在来看看这行代码干了什么。 之前提到了 read_line 会将用户输入附加到传递给它的字符串中,不过它也会返回一个类型为 Result 的值。Result 是一种枚举类型,通常也写作 enum,它可以是多种可能状态中的一个。 我们把每种可能的状态称为一种 枚举成员(variant)。 IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1")); 我们直接将数据附加到枚举的每个变体上,这样就不需要一个额外的结构体了。这里也很容易 看出枚举工作的另一个细节:每一个我们定义的枚举变体的名字也变成了一个构建枚举的实例 的函数。也就是说,IpAddr::V4() 是一个获取0 码力 | 562 页 | 3.23 MB | 27 天前3
Rust 程序设计语言简体中文版字符串中。read_line 的工作是,无论用户在标准输入中键入什么内容,都将其追加(不会覆 盖其原有内容)到一个字符串中,因此它需要字符串作为参数。这个字符串参数应该是可变 的,以便 read_line 将用户输入附加上去。 & 表示这个参数是一个 引用(reference),它允许多处代码访问同一处数据,而无需在内存中 多次拷贝。引用是一个复杂的特性,Rust 的一个主要优势就是安全而简单的操纵引用。完成 不过,过长的代码行难以阅读,所以最好拆开来写。通常来说,当使用 .method_name() 语法 调用方法时引入换行符和空格将长的代码行拆开是明智的。现在来看看这行代码干了什么。 之前提到了 read_line 会将用户输入附加到传递给它的字符串中,不过它也会返回一个类型 为 Result 的值。 Result 是一种枚举类型,通常也写作 enum。枚举类型变量的值可以是多 种可能状态中的一个。我们把每种可能的状态称为一种 IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1")); # } 我们直接将数据附加到枚举的每个成员上,这样就不需要一个额外的结构体了。这里也很容易 看出枚举工作的另一个细节:每一个我们定义的枚举成员的名字也变成了一个构建枚举的实例 的函数。也就是说,IpAddr::V4() 是一个获取0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust语言核心竞争力-庄晓立Very big data in the heap ... ptr cap len ptr cap len 栈(Stack) 堆(Heap) 浅拷贝(Shallow Copy) 附加Move语义 Drop & RAII 变量(bindings)和资源(resources)的关系 Resources: memories, objects, connections, files self) -> &'a i32 { &self.x } struct Foo<'a, T: 'a> { x: &'a T, } Borrow Checker Borrowck是编译器内部组件,负责在 “编译期” 追踪审查引 用的有效性,是保证内存安全的重要功臣。运行时零开销。 fn main() { let mut v = vec![0, 1, 2, 3, 4, 5, 6];0 码力 | 51 页 | 1.09 MB | 1 年前3
Comprehensive Rust(简体中文) 202412的使用。课程内容 包括在 Chromium 的 gn 编译系统中使用 Rust,引入第三方 crate,以及与 C++ 的互操作性。 您需要能够构建 Chromium。为了提高速度,建议使用调试、组件构建方式,其他构建方式也可以使用。确 保所构建的 Chromium 浏览器可以正常运行。 裸机 Rust 深入探究裸机 Rust 课程为期一天,旨在介绍如何使用 Rust 进行裸机(嵌入式)开发。其中涵盖了微控制 chrome out/Debug/chrome # or on Mac, out/Debug/Chromium.app/Contents/MacOS/Chromium (建议使用调试 build 组件,以缩短迭代时间。这是默认值!) 如果您不具备这点,请参阅如何构建 Chromium。注意:设置 build Chromium 需要花些时间。 此外,我们还建议您安装 Visual Studio 建议尝试操作一下 CXX。这有助于您更好地理解 Rust 在 Chromium 中的灵活性。 Some things to try: • 从 Rust 回调到 C++。您需要执行以下操作: – 创建一个附加头文件,且您可以从 cxx::bridge 对其进行 include! 操作。您需要在这个 新的头文件中声明要调用的 C++ 函数。 – 创建一个 unsafe 代码块,用于调用此类函数,也可以在#[cxx::bridge]0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 语言学习笔记通过其所有权机制,严格控制拥有和借用关系,来保证程序的安全,并且 这种安全是在编译期可计算、可预测的。但是这种严格的控制,有时也会带来 灵活性的丧失,有的场景下甚至还满足不了需求。 因此,Rust 标准库中,设计了这样一个系统的组件:Cell, RefCell,它们弥 补了 Rust 所有权机制在灵活性上和某些场景下的不足。同时,又没有打破 Rust 的核心设计。它们的出现,使得 Rust 革命性的语言理论设计更加完整, 更加实用。 可执行 .borrow() 操作,即 foo.borrow()。操作的结果,我们得到 了一个类型为 &U 的新引用。 Borrow 可以认为是 AsRef 的严格版本,它对普适引用操作的前后类型之间 附加了一些其它限制。 Borrow 的前后类型之间要求必须有内部等价性。不具有这个等价性的两个类 型之间,不能实现 Borrow。 AsRef 更通用,更普遍,覆盖类型更多,是 Borrow 的超集。0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust OS 开源操作系统训练营的教与学-0615-李明开源训练营的总体规划和教学实践 教什么?怎么学? 在读本科生 在读研究生 已工作 52% 18% 30% Rust 语言编程 RISC-V 体系结构 rCore/uCore 大实验 ArceOS 组件化OS Rust for Linux Hypervisor 虚拟化 面向高校和企业 工程师开放报名 (2周) 四个阶段的培训课程 逐级培养选拔 (12周) 50% 20% 8% 完成94道Rustlings编程题 (2周) OS 大实验 rCore/uCore 内核 二阶段 完成5个OS编程大实验 (2周) ArceOS 组件化 操作系统 三阶段 Hypervisor 虚拟化技术 四阶段 完成1个OS组件或驱动 (4周) 完成1个硬件虚拟化适配 (4周) 台阶式向上迈进 训练营的教学/实习安排 • 春夏季训练营 • 4.1 ~ 6.30 共3个月 训练营的学习情况统计 是否学习过OS课程? 是否学习过Rust编程? 90%以上是初学Rust 75%以上是初学OS 训练营培养 Rust OS 人才的三个方向 Rust for Linux 驱动开发 组件化OS 内核开发 多核异构处理器 虚拟化开发 Rust OS 产学研用生态建设 用 研 学 产 智能网联汽车操作系统,工业安全操作系统, 机器人操作系统,物联网AIoT等 鹏城实0 码力 | 26 页 | 2.62 MB | 1 年前3
Rust在Substrate 开发框架中的使用Substrate 开发框架 中的使用 内容 ● Rust 简介 ● Rust 特性 ● Why blockchain ● 什么是Substrate ● Substrate Runtime 组件 ● Substrate 应用开发 Bugs from Chrome Rust 简介 Performance Safety C, C++ Java JS, Python Rust 简介 app chain特点: ● Runtime 安全有开发者完全负责 ● 获取链上所有状态 ● 高度定制化,包括共识,通证,交易 方式 一个开源、模块化、可扩展的区块链开 发框架,涵盖了区块链的核心组件: ● Database layer ● P2P ● PoS ● Transaction pool ● Full / light client ● Runtime modules Substrate简介 Substrate Runtime Module Library 提供一系列的即插即用的功能,如 资产管理、共识、合约、自治等。 你也可以开发自己的Runtime组 件。 Substrate Runtime 组件 Substrate Runtime Module Library (SRML) assets aura balances consensus contract council democracy0 码力 | 37 页 | 967.22 KB | 1 年前3
KCL: Rust 在编译器领域的实践与探索LSP 极大的提升了用户体验 端到端响应时间: 6s -> 100 ms 04 更多的探索 CompilerBase: 通用编译器组件 IDE 友好的编译器架构 RustCodeBook: Rust源码解读 Compiler Base: 更通用的编译器组件 KCL Source Code AST LLVM IR Native/WASM Smart Contract Source0 码力 | 25 页 | 3.50 MB | 1 年前3
使用Rust与ClickHouse构建高效可靠的日志系统属于腾讯专有云PaaS平台(TCS) • 承接TCS底座日志 • 从Loki=>Menicus • 提供日志的搜索/报警/处理等功能 系统介绍 • 为什么放弃 Loki • 资源占用过大 • 统计/计算能力比较弱 • 组件过多,排查问题比较困难 • 商业使用不友好的开源协议 • 为什么选择Mencius+ClickHouse • 存储计算与业务分离 • 计算/统计能力更强 • 资源占用更小,性能更好 • 更友好的开源协议0 码力 | 19 页 | 2.66 MB | 1 年前3
共 14 条
- 1
- 2













