标签: embedded

Shell命令读取设备寄存器?

在运行 Linux 的单板计算机上,有没有办法读取控制硬件的设备配置寄存器的内容?我认为这将是inw().

我正在寻找与 U-boot memory dump ( md) 命令等效的东西,以便在驱动程序调试的上下文中使用。

linux memory embedded

18
推荐指数
2
解决办法
6万
查看次数

如何观察内存带宽?

我有一个嵌入式 Linux ARM 系统,它在以太网和 USB 上的吞吐量明显低于预期。我怀疑记忆可能有所贡献。有没有办法观察在以太网或 USB 上运行吞吐量测试时消耗的内存带宽?

linux memory embedded benchmark

17
推荐指数
2
解决办法
2万
查看次数

完全启动 linux 所需的最小根文件系统应用程序是什么?

这是一个关于用户空间应用程序的问题,但听我说!

可以这么说,启动 Linux 的功能性发行版需要三个“应用程序”:

  1. Bootloader - 对于嵌入式,通常是 U-Boot,虽然不是硬性要求。

  2. 内核 - 这很简单。

  3. 根文件系统 - 没有它就无法引导到 shell。包含内核引导到的文件系统,其中init称为 form。

我的问题是关于#3。如果有人想构建一个极小的 rootfs(对于这个问题,我们假设没有 GUI,只有 shell),启动到 shell 需要哪些文件/程序?

linux startup embedded architecture root-filesystem

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

对于嵌入式设置,使用只读根文件系统是一个好主意吗?

我的任务是在嵌入式设备上将 Linux 作为操作系统运行。

目标具有 x86 处理器和 8 GB CompactFlash 设备用于存储。

我已经设法使用 buildroot 创建内核映像和交叉编译工具。我已将 CF 设备分区为一个小的 FAT 分区,其中包含内核映像以及syslinux引导配置和一个ext3文件系统,我已将 buildroot 生成的根文件系统解压缩到其中。

syslinux通过将根目录设置为我的 buildroot 文件系统所在的 CF ext3 分区,系统启动成功。

我的问题集中在面对立即(和频繁)断电时对稳健性的需求,因为断电后设备成功启动至关重要。我读过将根文件系统挂载为只读是确保数据完整性的一种方式。这是我继续的明智方式吗?

我还阅读了有关将根文件系统加载到 RAM 中以实现相同目的的可能性,但目前还不知道如何执行此操作。

是否有实现这一目标的首选方法,如果有,我继续前进的最佳方法是什么?

embedded readonly root-filesystem ram buildroot

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

守护程序(即后台)进程是否可以从 USB 键盘查找按键?

我正在开发一个嵌入式 Linux 项目,我将在其中开发一个程序,该程序将在启动时自动运行并通过字符显示和某种按钮阵列与用户交互。如果我们使用一个简单的 GPIO 按钮阵列,我可以轻松编写程序来查找这些 GPIO 线上的按键。但是,我们的一个想法是使用 USB 数字键盘设备代替用户输入。我的理解是这些设备将作为 USB 键盘呈现给操作系统。如果沿着这条路走下去,有没有办法让我的程序从 Linux 中查找这个 USB 键盘上的输入,记住没有虚拟终端或 VGA 显示器。插入 USB 键盘后,“/dev”中是否有实体可以打开文件描述符?

linux embedded usb keyboard

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

使用交叉编译的 Valgrind

我已经从 Valgrind 主干下载了源代码,并将其构建为在由 ARM926(ARMv5t 架构)提供支持的嵌入式 Linux 系统(Montavista Linux)上使用。一切都很顺利,直到我尝试运行它来检查我制作的一些应用程序;Valgrind 告诉我:

“valgrind:无法为平台‘arm-linux’启动工具‘memcheck’:没有这样的文件或目录”。

尝试运行任何其他工具都会给出相同的消息。对于make install,我使用了 --prefix 选项,指向通过 NFS 挂载的嵌入式系统的文件系统(例如 --prefix=/home/NFS_mounted/opt/valgrind)。我检查了安装位置,那里的lib目录包含适当的工具;我还检查了 Valgrind 的相应 pkgconfig 文件,它似乎没问题,所以我现在有点无能为力,无法弄清楚出了什么问题。2个问题:

  1. 像这样使用/安装交叉编译的 Valgrind 是否正确?也许我在设置方面做错了什么,或者也许我缺少一些涉及主机系统的东西(gdb/gdbserver 之类)。
  2. 有没有人试过在 ARM 架构上运行它?我知道支持是最近的,所以我想知道我是否可以获得不错的结果。

linux embedded cross-compilation

14
推荐指数
2
解决办法
2万
查看次数

增加内核内存大小

我有一个带有 512MB RAM 的嵌入式板,运行 Linux 2.6.29 和 UBoot 引导加载程序。但是内核只能使用 128MB 的 RAM。

我尝试更改 的值XCODE_MEMSIZE,我认为这决定了内核使用了多少 RAM。

当我将其设置为 512 时,内核在启动时崩溃。是否还有其他配置参数需要更改?

linux kernel memory embedded

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

通过 qemu 在 Debian armel 上运行 Debian i386 二进制文件

我正在尝试按照本指南在运行 Debian armel 的 SheevaPlug 上设置 Ventrilo 服务器。这个页面指出我可以使用 QEMU 在我的 arm 系统上运行为 i386 制作的二进制文件。

qemu 的设置说我需要安装 qemu、qemu-user 和 qemu-libc-i386。我在apt-get 中找到了前两个,但qemu-libc-i386不是一个包。所以我尝试运行 qemu 来运行 ventrilo 服务器,如下所示:

# qemu-i386 ./ventrilo_srv
/lib/ld-linux.so.2: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这似乎ld-linux.so.2是我在 armel as 中所拥有的 i386 版本ld-linux.so.3

所以我知道操作方法适用于不同的 Linux 发行版,但如果他们可以在他们疯狂的发行版中运行,我似乎应该能够在 Debian 中运行它。是否有我可以获得的软件包可以安装libc-i386以便我可以运行它(类似于x64 系统的ia32-libs?)我还尝试so.2从另一个 i386 系统复制它,但没有得到我任何地方。

embedded arm debian qemu

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

使只读 /etc 可写

我正在处理运行 Linux 的嵌入式设备。该设备的制造商对其进行了设置,以便它以只读方式加载根文件系统。

从 /etc/mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0
Run Code Online (Sandbox Code Playgroud)

这意味着我无法修改 /etc 中的任何文件,例如添加新用户。

我试过重新挂载根目录:

mount -o remount,rw -t squashfs /dev/root /
Run Code Online (Sandbox Code Playgroud)

但我只是收到一个错误

mount: cannot remount block device /dev/root read-write, is write-protected
Run Code Online (Sandbox Code Playgroud)

我查了这个错误,人们说要使用blockdev。系统没有安装blockdev,所以我交叉编译并复制了它。然后我跑了

blockdev --setrw rootfs
Run Code Online (Sandbox Code Playgroud)

但我又遇到了一个错误:

blockdev: cannot open rootfs: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果还没有,是否可以使 /etc 可写?我有系统的 root 访问权限,但我无法“离线”访问文件系统,所有更改都必须通过 Bash 命令完成。

linux embedded mount readonly

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

如何识别嵌入式 Linux 发行版?

我正在尝试识别嵌入式 Linux 发行版。以下是我到目前为止输入的命令:

$ uname -a
Linux LIN-SRV-EMB01 3.10.105 #25556 SMP Sat Aug 28 02:14:22 CST 2021 x86_64 GNU/Linux synology_bromolow_rs3412rpxs

$ lsb_release
-sh: lsb_release: command not found

$ ls /usr/lib/os-release
ls: cannot access /usr/lib/os-release: No such file or directory

$ cat /proc/version
Linux version 3.10.105 (root@build1) (gcc version 4.9.3 20150311 (prerelease) (crosstool-NG 1.20.0) ) #25556 SMP Sat Aug 28 02:14:22 CST 2021

$ cat /proc/cmdline
root=/dev/md0 netif_seq=2130 ahci=0 SataPortMap=34443 DiskIdxMap=03060e0a00 SataLedSpecial=1 ihd_num=0 netif_num=4 syno_hw_version=RS3412rpxs  macs=001132109b1e,001132109b1f,001132109b20,001132109b21 sn=LDKKN90098

$ dmesg | grep …
Run Code Online (Sandbox Code Playgroud)

linux embedded synology

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