Buildroot 正在为它们应该运行的嵌入式设备生成图像。这工作得很好。在这些图像中,包含 rootfs。
由于一些研究,我想查看生成的文件(例如,应用了 Buildroot 设置的不同压缩模式,现在应检查它们是否正确完成),但我在网络中找不到有用的东西。
据我所知,uImage 和 zImage 之间的区别只是一个小标题,因此 u-boot 能够读取该二进制文件。但是我既不能打开 uImage,也不能打开 zImage。
谁能给我一个关于如何在主机上解压缩那些 (u/z) 图像的提示?
我的任务是在嵌入式设备上将 Linux 作为操作系统运行。
目标具有 x86 处理器和 8 GB CompactFlash 设备用于存储。
我已经设法使用 buildroot 创建内核映像和交叉编译工具。我已将 CF 设备分区为一个小的 FAT 分区,其中包含内核映像以及syslinux引导配置和一个ext3文件系统,我已将 buildroot 生成的根文件系统解压缩到其中。
syslinux通过将根目录设置为我的 buildroot 文件系统所在的 CF ext3 分区,系统启动成功。
我的问题集中在面对立即(和频繁)断电时对稳健性的需求,因为断电后设备成功启动至关重要。我读过将根文件系统挂载为只读是确保数据完整性的一种方式。这是我继续的明智方式吗?
我还阅读了有关将根文件系统加载到 RAM 中以实现相同目的的可能性,但目前还不知道如何执行此操作。
是否有实现这一目标的首选方法,如果有,我继续前进的最佳方法是什么?
我已经使用buildroot和busybox开发了我自己的小型 linux 文件系统。我使用linux-2.6.38.8内核根据需要为目标系统(X86)配置和交叉编译。现在文件系统已经构建,但它只有busybox shell,不支持GUI。它没有任何包管理器也是。现在我想在它上面启用 GUI。我检查了/etc但没有任何x11目录或x11.conf文件。它也不支持startx。
How can I install x11(XFree86 or Xorg) on my system Explicitly.
I also want to install a package-manager for my system.
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
我使用Buildroot构建了一个嵌入式 Linux ,但在与 AP 保持连接时遇到了一些麻烦。无法多次获取 IP 地址。
我使用 wpa_supplicant 使用 WPA2-PSK 连接到我的 AP。它可以在 AP 模式下与其他 AP 一起使用,例如我的智能手机。
当我使用时,iwconfig wlan0我看到我与我的 AP 相关联
wlan0 IEEE 802.11bgn ESSID:"ZyXEL_B3B5"
Mode:Managed Frequency:2.462 GHz Access Point: 90:EF:68:D3:B3:B5
Bit Rate=58.5 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
Link Quality=53/70 Signal level=-57 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:1 Missed beacon:0
Run Code Online (Sandbox Code Playgroud)
但我无法获得 IP 地址 ifup wlan0
udhcpc (v1.22.1) started …Run Code Online (Sandbox Code Playgroud) 在 BuildRoot 2015.08.1 /etc/fstab 中包含以下行。
/dev/root / ext2 rw,noauto 0 1
Run Code Online (Sandbox Code Playgroud)
在我加密的 Ubuntu 笔记本电脑上,/etc/fstab 包含以下行。
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
Run Code Online (Sandbox Code Playgroud)
问题:在 /etc/fstab 中列出 rootfs 的目的是什么?
不是答案:
内核从 root= 参数或在 initramfs 中以只读方式挂载 rootfs。所以 /etc/fstab 无助于以只读方式挂载 rootfs。
init 进程重新挂载 rootfs 读写。这是在 BuildRoot 中的 /etc/inittab 和 Ubuntu 中的 /etc/rcS.d/S06checkroot.sh 中完成的。所以 /etc/fstab 无助于重新挂载 rootfs 读写。
背景:我正在构建一个带有花哨的 initramfs 的嵌入式系统。它在网络上和本地寻找不同的 rootfs 候选者,直到找到合适的候选者。它负责检查文件系统并在调用 switch_root 之前以读写方式重新挂载它。
额外问题:不在 /etc/fstab 中列出 rootfs 会有什么影响?
如果没有就太棒了。我不想为每个 rootfs 维护不同的 /etc/fstab。但是,为什么 BuildRoot 和 Ubuntu 会保留它呢?
剧透:我试过了,它似乎有效,但我对隐藏的后果持谨慎态度。
如果我做:
git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
make BR2_JLEVEL=2
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user
Run Code Online (Sandbox Code Playgroud)
我必须先输入rootQEMU,然后才能使用 shell。
如何配置 buildroot 跳过它并直接登录?
在 Ubuntu 16.04 上测试。
我正在使用这个 ARM9 SAM9G25 嵌入式系统,打开时只在线几秒钟,因为我想加快整个过程,所以我想检查 CPU 频率,并将其设置为最大。速度。
Linux 2.6.39 内核在此处使用 Buildroot 2013.10 生成。当最终围绕它进行谷歌搜索时总是会导致“CPU频率缩放”选项,但这不是我想要的。我相信 CPU 必须有某种静态值,例如:内核告诉 1 GHz CPU 以最大值运行。100 兆赫。
任何人都可以指出我正确的方向吗?感谢您的支持。
我更新了版本“2014.08”(稳定版)的 buildroot 并更新了我的项目的内核版本(3.12.26),当 buildroot 尝试构建linux-headers-3.12.26包时,出现以下错误:
/output/host/usr/arm-buildroot-linux-gnueabi/sysroot 2.6;然后退出1;fi 内核头文件选择不正确:预期为 2.6.x,得到 3.12.x”
我该如何解决?我必须更改脚本check-kernel-headers.sh吗?
我正在尝试向 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 包也不起作用。我很乐意接受任何建议,因为似乎我只是在这个问题上绕圈子,我看不出我做错了什么。
我已经使用树莓派的 buildroot 的默认配置完成了最小安装。我还从 menuconfig 中选择了 openssh 和 openssl:
Package Selection for the target --->
[*] Networking --->
[*] openssh
[*] Library -->
Crypto -->
-*- openssl
[*] openssl binary
[ ] openssl additional engines
Run Code Online (Sandbox Code Playgroud)
我将 Pi 分配给了192.168.0.14,但无法通过 ssh 连接到它。nmap 显示 Pi 的所有端口都已关闭,有时根本不显示 Pi,我觉得这很奇怪——每当 nmap 扫描它时,LINK LED 就会闪烁,所以我猜它连接得很好。
我通常使用update-rc.d或管理启动服务systemctl,但是我只能通过 ssh 连接到 Pi - 我没有 HDMI 或串行端口。我不确定如何手动设置。/etc/init.d/S50sshd存在于 Pi 中,所以它应该在启动后启动 ssh,不是吗?
相关配置文件:/etc/ssh/sshd_config, /etc/init.d/S50sshd.
我在 SD 卡中找不到任何相关日志。
编辑:
根据 X Tian 从评论中提出的建议,我能够获得日志。唯一记录的是/var/log/messages …