小编Fra*_*ayr的帖子

在 VS Code 中包含用于智能感知的 Linux 内核头文件

我想使用 VS code 来开发 Linux 内核模块。我已将路径添加到浏览路径中,但不幸的是它不起作用。这是我的c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${HOME}/Workspaces/kernel-sources/mainline/linux/include",
                "${workspaceRoot}"
            ],
            "defines": [],
            "intelliSenseMode": "clang-x64",
            "browse": {
                "path": [
                    "${HOME}/Workspaces/kernel-sources/mainline/linux/include/",
                    "${workspaceRoot}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 3
}
Run Code Online (Sandbox Code Playgroud)

我想包含类似内容#include <linux/miscdevice.h>,但智能感知解析器无法找到该文件。我将解析器引擎更改为“标签解析器”,因为新的默认解析器无法递归包含文件,因为它们位于内核源代码中。有什么想法如何配置我的智能感知吗?

我在 ubuntu 16.04 上使用 vs code 1.19

intellisense linux-kernel visual-studio-code

4
推荐指数
1
解决办法
1万
查看次数

VHDL - 为什么不允许在生成循环中使用变量

我知道,变量只允许在进程中使用,但为什么不允许在生成循环中使用它们.合成这样的构建体没有问题,因为它们之前被评估过.

没有这个限制,代码可以更具可读性.

lbl1: for i in data_out'range generate
    lbl2a: component comp_a 
        port map(
            clk => clk,
            out => out(0)(i)
            in_a => data_in(i*w + offset to i*w + w + offset));
    lbl2b: component comp_b
        port map(
            clk => clk,
            out => out(1)(i)
            in_b => data_in(i*w + offset to i*w + w + offset));
    .
    . 
    . 
    lbl2n: component comp_n
        port map(
            clk => clk,
            out => out(n)(i)
            in_n => data_in(i*w + offset to i*w + w + offset));
end generate lbl1; …
Run Code Online (Sandbox Code Playgroud)

vhdl

3
推荐指数
1
解决办法
871
查看次数

如何为 sysfs 属性创建大量类似的函数?

我的 FPGA 中有一个通用 AXI 从设备,带有多个 I/O 寄存器。我想使用 sysfs 接口访问我的寄存器。对于我想要访问的每个寄存器,我创建一个_show和 一个_store函数,但这会需要很多代码。

static ssize_t writereg0_store(struct device *dev, struct device_attribute                *attr, const char *buf, size_t count) {
    struct axi_register_driver *drv = dev_get_drvdata(dev);
    u32 val;

    if (kstrtou32(buf, 10, &val) != 0)
        return -EINVAL;

    iowrite32(val, drv->reg_base + WRITE_OFFSET + 0);

    return count;

}

static ssize_t writereg0_show(struct device *dev, struct device_attribute *attr, char *buf) {
    struct axi_register_driver *drv = dev_get_drvdata(dev);

    u32 reg;
    reg = ioread32(drv->reg_base + WRITE_OFFSET + 0);

    return sprintf(buf, "0x%x\n", …
Run Code Online (Sandbox Code Playgroud)

c linux linux-device-driver linux-kernel sysfs

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