标签: embedded

ARM 上的 Linux 内核 2.6

我已经在 ARM 板上编译并安装了 2.6 内核。我正在使用 ARM mini2440板。

我想知道是否已经有一种方法可以访问通用 I/O 端口引脚?

还是我必须ioctl()直接从内存中访问它们?

linux kernel embedded arm hardware

7
推荐指数
1
解决办法
558
查看次数

干净地设置 GPIO 权限

是否可以设置 /sys/class/gpio/ 文件的默认权限和所有权,例如通过配置 udev?关键是为可以访问板上 GPIO 引脚的进程提供真正的 gid。

大多数“解决方案”包括 suid 包装器、带有 chown 的脚本和受信任的中间人二进制文件。网络搜索发现编写 udev 规则的尝试失败

(相关:Q1

(资源:avrfreakslinuxudev

linux permissions embedded arm gpio

7
推荐指数
1
解决办法
3205
查看次数

如何设置CPU频率。在 Linux 中?

我正在使用这个 ARM9 SAM9G25 嵌入式系统,打开时只在线几秒钟,因为我想加快整个过程,所以我想检查 CPU 频率,并将其设置为最大。速度。

Linux 2.6.39 内核在此处使用 Buildroot 2013.10 生成。当最终围绕它进行谷歌搜索时总是会导致“CPU频率缩放”选项,但这不是我想要的。我相信 CPU 必须有某种静态值,例如:内核告诉 1 GHz CPU 以最大值运行。100 兆赫。

任何人都可以指出我正确的方向吗?感谢您的支持。

linux cpu embedded cpu-frequency buildroot

7
推荐指数
1
解决办法
7646
查看次数

如何创建具有大分区的小磁盘映像

我正在为嵌入式系统构建磁盘映像(放置在 4GB SD 卡上)。我希望系统有两个分区。一个“根”(200Mb) 和一个“数据”分区(800Mb)。

我用 dd 创建了一个空的 1GB 文件。然后我使用 parted 来设置分区。我将它们每个都安装在一个循环设备中,然后将它们格式化;ext2 代表“根” ext4 代表“数据”。将我的根文件系统添加到“Root”分区并将“Data”留空。

这就是问题所在。我现在被困在一个 1GB 的图像上,上面只有 200MB 的数据。理论上,我不应该能够将图像截断为 .. 201MB 并且仍然可以安装文件系统吗?不幸的是,我没有发现这种情况。

我记得过去曾使用过 Freescale 的构建环境,该环境用于创建 30Mb 图像,该环境将具有使用整个 4GB sdcard 的分区。不幸的是,此时,我无法找到他们是如何做到的。

我已经阅读了 ext 文件系统的磁盘格式,如果第一个超级块之后没有任何数据(备份超级块和未使用的块表除外),我想我可以在那里截断。

不幸的是,当我这样做时,安装系统吓坏了。然后我可以运行 FSCK,恢复超级块和块表,然后可以挂载它就没有问题了。我只是不认为那应该是必要的。

也许不同的文件系统可以工作?有任何想法吗?

谢谢,

编辑

更改分区以读取文件系统。分区仍然存在并且没有改变,但是截断图像后文件系统被破坏了。

编辑

我发现这种情况是,当我将文件截断到刚好大于第一组“数据”分区超级块和索引节点/块表的大小时,(在数据块范围内的某处)文件系统无需执行即可卸载一个 fsck 来恢复其余的超级块和块/inode 表

filesystems embedded ext4 ext3

7
推荐指数
2
解决办法
4378
查看次数

如何在没有编译器的系统上安装 GCC?

我一直在弄乱我在 Linux 上运行的 NAS。我有 root 访问权限,但没有编译器。我似乎记得一些关于能够在另一个系统上编译的事情,但我不确定。

root@LSB1:~# uname -a
Linux LSB1 2.6.22.18-88f6281 #50 Tue Dec 22 18:06:23 JST 2009 armv5tejl unknown
Run Code Online (Sandbox Code Playgroud)

compiling embedded gcc

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

为什么 GRUB 2 启动如此缓慢?

我有一个小型的定制嵌入式 Linux 发行版(使用 OpenEmbedded 创建),它使用 GRUB 1.99 启动。目的是让它快速启动。

目前它说:

GRUB loading.
Run Code Online (Sandbox Code Playgroud)

大约 2+ 秒(这可能是不可避免的)。然后:

Welcome to GRUB!
Run Code Online (Sandbox Code Playgroud)

完成加载后,在它下面停留几分之一秒。

(没有菜单或菜单超时。)它清除屏幕,然后:

Booting 'Disk'
Run Code Online (Sandbox Code Playgroud)

约 8 秒。这种延迟似乎是可以避免的。我很想知道如何让它不在这里拖延。

然后它继续:

Decompressing Linux... Parsing ELF... done.
Booting the kernel.
Run Code Online (Sandbox Code Playgroud)

然后在内核启动时出现大量快速滚动的文本。

内核映像文件为 1.8MB,磁盘映像文件为 16MB。

grub.cfg文件如下所示:

set default="0"
set timeout=0

menuentry "Disk" {
    set root=(hd0,1)
    linux /boot/Disk.kernel parport=0x378,7,3 ramdisk_size=16384 root=/dev/ram rw
    initrd /boot/Disk.ext2
}
Run Code Online (Sandbox Code Playgroud)

在我拥有的另一个启动盘(在紧凑型闪存卡上)中,我拥有完全相同的内核和不同的磁盘映像文件,大小为 20MB。除了 ramdisk_size=20480 之外,配置文件也是相同的。这个在同一点有 69 秒的极长延迟。为什么时间长了这么多?谢天谢地,我不需要经常使用那个启动盘。但是修复那个也很好,因为大概延迟是由同一件事引起的。

我该如何解决这个延迟?它在做什么?如何调试引导加载程序?是否值得研究像 SYSLINUX 这样重量更轻的引导加载程序?删除一些未使用的 GRUB 2 模块会改善它吗?(如何找到哪些模块未使用?)

概括

以下所有内核都具有完全相同的 Linux 3.2 内核:X …

boot embedded boot-loader grub2

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

调试分段错误

我有一个在嵌入式 Linux 设备上运行的应用程序,我正在扩展它的新功能。新功能需要 GLib,因此我正在将所需的库动态链接到应用程序。

当我这样做并在设备上运行应用程序时,出现分段错误。当我动态链接新库时会发生这种情况。GDB 的回溯显示故障发生在另一个自定义动态链接库中。不幸的是,我只得到了以下消息的部分跟踪:

回溯停止:帧没有保存 PC

请注意,我只是链接了另一个共享库,并未添加任何新代码。如果我静态链接自定义库,崩溃就会消失。我怀疑内存损坏发生在其他地方,并且当动态链接自定义库以便发生分段时,条件(即内存映射)恰到好处。

任何人都知道我可以用来进一步调试的任何好的工具和技术?

embedded dynamic-linking application crash

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

使 /etc 目录只读是一个坏主意吗?

我有一个使用 buildroot 和 initramfs 构建的嵌入式系统设置。它在紧凑型闪存设备上运行,我在其中创建了单独的 ext3 分区来安装/etc//var目录以及自定义目录来存储数据。我不完全确定这是否是一个好主意,但我需要访问系统日志输出,并且还需要能够修改文件,/etc因为它们需要在此处配置静态 IP 地址。一旦该/etc/network/interfaces文件已被修改,设置IP,我在没有进一步需要手动编辑任何东西/etc,所以我在想,如果让这个以只读方式挂载当设备在现场是一个好主意,或者是否有可能是我系统上的其他应用程序需要写入任何文件/etc? 我运行的是一个相当小的系统,实际上只有 dropbear 和 busybox 正在运行(以及我控制设备的自定义控制器应用程序)。我在各种论坛和网站上环顾四周,这个想法似乎并没有太大争议,但我的知识相当有限。我意识到我可以尝试将它安装为只读,但似乎事情可能会悄无声息地崩溃,所以这是一个坏主意吗??

embedded etc initramfs readonly

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

如何将 autotools 包添加到 Buildroot?

我正在尝试向 buildroot 添加一个包,但我没有取得太大的成功。我要添加的包是一个名为 scew 的 autotools 包。我遵循了关于添加包的 buildroot 指南,虽然在make menuconfig运行时列出了包,但当我运行时make,最终的rootfs.tar.

我还复制了另一个.mk用于安装的简单文件which,并相应地更改了变量名称和 URL。这是我的副本scew.mk

SCEW_VERSION = 1.1.3
SCEW_SITE = http://savannah.nongnu.org/download/scew/
SCEW_LICENSE = GPLv3
SCEW_LICENSE_FILES = COPYING

$(eval $(autotools-package))
Run Code Online (Sandbox Code Playgroud)

在我有的同一个目录中Config.in,它看起来像:

config BR2_PACKAGE_SCEW
   bool "scew"
   help
   google scew
Run Code Online (Sandbox Code Playgroud)

我还将以下几行添加到package/Config.in

menu "My Packages"

 menu "Packages I Wrote"
 source "package/MyPackages/packagesIWrote/hello/Config.in"
 source "package/MyPackages/packagesIWrote/helloworld/Config.in"
 endmenu

 menu "External Packages"
 source "package/MyPackages/external-packages/scew/Config.in"
 endmenu

endmenu
Run Code Online (Sandbox Code Playgroud)

这部分似乎有效,因为包已列出并可被选择。hello 和 helloworld 包是从本网站(用法语编写)获取的添加包指南的副本:添加 Hello Wolrd

hello world 包也不起作用。我很乐意接受任何建议,因为似乎我只是在这个问题上绕圈子,我看不出我做错了什么。

compiling embedded buildroot

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

如何使用 mknod 手动创建设备文件?

嵌入式 Linux 2.6.26.5。我需要从 busybox shell (initramfs) 手动挂载根文件系统。因为这个 Linux 内核不使用 devtmpfs,所以我必须手动创建基本设备节点,使用 mknod ( /dev/null, /dev/zero, dev/mtdblock{0-10}, ttys)。我不确定/dev/mtdblock和的正确格式ttys。我应该为 /dev/mtdblock 和 /dev/mtd 创建节点吗?设备在 nand0 上创建 11 个 MTD 分区。在哪里可以找到分配给设备的主设备号和次设备号?对于 ttys 来说同样的问题:正确的 mknod 命令是什么 5 /dev/tty- 4 tty它们在不同的地方吗?

mknod -m 666 tty c 4 0
mknod -m 666 /dev/tty c 5 0
Run Code Online (Sandbox Code Playgroud)

编辑:分区、设备和文件系统

# cat /proc/partitions
major minor  #blocks  name

  31     0        384 mtdblock0
  31     1        128 mtdblock1
  31     2      20352 mtdblock2
  31     3 …
Run Code Online (Sandbox Code Playgroud)

embedded devices block-device linux-kernel

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