是否可以设置 /sys/class/gpio/ 文件的默认权限和所有权,例如通过配置 udev?关键是为可以访问板上 GPIO 引脚的进程提供真正的 gid。
大多数“解决方案”包括 suid 包装器、带有 chown 的脚本和受信任的中间人二进制文件。网络搜索发现编写 udev 规则的尝试失败。
(相关:Q1)
我正在使用这个 ARM9 SAM9G25 嵌入式系统,打开时只在线几秒钟,因为我想加快整个过程,所以我想检查 CPU 频率,并将其设置为最大。速度。
Linux 2.6.39 内核在此处使用 Buildroot 2013.10 生成。当最终围绕它进行谷歌搜索时总是会导致“CPU频率缩放”选项,但这不是我想要的。我相信 CPU 必须有某种静态值,例如:内核告诉 1 GHz CPU 以最大值运行。100 兆赫。
任何人都可以指出我正确的方向吗?感谢您的支持。
我正在为嵌入式系统构建磁盘映像(放置在 4GB SD 卡上)。我希望系统有两个分区。一个“根”(200Mb) 和一个“数据”分区(800Mb)。
我用 dd 创建了一个空的 1GB 文件。然后我使用 parted 来设置分区。我将它们每个都安装在一个循环设备中,然后将它们格式化;ext2 代表“根” ext4 代表“数据”。将我的根文件系统添加到“Root”分区并将“Data”留空。
这就是问题所在。我现在被困在一个 1GB 的图像上,上面只有 200MB 的数据。理论上,我不应该能够将图像截断为 .. 201MB 并且仍然可以安装文件系统吗?不幸的是,我没有发现这种情况。
我记得过去曾使用过 Freescale 的构建环境,该环境用于创建 30Mb 图像,该环境将具有使用整个 4GB sdcard 的分区。不幸的是,此时,我无法找到他们是如何做到的。
我已经阅读了 ext 文件系统的磁盘格式,如果第一个超级块之后没有任何数据(备份超级块和未使用的块表除外),我想我可以在那里截断。
不幸的是,当我这样做时,安装系统吓坏了。然后我可以运行 FSCK,恢复超级块和块表,然后可以挂载它就没有问题了。我只是不认为那应该是必要的。
也许不同的文件系统可以工作?有任何想法吗?
谢谢,
编辑
更改分区以读取文件系统。分区仍然存在并且没有改变,但是截断图像后文件系统被破坏了。
编辑
我发现这种情况是,当我将文件截断到刚好大于第一组“数据”分区超级块和索引节点/块表的大小时,(在数据块范围内的某处)文件系统无需执行即可卸载一个 fsck 来恢复其余的超级块和块/inode 表
我一直在弄乱我在 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) 我有一个小型的定制嵌入式 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 …
我有一个在嵌入式 Linux 设备上运行的应用程序,我正在扩展它的新功能。新功能需要 GLib,因此我正在将所需的库动态链接到应用程序。
当我这样做并在设备上运行应用程序时,出现分段错误。当我动态链接新库时会发生这种情况。GDB 的回溯显示故障发生在另一个自定义动态链接库中。不幸的是,我只得到了以下消息的部分跟踪:
回溯停止:帧没有保存 PC
请注意,我只是链接了另一个共享库,并未添加任何新代码。如果我静态链接自定义库,崩溃就会消失。我怀疑内存损坏发生在其他地方,并且当动态链接自定义库以便发生分段时,条件(即内存映射)恰到好处。
任何人都知道我可以用来进一步调试的任何好的工具和技术?
我有一个使用 buildroot 和 initramfs 构建的嵌入式系统设置。它在紧凑型闪存设备上运行,我在其中创建了单独的 ext3 分区来安装/etc/和/var目录以及自定义目录来存储数据。我不完全确定这是否是一个好主意,但我需要访问系统日志输出,并且还需要能够修改文件,/etc因为它们需要在此处配置静态 IP 地址。一旦该/etc/network/interfaces文件已被修改,设置IP,我在没有进一步需要手动编辑任何东西/etc,所以我在想,如果让这个以只读方式挂载当设备在现场是一个好主意,或者是否有可能是我系统上的其他应用程序需要写入任何文件/etc? 我运行的是一个相当小的系统,实际上只有 dropbear 和 busybox 正在运行(以及我控制设备的自定义控制器应用程序)。我在各种论坛和网站上环顾四周,这个想法似乎并没有太大争议,但我的知识相当有限。我意识到我可以尝试将它安装为只读,但似乎事情可能会悄无声息地崩溃,所以这是一个坏主意吗??
我正在尝试向 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 包也不起作用。我很乐意接受任何建议,因为似乎我只是在这个问题上绕圈子,我看不出我做错了什么。
嵌入式 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 ×10
linux ×3
arm ×2
buildroot ×2
compiling ×2
application ×1
block-device ×1
boot ×1
boot-loader ×1
cpu ×1
crash ×1
devices ×1
etc ×1
ext3 ×1
ext4 ×1
filesystems ×1
gcc ×1
gpio ×1
grub2 ×1
hardware ×1
initramfs ×1
kernel ×1
linux-kernel ×1
permissions ×1
readonly ×1