问题标签 [block-device]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2021 浏览

memory-management - 了解嵌入式系统中的 zram 概念

我是 zram 概念的新手。

基本上我了解 zram 设备的内存分配和嵌入式系统中的使用。

我用谷歌搜索找到可以分配给 disksize 的最大大小,/sys/block/zram/disksize但它是徒劳的。

我有几个基本的疑问。

使用 zram 的过程是

基本上建议的磁盘大小是使用总 RAM 内存的 25%。我的设备的总 RAM 大小为 512MB。

  1. 什么是maximum size limit可以/sys/block/zram0/disksize 分配的?

  2. 从哪里为zram分配内存是从emmc还是RAM?

  3. 如果我为 /sys/block/zram0/disksize 分配 4GB 而不是 3.9GB,则 mkswap 无法创建交换磁盘,为什么?
  4. zram 也是基于 RAM 的块设备,可以通过一些关于基于 RAM 的块设备的说明来实现吗?
0 投票
0 回答
254 浏览

linux-kernel - 列出内核模块中的块设备

我正在编写一个内核模块,其中列出了我将用于跟踪的块设备及其相应的 dev_t。

以下是结构block_device

bd_list 是一个包含系统中所有块设备的链表。all_bdevs ( fs/block_dev.c ) 是列表的头部,但问题是它没有被导出。有没有办法在内核模块中迭代块设备?

0 投票
3 回答
9316 浏览

linux - 如何将 bcache 设备恢复为常规设备

我的笔记本电脑上有一个 20 GB SSD 设备,我决定尝试使用 bcache。它似乎有效,但一段时间以来,我在启动时遇到错误:

我想我可以尝试修复它,但我已经决定我可能最好还是禁用 bcache - 我对此了解的不够多,如果出现问题,我会冒丢失数据/头发的风险,我想我会更好关闭使用分区作为交换更快的休眠。

我的问题是,如何在不重新格式化支持设备的情况下安全地停止在设备上使用 bcache?

我使用 /dev/sda7 作为我的后备设备,使用 /dev/sdb2 作为缓存设备(/dev/sdb1 是 root)。

如果重要的话,我正在运行内核为 3.13.0-21-generic 的 Ubuntu 14.04。

更新:我本质上是在寻找一种解决方案来恢复 make-bcache -B 所做的更改。FWIW,我最终通过将所有内容移动到新分区并删除旧分区来“解决”这个问题(请参阅下面的评论),但如果有人有实际的解决方案,我会留下这个问题。

0 投票
1 回答
343 浏览

bash - 将停止和恢复命令的所有输出重定向到文件或块设备

如何重定向在bash(4.2.45(1)-release (x86_64-pc-linux-gnu))中运行的进程的输出SIGSTOP(通常在基于 Debian 的系统和可能的其他系统上使用 Strg+Z 发送)并以fgbg。考虑以下示例,到目前为止我尝试过的仍然将输出打印到控制台:

bg而不是相同fg

请注意,将所有输出重定向到文件中已经回答了谁重定向输出的问题。

0 投票
1 回答
658 浏览

linux - 为什么内核使用默认块驱动程序而不是我的驱动程序代码?

我编写了一个块驱动程序来创建一个虚拟块设备(sbd0)。我为那个块设备注册了所有设备操作:(参考include/linux/blkdev.h2.6.32内核源码)

我编译了驱动程序。我插入了模块并/dev/sbd0创建了。现在我想测试我的驱动程序代码。所以我写了一个如下的应用程序。

输出是:4096

我想知道:我没有为BLKBSZGET. 它没有调用 my sbd_ioctl,而是使用默认驱动程序并给了我结果。对于open,close调用它执行sbd_opensbd_close(我实现)。然后我尝试了:

它调用sbd_getgeo了,但我认为它会调用sbd_ioctl.

以下是我的问题:

  1. 我实现了一个驱动程序并创建了一个设备。如果我对该设备执行任何操作,它必须调用我的驱动程序应用程序。但是它如何使用我的一些驱动程序函数和一些默认的驱动程序函数呢?
  2. ioctl(fd, HDIO_GETGEO, ..)没有调用.ioctlcall,但它调用了.getgeo. 这怎么可能?
0 投票
1 回答
6225 浏览

c - 如何读/写块设备?

如何读/写块设备?我听说我像普通文件一样读/写,所以我设置了一个循环设备

然后我在文件上运行应用程序,然后在循环设备上运行

该文件完美执行。循环设备读取 0 个字节。在这两种情况下,我得到 FP==3 和 off==0。文件正确获取字符串长度并打印字符串,而循环让我得到 0 并且什么也不打印

如何读/写块设备?

0 投票
1 回答
553 浏览

linux - sbull ldd3 示例驱动程序卡住

我正在编写一个块设备驱动程序并从这里的 sbull 示例开始:http: //lwn.net/images/pdf/LDD3/ldd3_pdf.tar.bz2 我在内核版本 3.5 的机器上成功加载了 sbull 驱动程序。 0-23。当我运行此代码时:

}

会话卡住了。如果我在机器上打开另一个会话并打印 dmesg 我会在一段时间后得到这个:

驱动程序可能有什么问题?为了清楚起见,我在原来的 sbull 驱动程序中遇到了这个问题。

0 投票
0 回答
341 浏览

windows - NodeJS:无法写入 Windows 8 块设备

我期待直接写入原始 Windows 块设备。

我可以使用dd for windows成功地做到这一点:

但是我无法使用 NodeJS 这样做。我以下列方式使用节点块设备:

device.write正确返回写入的字节数,但实际上并没有向设备写入任何内容。

请注意,确切的代码在 Mac OS X 中成功运行(当然替换\\\\.\\PhysicalDrive1/dev/diskN):它写入我的数据,我可以在 Windows 8 中毫无问题地查看它。

我究竟做错了什么?

我也试过:

  • 不转义反斜杠 ( \\.\PhysicalDrive1) 但会导致EINV错误。
  • 使用逻辑名称:\\\\.\\E:.
  • mountvol X: /D在尝试读/写之前卸载卷。

我可以正确确认要写入的设备的 ID:

我也试过设置moders+. 读取操作似乎有效,但保存的数据包含以下与故障相关的数据:

编辑:一个 github 问题线程描述了我尝试过的更多事情:https ://github.com/jhermsmeier/node-blockdevice/issues/1 。

编辑:提到的所有方法都以管理员权限进行了测试。

编辑:我正在使用device.close(callback),但为了简单起见,在示例中省略了。

0 投票
0 回答
235 浏览

linux - Linux 循环视频缓冲区

我有一个 5MP 2592×1944 像素相机,它通过 DMA 写入 GPU 或 YUV4:2:2 数据文件。

由于这是非常不标准的,几乎所有相机查看应用程序都无法处理这些数据,我只能在记录后分析数据。我的想法是在 /dev/ 中设置一个 2 帧大 (2592x1944x1.5x2) 14763kb 的环形缓冲区,并将视频转储到该缓冲区中。然后我可以像使用 video4linux 程序的标准视频流一样访问它,并将它保存/修改/调整大小,我想要的都是新格式。

问题是如何设置一个环形缓冲区并让视频流式传输到它而不是 yuv_file.data

任何网站可以告诉我如何设置这样的东西,或者这甚至不可能?

0 投票
2 回答
1130 浏览

linux-kernel - Linux内核:获取符号链接背后的真实路径

我正在研究一些 linux 内核的东西,我有一个名为 /dev/blah/whatever 的假路径指向 /dev/block/real_device

问题是lookup_bdev将无法遵循符号链接,所以我想通过获取真实路径(/dev/block/real_device)预先按摩路径,这样我就可以将它交给lookup_bdev所以它成功返回而不是错误.

或者任何其他可以正确检索给定初始路径的 block_device 信息的内核调用。

谢谢