0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为FreeBSD构建一个基本的Hello World概念验证内核模块

工程师邓生 来源:Rust语言中文社区 作者:Koalr 2022-09-07 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

使用 Rust 编写 FreeBSD 内核模块

目前主流的操作系统内核都是用 C/C++ 编写的,这些语言在避免常见的安全问题方面捉襟见肘。Rust 等现代语言默认提供更好的安全保证,并防止许多常见的内存安全漏洞。

在这篇文章中,我们将简要介绍 Rust 为实现这一安全目标所做的努力,并为 FreeBSD 构建一个基本的Hello World概念验证内核模块。

模式匹配兼容性策略

当使用枚举定义不同类型的数据时会非常方便,但是作为库的作者需要考虑的更多一点,比如 enum 字段拓展后的兼容性问题。假设开始的定义为:

而后增加了Http2



如何编写库代码才能用使用者感知到这个变化而不产生 breaking change 呢,这里作者结合自己编写库的经验给出了三个场景下的解决方案。分别是:

Non-exhaustive enums

Translating typical Error inheritance

Enums with an “open-ended” variant

学习使用 Rust 迭代器和组合子

Rust 的迭代器搭配组合器非常有趣,可以让你的代码更简洁、更实用。这篇文档侧重于如何借助迭代器使您的代码更易于阅读或重构。 ReadMore:https://kerkour.com/rust-combinators






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • freebsd
    +关注

    关注

    0

    文章

    37

    浏览量

    11089
  • 内核模块
    +关注

    关注

    0

    文章

    10

    浏览量

    3761
  • Rust
    +关注

    关注

    1

    文章

    240

    浏览量

    7481

原文标题:【Rust日报】2022-08-06 使用 Rust 编写 FreeBSD 内核模块

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux内核模块的加载机制

    init_module,或者更现代的finit_module。 这些系统调用将模块的二进制内容读入内核空间,并进行系列检查。 这些检查包括如下: 首先是验证
    发表于 11-25 06:59

    VS Code运行 pytest_hello_world.py

    VS Code运行 pytest_hello_world.py
    的头像 发表于 11-24 00:33 343次阅读

    【迅工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解

    【迅工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解
    的头像 发表于 11-21 13:25 664次阅读
    【迅<b class='flag-5'>为</b>工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568<b class='flag-5'>内核模块</b>符号导出详解

    【OK3506-S12Mini试用评测】编译你的第一个内核模块

    将以 OK3506 开发板例,介绍如何在 Ubuntu 虚拟机中使用提供的交叉编译工具链编译简单的 hello.ko 内核模块,并将其
    发表于 10-24 21:00

    【Milk-V Duo S 开发板免费体验】2 - 安装编译环境并测试Hello world!

    其中的gcc/riscv64-linux-musl-x86_64对我们才有用。 测试Hello world 程序编译 以hello-world例,进入该例子目录直接执行 make 即
    发表于 07-07 21:18

    RK3568开发板内核模块实现-查看模块信息

    在驱动模块加载之后,使用“modinfo helloworld.ko”命令可以获得模块的信息,包括模块作者,模块说明,模块支持的参数等等。
    发表于 05-16 11:18

    RK3568开发板内核模块实现-模块加载与卸载

    有了内核模块以后,我们要如何使用呢?编译驱动有俩种方式,那 Linux 驱动的运行方式也肯定有俩种。种就是将驱动编译进内核,这样 Linux 系统启动后会自动运行程序。第二种就是将驱动编译成
    发表于 05-14 10:56

    RK3568开发板内核模块实现-编译模块

    内核模块是以 ko 后缀名,如下图(图 4-8)所示: 输入“make clean”命令清除编译文件,如下图(图 4-9)所示:
    发表于 05-12 11:09

    RK3568开发板内核模块实现-编写 Makefile

    编译驱动程序还需要使用 Makefile 文件。我们 helloworld.c 编写简单的 Makefile, Makefile 文件和源文件 helloworld.c 位于同
    发表于 04-24 13:36

    在mimxrt1170_evk调试hello_world出现硬件传输错误怎么解决?

    我按照视频在 cm7 中调试hello_world示例,我的链接服务器正在运行, debug prove 的 FW 也是最新的。 但是我仍然收到这个错误。 16:status-poll 中的目标
    发表于 03-25 07:31

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之带参数的驱动模块

    命令行或配置文件进行配置。驱动模块参数提供了种动态配置和调整驱动行为的方式。 在Linux内核中,驱动模块参数通常使用module_param宏进行定义和注册。下面是
    发表于 03-13 09:52

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之helloworld驱动

    )))将cleanup_module()函数与退出函数进行关联。 在Linux内核卸载模块时,会调用cleanup_module()函数,它实际上是出口点函数。通过将module_
    发表于 03-12 10:35

    飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之带参数的驱动模块

    命令行或配置文件进行配置。驱动模块参数提供了种动态配置和调整驱动行为的方式。在Linux内核中,驱动模块参数通常使用module_param宏进行定义和注册。下面是
    发表于 03-12 10:34

    飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之helloworld驱动

    关联。在Linux内核卸载模块时,会调用cleanup_module()函数,它实际上是出口点函数。通过将module_exit()定义
    发表于 03-12 10:15

    使用MCUXpresso for VS Code插件开发Zephyr的hello world

    本期来到Zephyr实战经验演练,小编带着大家起使用MCUXpresso for VS Code插件来开发属于Zephyr的hello wor
    的头像 发表于 01-03 09:21 1783次阅读
    使用MCUXpresso for VS Code插件开发Zephyr的<b class='flag-5'>hello</b> <b class='flag-5'>world</b>