标签: embedded

随时断电,安全使用SD卡

我们正在开发一个小型嵌入式 Linux 系统(2.6.35-ish),带有一个用于操作系统和应用程序的小型内部 NAND 设备(250-500Meg)和一个带有 8Gb SDHC SD 卡的 SD 卡用于数据。

可以随时切断设备的电源。

系统必须将数据存储到 SD 卡。这些数据非常重要……这是系统的全部目的。这些系统通常与远程位置的任何网络完全断开,每 4-8 周通过运动鞋网检索数据。

目前,我们只是在 SD 卡上安装了 VFAT。这主要是为了让第一批测试客户可以轻松地将数据手动复制到他们的 Win7 笔记本电脑上。

但是,我现在担心在错误的时间断电导致数据丢失只是时间问题。

配置此类系统以防止数据丢失的最佳方法是什么?JFFS2 在写入数据的方式方面听起来像是我想要的(并且性能需求根本不高),但是使用 block2mtd 等听起来相当笨拙。我也不确定卡的磨损均衡将如何交互用它。

做到这一点的最佳方法是什么?

编辑

我现在正在考虑离开文件系统 VFAT 并一次分配一天大小的文件,填充 0xFF,这应该会极大地限制电源循环故障的风险。然后我只能在这些预先创建的块中附加记录,希望 SD 卡不会太愚蠢以至于它们会擦除/磨损级别写入 0xFF 区域。

我可以使用 noatime,但是是否有等效的 VFAT nomtime 来防止写入修改后的时间字段?在创建新的一天的文件之前,我需要某种方法来阻止任何元数据更新。

编辑 2

电子堆栈交换中的某个人提醒我,NAND 上也有 ECC 数据,因此无法防止需要擦除。

那么,在这种情况下,通过 block2mtd 的 JFFS2 是否合适?

编辑 3

这比我想象的还要糟糕。即使您将完全相同的内容写入磁盘,我拥有的 SD 卡也会擦除数据块。擦除块是 64KB,这太大了,无法完全延迟写入。我将在 NAND 闪存中存储多达 128KB 的数据(我可以控制其写入行为),在一种日志中,然后将 128KB 块写入 SD 卡上 VFAT 分区中的 128KB 对齐文件(在如果其他 SD 卡有 128KB 擦除块)。

linux filesystems embedded sd-card

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

碎片整理 RAM / OOM 失败

这个问题相当长,所以我会在顶部提出问题,然后通过我的方法来回答问题:

  1. (基于 Busybox 的)rm 是否因为没有足够的连续 RAM 而没有执行?
  2. 如果是这样,是否有一种轻量级的方法来对 DMA 进行碎片整理 - 而无需求助于系统重新启动?
  3. 如果不是,是什么原因造成的?我怎样才能防止它在未来发生?

在我们的测试系统在过去几天相当密集地运行之后 - 我 telnet 进入系统并检查了测试结果。当我来删除一些数据时,系统返回了命令行(好像命令执行正确一样)。当我来检查目录以获取另一组结果时,我看到该文件仍然存在(使用 ls)。

在此之后,我注意到越来越多的 shell 命令没有按预期执行。

在 rm 无法正确执行后,我将从dmesg的输出开始:

从进程 6821 (rm) 分配长度 61440 失败

每个 CPU 的 DMA:

CPU 0: hi: 0, btch: 1 usd: 0

Active_anon:0 active_file:1 inactive_anon:0 inactive_file:0 unevictable:6 脏:0 回写:0 不稳定:0 空闲:821 平板:353 映射:0 页表:0 弹跳:0

DMA free:3284kB min:360kB low:448kB high:540kB active_anon:0kB inactive_anon:0kB active_file:4kB inactive_file:0kB unvictable:24kB present:8128kB pages_scanned:0 all_unreclaimable?不

lowmem_reserve[]: 0 0 0

DMA:31*4kB 47*8kB 42*16kB 64*32kB 1*64kB …

linux memory embedded

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

选择哪个最小但可扩展的 Linux 发行版

我需要一个可扩展的 Linux 发行版,我可以轻松地将其缩小到适合 64 mb CF 卡的大小。

在这个精简版中,它将在 Via C7 上运行,并且需要内核、网络、shell、基本的 perl 和一个 ftp 服务器。有一些嵌入式系统的发行版可以做到这一点,但是我要求将来应该可以扩展这个集合,例如扩展到基本的 X 设置或 python 而不是 perl 等。

你知道哪个发行版可以做到这一点?像 Fedora、Debian、Ubuntu 这样的主要发行版中的任何一种都可以精简这么多吗?

编辑:我查看了嵌入式 Debian,它似乎与我需要的非常接近。可悲的是,由于主要维护者的健康问题,开发似乎已经停滞。

distros embedded distribution-choice

10
推荐指数
2
解决办法
1426
查看次数

如何为 Beagleboard 从头开始​​(CLFS)为跨 Linux 构建 GCC 交叉编译器?

目前,我尝试使用Cross Linux from Scratch 中的说明从头开始构建嵌入式 Linux 。

一切正常,直到我尝试编译 GCC 交叉编译器。我想为 Beagleboard-xM 构建 Linux...所以我选择了以下设置:

export CLFS_ABI="aapcs-linux"
export CLFS_HOST="x86_64-cross-linux-gnu"
export CLFS_TARGET="armv7a-unknown-linux-uclibceabi"
export CLFS_ARCH="arm"
export CLFS_ENDIAN="little"
export CLFS_ARM_ARCH="armv7"
export CLFS_ARM_MODE="arm"
export CLFS_FLOAT="hard"
export CLFS_FPU="neon"
Run Code Online (Sandbox Code Playgroud)

不,只要我尝试运行此页面上的说明,命令就会make all-gcc all-target-libgcc出错。

checking for armv7a-unknown-linux-uclibceabi-gcc...  /mnt/clfs/sources/gcc-build/./gcc/xgcc -B/mnt/clfs/sources/gcc-build/./gcc/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/bin/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/lib/ -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/include -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/sys-include   
checking for suffix of object files... configure: error: in `/mnt/clfs/sources/gcc-build/armv7a-unknown-linux-uclibceabi/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error …
Run Code Online (Sandbox Code Playgroud)

embedded arm gcc cross-compilation

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

从二进制转换为十六进制并返回

给定一个二进制文件,如何在安装了的最小系统上仅使用sedcut等标准工具将其转换为十六进制字符串并返回busybox

这些工具不可用:

  • perl
  • python
  • xxd (带有vim)
  • gcc

hexdump命令随附busybox,但与随附的命令不同util-linux

我正在寻找将文件转换为十六进制字符串的脚本或命令,以及将其转换回二进制的相应脚本或命令。中间格式不必是十六进制,它可以是 base64 或其他格式。

这适用于磁盘空间有限的嵌入式设备。

embedded busybox hexdump

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

什么文件系统可以提供最好的保护来防止数据因断电而损坏?

我运行一个小的uClibcbusybox一个x86设备上基于嵌入式系统。我正在使用 initramfs,但我还在ext3IDE 模式下的紧凑型闪存设备上安装了一个自定义目录,我用它来存储由自定义编写的 C++ 应用程序创建的持久测量日志记录数据。我选择了ext3文件系统,因为在我读过的几本书(Karim Yaghmour 的《构建嵌入式 Linux 系统》和Christopher Hallinan 的《嵌入式 Linux 入门》)中,在 IDE 模式下使用 CF 驱动器时,建议使用它来防止断电。这一点尤为重要,数据至关重要。

但是,由于我之前的问题混淆了如果在文件写入过程中发生断电,如何恢复损坏的 ext3 文件中的一些评论,看来实际上该文件系统并没有提供针对因电源造成的数据损坏的安全保证损失。所以我想知道是否

  1. 是否ext3实际上是这个设置的最佳选择?
  2. 磁盘写入操作期间断电是否只会损坏我定期附加到文件的数据部分,还是会损坏整个文件?
  3. 断电时写入的数据是否完全安全?特别是,我的initramfs.cpio文件是否也有损坏的风险?
  4. 有什么方法可以在我的应用程序代码中使用来保护数据(即创建一个额外的分区并将我的数据写入镜像,以便始终有 2 个副本)-速度对于我的应用程序来说不是一个真正的问题,如此昂贵的复制操作是可以接受的。

我已经看到并阅读了这个相关问题的答案:日志文件系统是否保证在断电后不会损坏?,但它并没有完全涵盖一些让我感到困惑的事情。

我意识到我问了很多问题,但似乎尽管阅读了很多材料,但我从根本上无法理解断电时我的数据所面临的风险。

filesystems embedded data-recovery

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

运行在 SmartTV 上的 Linux?

我最近买了一台三星智能电视。设置wifi连接后,我浏览了http://ip.comlex.de,它为我提供了有关浏览器的以下信息:

  • REMOTE_ADDR: ###.###.###.###
  • REMOTE_HOST: XXXXXXXXXXXXXXXXXXX.net
  • REQUEST_TIME: 1381093040
  • QUERY_STRING
  • HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml,application/vnd.hbbtv.xhtml+xml,application/ce-html+xml,application/vnd.oipf.xhtml+xml;q=0.9, / ;q =0.8
  • HTTP_ACCEPT_CHARSET: HTTP_ACCEPT_ENCODING: gzip, deflate
  • HTTP_ACCEPT_LANGUAGE:HTTP_REFERER:http ://pagerank.comlex.de/
  • HTTP_USER_AGENT: Mozilla/5.0 (SMART-TV; X11; Linux i686) AppleWebKit/535.20+ (KHTML, like Gecko) Version/5.0 Safari/535.20+

那么,是否有像 HTTP_USER_AGENT 建议的那样在我的 SmartTV 上运行的 Linux?如何找到有关所用 Linux 的更多信息?我可以以某种方式从台式电脑登录电视吗?

可能的解决方案:http : //www.samsungdforum.com/Guide/d21/index.html#how-to-get-firmware-version-and-model-code

embedded webserver

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

永不中断的文件系统(可接受数据丢失)

围绕这个问题有几个现有的主题,但我所寻求的略有不同。我在嵌入式 Linux 上有一张 SD 卡,但它断电了。我也许可以在某个时候修改硬件,正确关闭等等。但现在,我只想找到一个文件系统,它可以在断电后毫不费力地幸存下来。数据丢失是可以接受的。我不想丢失比我当前正在编写的文件更多的文件,但我仍然宁愿丢失所有文件,也不愿面对“无法挂载”、“等待 10 分钟 fsck”或“无法创建新文件”文件由于此 inode 出现某些错误'。节目必须继续!

我正在努力确保这一点。我正在使用工业级组件,我有硬件看门狗,软件看门狗,内部,外部,init 重新启动程序,守护进程不断检查内存、文件描述符等等,我让看门狗看着我的看门狗,而其他看门狗又在看...但我似乎不能保证SD卡能够挂载和运行?

我现在最好的选择是在 SD 卡上使用 JFS,在我的安装中包含 fsck 和 fsck.jfs。(增加 600kb+ 占用我的内存和闪存。这很糟糕。)并在每次启动时运行 fsck(可能会增加很多启动时间。这有点糟糕。)。不过好像有点难过。

有谁知道更好的方法或更好的文件系统?

更新:在我的发行版中编译 e2fsprogs-libs(对 jfsutils 的依赖)似乎非常困难。我会研究 ZFS(虽然它不是我的发行版的原生。它似乎做了很多我不需要的事情。)

UPDATE2:有关我的系统和我的测试的更多信息:SD 卡存储是辅助的可选存储。SD 卡是 2Gb-8Gb 工业级 microSD。SD 卡是通过我的 rc 使用 mount -t 命令挂载的。选项“noatime”而不是“sync”。我的发行版是一个定制的模拟设备风格的 uClinux,有一个 3.10 内核和一个 1.21 busybox。我的主要存储是带有 jffs2 的 spi 闪存。我从来没有遇到过任何问题。我什至不知道是否有可用的 fsck.jffs2。另一方面,Nand flash ...但那是另一回事了。SD 卡的用途是存储测量数据。“监控”程序会将结果附加到文件中,并具有战略性的同步位置。当文件超过给定大小时,将创建一个新文件。当达到给定数量的文件时,最旧的文件将被删除。如果当前测量文件因断电而丢失,也不是灾难。文件通常为 50-100kb,1 个结果通常为 1kb。这只是最初的开发阶段。没有什么是固定的。这是我第一次在嵌入式系统中处理非闪存文件系统。(我的 x86 服务器上有 ext4。)

我从 vfat 开始。默认文件系统。(我认为工厂可能有选择它的理由。如果一切正常,我真的不太在意。)我从未在嵌入式 vfat 设备中看到任何功率损耗问题。不过,我在 WinCE 中遇到过 FAT 问题。但是,当我的“监视器”程序达到 100-200 个文件时,它拒绝创建更多文件。似乎 FAT 在根目录中有一个特殊的文件限制问题,在子目录中有一个稍大的问题。我需要能够在 1 个目录中创建 500-1000 个文件。所以 vfat 不行。

然后我切换到ext2。不过,我没有在启动时插入 fsck。(不知道我必须这样做。)一天之内,由于“inode …

linux filesystems embedded sd-card

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

开源路由器固件选项?

有哪些专为路由器设计的发行版?请包括以下内容

  • 链接到项目页面
  • 链接到支持的硬件列表
  • 它们的区别是什么,为什么选择这个选项
  • 友好的网络界面?
  • 以上友好界面容易禁用?
  • 最初未安装的软件的包管理?(例如 ipkg/opkg)
  • 好的文档?

distros linux embedded bsd

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

在嵌入式系统中加密文件(私钥等)

我正在研究在 Linux 上运行的嵌入式设备。该设备与服务器通信并使用证书和私钥向其发送数据。

当我们分发设备时,我担心某些邪恶的人可能会通过入侵嵌入式设备的文件系统来窃取该私钥,并试图篡改我们服务器上的数据。

即使我对该私钥进行加密,由于正在运行的程序需要解密该密钥,他们仍然可以在文件系统的某处找到解密密钥。

更改文件的权限不是解决方案,因为我们必须固有地分发设备,因此,任何人都可以物理访问它。

我很高兴听到任何保护私钥而不阻止正在运行的程序使用它的建议。谢谢你。

编辑:我们使用在英特尔 Edison 上运行的 Yocto。

security embedded

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