小编Tey*_*ey'的帖子

为Vec <T>添加实现后,为什么Rust编译器不使用预期的特征实现?

我正在尝试实现一个能够从文件中提取不同类型的值的阅读器.有一个File表示文件资源的结构(以及访问其内容的方法),以及一个Reader可以根据结果类型提取值的特征.(虚拟)实现看起来像这样(playground):

use std::io::Result;

mod file {
    use std::io::Result;

    pub struct File {/* ... */}

    pub trait Reader<T> {
        fn read(&mut self) -> Result<T>;
    }

    impl Reader<u32> for File {
        fn read(&mut self) -> Result<u32> {
            // Dummy implementation
            Ok(10)
        }
    }

    impl Reader<u8> for File {
        fn read(&mut self) -> Result<u8> {
            // Dummy implementation
            Ok(0)
        }
    }

    impl Reader<bool> for File {
        fn read(&mut self) -> Result<bool> {
            // Dummy implementation
            Ok(false)
        } …
Run Code Online (Sandbox Code Playgroud)

traits rust

7
推荐指数
1
解决办法
245
查看次数

如何将设备树Blob添加到Linux x86内核启动?

我的自定义开发板基于x86,并且不使用供应商内核驱动程序就无法轻松控制与其连接的电子组件之一(主要是通过SPI)(如果我不使用它,供应商将无济于事) 。该模块需要一些从设备树中获取的配置参数。我相信该模块主要用于设备树很常见的ARM平台上。

在x86上,通常不需要设备树,因此在Linux内核编译过程中默认情况下将其禁用。我更改了配置以启用它,但是我找不到将设备树BLOB放入启动映像的方法。内核源代码中只有一个用于x86体系结构的DTS文件,但是似乎根本没有使用它,因此没有帮助。

内核文档中,我知道我需要将其放在x86实模式内核标头setup_data字段中,但我不知道如何以及何时执行此操作(在内核构建时?在构建Bootloader时?)。我应该直接破解文件吗?arch/x86/boot/header.S

现在,我已经用硬编码值替换了模块配置,但是使用设备树会更好。

x86 linux-kernel embedded-linux bootloader device-tree

5
推荐指数
1
解决办法
2725
查看次数