小编Sam*_*nko的帖子

具有平台驱动程序和字符设备接口的设备特定数据结构

我正在努力理解平台设备驱动程序与字符设备接口之间的链接以及将数据存储在特定于设备的数据结构中.

我创建了一个结构来跟踪与我的设备相关的数据,然后将它添加到probe函数的devices结构中:

dev_set_drvdata(dev, data_struct);
Run Code Online (Sandbox Code Playgroud)

我还保留了全球副本data_struct.

我注册了一个misc设备,以便我可以mmap()通过ioctl()命令访问设备.如果我想访问此设备data_struct,目前我通过全局副本访问它.是否有另一种方法通过inodefile指针访问我存储在设备结构中的数据?

我目前只允许一个设备实例,但我想确保我正确实现这一点,以便将来可能有多个设备使用相同的驱动程序.

driver kernel-module linux-device-driver linux-kernel embedded-linux

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

C++ Butterworth N阶滤波器设计

我正在寻找一个计算Butterworth Nth滤波器设计系数的函数,如Matlab函数:

[bl,al]=butter(but_order,Ws); 
Run Code Online (Sandbox Code Playgroud)

[bh,ah]=butter(but_order,2*bandwidth(1)/fs,'high');
Run Code Online (Sandbox Code Playgroud)

我发现了许多计算二阶但不是N阶的例子(例如我使用的是18阶...). - 遗憾的是我对DSP没有任何了解.

您知道任何库或方法来轻松实现此方法吗?当我知道订单时,切断频率和采样率.我只需要得到B(分子)和A(分母)的向量.

还要求该方法在不同平台下工作 - Windows,Linux,...

提前致谢.

c++ filtering signal-processing

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

循环遍历文件并在C中打印文件属性

我是C语言编程的新手.我需要这个程序遍历文件夹中的所有文件并为每个文件打印这些属性.此时它正在打印文件夹的属性.

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <dirent.h>

int main(int argc, char *argv[])
{
    DIR *dp;
    struct stat file_stats;

    if (argc != 2) {
        fprintf(stderr, "Usage: fstat FILE...\n");
        return EXIT_FAILURE;
    }

    if ((stat(argv[1], &file_stats)) == -1) {
        perror("fstat");
        return EXIT_FAILURE;
    }

    dp = opendir("./");
    if (dp == NULL) {
        perror("couldn't open directory");
        return EXIT_FAILURE;
    }

    while (readdir(dp)) {
        printf("filename: %s\n", argv[1]);
        printf(" device: %lld\n",
                file_stats.st_dev);
        printf(" protection: %o\n",
                file_stats.st_mode);
        printf(" number of hard links: %d\n", …
Run Code Online (Sandbox Code Playgroud)

c linux posix while-loop

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

lsof:socket括号内的数字代表什么

当我在名称列中运行 lsof 命令时,对于套接字,一些数字出现在括号中,如下所示。这是什么意思?

 command    pid        user      fd                 Name
 process    8197       root      29                 socket:[3050474]
Run Code Online (Sandbox Code Playgroud)

linux lsof

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

如何从cdev获取设备

我正在编写一个内核模块,它将分配一些连贯的内存并返回相应的虚拟和物理地址.

我正在注册模块cdev,分配空间,dma_alloc_coherent()我想使用mmap dma_common_mmap().

dma_common_mmap()需要一个指针struct device:我怎么能得到它?

device-driver linux-kernel dma

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

主线 Linux 内核中的 USB MTP 小工具驱动程序发生了什么?

我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。

我知道Android从大容量存储设备切换到MTP设备已经有一段时间了,并且在一些Android存储库中找到了MTP设备驱动程序的源代码。

然而,在主线内核代码中,我没有找到该特定文件,也没有找到等效文件。

但我确实找到了2010 年提交给 RFC 的MTP 小工具驱动程序的补丁。

问题:

为什么主线内核不接受这个补丁,也不提供MTP小工具的任何其他实现,但Android内核提供了它?

这是因为技术困难还是其他原因,比如有更好的方法?

如果我想在我的设备上启用 USB MTP 小工具(一个带有运行 2.6.37 内核的 TI OMAP3730 SoC,另一个带有运行 3.14 内核的 NXP/Freescale IMX6 SoC),我应该使用哪个版本的 MTP 小工具进行向后移植?

linux android linux-kernel mtp

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

何时以及如何创建进程控制块

#include <stdio.h>

int main(void)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

何时以及如何为上述程序创建进程控制块?

例如,在上述程序进入运行状态之前,内核必须为此进程分配一块pcb。

我在哪里可以找到对内核进行的各种启动系统调用,以便我可以将这些调用跟踪到内核中。

我在上面的程序上运行了一个 strace,但我无法得到它。

execve("./a.out", ["./a.out"], [/* 42 vars */]) = 0
brk(0)                                  = 0x9aaf000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or      directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78df000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=112037, ...}) = 0
mmap2(NULL, 112037, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb78c3000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such …
Run Code Online (Sandbox Code Playgroud)

c linux assembly

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

为什么 docker 不能在 3.10 之前的内核上运行?

Docker 通常不能在 3.10 之前的 Linux 内核上运行。(在某些情况下,它也可以在3.8内核中运行)。

新内核中哪些功能在旧内核中缺失,导致 docker 无法在其中运行?

linux docker linux-containers

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

Eudyuptula Task3 的意思是“当您提供创意示例时,特别是在您当地的酒吧以解说舞的形式完成时,会得到额外的饼干。”

我正在尝试通过 eudyptula 挑战,但我很难理解这条线

“当您提供有创意的例子时,额外的饼干,尤其是在当地酒吧的解说舞中。”

什么是预期?

以下是对上下文的完整挑战——


这一轮的任务是: – 从任务 02 中取出内核 git 树并更改 Makefile 以修改 EXTRAVERSION 字段。以运行内核(在修改 Makefile、重建和重新启动后)在版本字符串中包含字符“-eudyptula”的方式执行此操作。– 显示启动此内核的证据。“当您提供有创意的例子时,额外的饼干,尤其是在当地酒吧的解说舞中。”

这是一个笑话,还是某种谜题:D

linux eudyptula-challenge

5
推荐指数
0
解决办法
126
查看次数

在 Linux 中,符号链接的值可以长于 PATH_MAX 吗?

每个幼儿园的孩子都知道,Linux 中的文件路径不能超过PATH_MAX字符。

但是在我的系统上试验,命令

ln -s $(for i in {0..1024}; do printf dir/../; done)foobar foobar1
Run Code Online (Sandbox Code Playgroud)

失败并显示错误消息File name too long

我不太明白为什么。这里没有长文件名,只有文件的预期内容foobar1很长。甚至还没有人试图遍历符号链接的内容以到达目标。当然,我可以拥有一个内容远大于PATH_MAX.

另一方面,像这样的命令

for i in {0..4096}; do ln -s $i $(expr $i + 1); done
Run Code Online (Sandbox Code Playgroud)

成功。只有当我试图遍历链时,系统才会抱怨。

但我对遍历任何东西都不感兴趣。我正在编写必须读取符号链接值(无需遍历)的软件,我想知道是否需要考虑很长的值。

在 Linux 中哪里记录了这是不允许的?或者它是否依赖于文件系统实现并且可以更改?

linux filesystems

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