我正在尝试将 ebtables 添加到一个小路由器盒中。我去为正确的架构编译了一个二进制文件,然后把它放在/sbin/. 当我这样做时/sbin/ebtables,外壳会说/bin/sh: /sbin/ebtables: not found,但我可以这样做ls -l /sbin/ebtables并且它完美地显示出来:
-rwxr-xr-x 1 admin admin 4808 Aug 4 10:36 /sbin/ebtables
Run Code Online (Sandbox Code Playgroud)
关于这里发生了什么的任何想法?
最近,我们的客户遇到了一个相当不愉快的情况 - 用于显示遥感数据的基于 Raspberry Pi 的“信息亭”(没有什么比显示来自数据收集服务器的自更新网页的信息亭模式浏览器更花哨的了)由于以下原因无法启动文件系统损坏。Ext4,需要手动fsck,系统将成为明天重要演示的一部分,立即需要服务。当然,我们不能要求客户在晚上关闭系统时很好地关闭系统;该系统必须简单地承受这种虐待。
我想在未来避免这种情况,并且我想将操作系统移动到一个可以防止这种情况的文件系统。有很多用于 MTD 设备的文件系统,让它们在 SD 卡(标准块设备)上运行需要一些严重的跳跃。还有一些其他文件系统(日志等)具有良好的抗腐败能力。我仍然需要看到他们的优缺点的一些合理比较。
Linux 中可用的哪个文件系统将在意外电源故障时提供最佳的抗破坏性,并且不需要跳过像yaffs2这样不可能的箍来安装到 SD。
磨损平衡是一个优点,但不是必需的——SD 卡通常有自己的机制,如果不够完美,尽管系统应该是“对闪存温和的”(像 NTFS 这样的系统可以在一个月内杀死 SD 卡)。
我想从 linux 命令行检查给定的明文密码是否与 /etc/shadow 上的加密密码相同
(我需要这个来验证网络用户的身份。我正在运行一个嵌入式 linux。)
我可以访问 /etc/shadow 文件本身。
Buildroot 正在为它们应该运行的嵌入式设备生成图像。这工作得很好。在这些图像中,包含 rootfs。
由于一些研究,我想查看生成的文件(例如,应用了 Buildroot 设置的不同压缩模式,现在应检查它们是否正确完成),但我在网络中找不到有用的东西。
据我所知,uImage 和 zImage 之间的区别只是一个小标题,因此 u-boot 能够读取该二进制文件。但是我既不能打开 uImage,也不能打开 zImage。
谁能给我一个关于如何在主机上解压缩那些 (u/z) 图像的提示?
我正在寻找一种将 ZIP 存档作为文件系统挂载的方法,以便我可以透明地访问存档中的文件。我只需要读取权限——ZIP 不会被修改。RAM 消耗很重要,因为这适用于(资源受限的)嵌入式系统。有哪些可用选项?
我最怀念嵌入式 Linux 中“小型嵌入式”的功能之一是中断。特定引脚上出现信号,或触发其他中断源,CPU 内部所做的任何事情都会被中断,然后启动我的中断处理程序功能。在 Linux 中,一切都被缓冲,如果发生某些事情,系统只会按照自己的方式进行,当(最后)给定线程被带到前台时,其等待外部源的等待状态结束,其处理程序开始。
我所知道的最接近的是信号,它可以触发中断线程正常流程的处理程序,但是,在内核将线程置于前台之前,处理程序不会接收信号,这可能是信号发生后的许多毫秒- 触发信号也不那么可靠;我需要一个应用程序或内核模块来发送信号,我不能简单地将它连接到 GPIO 引脚。
我如何才能在 Linux 用户空间软件中实现类似于硬件中断的功能——在触发外部源条件后立即启动特定功能或将特定线程置于前台,而无需等待进程队列将我的线程置于前台?
如果你觉得这个问题太宽泛,让我们把它缩小到一个具体的例子:Raspberry Pi 板在它的一个 GPIO 引脚上接收一个信号(不一定是任意的;如果只有一些引脚可以做到这一点,那没关系。)我想要我的用户空间应用程序在尽可能短的时间内对此事件做出反应,无论是使其退出等待状态,启动处理程序函数或任何等效机制,但最重要的是在处理程序被引入之前不等待任务队列循环通过所有挂起的进程到前台,但尽快触发它。(特别是,当没有信号时,不会让系统永远锁定,处理程序进程占用 100% CPU 时间轮询输入并且永远不会屈服于操作系统。)有这样的机制吗?
我试图让一个带有自定义 PID 的 FTDI USB 串行设备自动(甚至手动)连接到 ttyUSB%n,但没有取得多大成功。设备的正常 VID/PID 为 0403/6001。以这种方式编程时,它可以完美运行并在插入时自动将自身连接到 ttyUSB0。即使重新编译驱动程序以尊重我们的新 PID,当使用自定义的 ttyUSB0 编程时,也不会出现,但它确实将其识别为 ftdi_sio 设备并且加载驱动程序。
我已将我们的 PID 添加到标题和源代码中:
// in ftdi_sio_ids.h
#define FTDI_CUSTOM_PID 0xABCD // not the actual pid
Run Code Online (Sandbox Code Playgroud)
// then in ftdi_sio.c
static struct usb_device_id id_table_combined [] = {
// devices....
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOM_PID) },
// ....
Run Code Online (Sandbox Code Playgroud)
重新编译整个内核并刷新设备。当我插入设备时,我得到:
usb 1-1: new full-speed USB device number 2 using at91_ohci
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 Debian 构建的嵌入式 Arm。如何从设备树中列出已编译的设备?我想看看是否已经支持某个设备。
对于阅读本文的人来说,“设备树”是将设备添加到(嵌入式)Linux 内核的规范/标准。
在嵌入式设备中引导内核时,您需要向 Linux 内核提供设备树,而在常规 x86 pc 上引导内核不需要设备树——为什么?
据我了解,在 x86 pc 上,内核“探测”硬件(如果我错了,请纠正我),那么为什么内核不能探测嵌入式系统中的硬件?
rootfs 是一个 squashfs 映像,我的引导加载程序正在将它加载到 SDRAM 中的某个地址。我需要将哪些参数传递给内核,以便它可以从那里挂载 rootfs?Squashfs 支持是内置的,并且已经可以与
root=/dev/mtdblock2 rootfstype=squashfs
Run Code Online (Sandbox Code Playgroud)
用于从闪存启动。
编辑:这是一个基于 MIPS 的嵌入式设备,使用自定义引导加载程序。通常情况下,bootloader 将压缩后的内核从 flash 中提取到 SDRAM 中,然后内核将 /dev/mtdblock2 作为 rootfs 挂载。我正在尝试改进引导加载程序,以便它可以将映像下载到其 RAM 并在不写入闪存的情况下启动。
我不知道如何让 Linux 在 RAM 中挂载一个文件系统映像作为 rootfs。
embedded ×10
linux ×6
device-tree ×2
filesystems ×2
linux-kernel ×2
boot-loader ×1
buildroot ×1
command-line ×1
compression ×1
drivers ×1
images ×1
mips ×1
password ×1
router ×1
serial-port ×1
u-boot ×1
usb ×1