我正在尝试设置buildroot以交叉编译自定义应用程序.
/ # uname -a
Linux Venus 2.6.12.6-VENUS #323634 Wed May 25 13:40:36 CST 2011 mips unknown
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在buildroot中选择了内核版本2.6.12.6.现在我遇到的问题是该make命令没有大喊该规则headers_install是未知的.
这是完成输出:
~/buildroot-2011.11$ make
(cd /root/buildroot-2011.11/output/toolchain/linux-2.6.12.6; \
/usr/bin/make -j2 ARCH=mips \
HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" \
HOSTCXX="/usr/bin/g++" \
INSTALL_HDR_PATH=/root/buildroot-2011.11/output/toolchain/linux headers_install; \
)
make[1]: Entering directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
Makefile:485: .config: Datei oder Verzeichnis nicht gefunden
make[1]: *** Keine Regel, um »headers_install« zu erstellen. Schluss.
make[1]: Leaving directory `/root/buildroot-2011.11/output/toolchain/linux-2.6.12.6'
make: *** [/root/buildroot-2011.11/output/toolchain/linux/.configured] Fehler 2
Run Code Online (Sandbox Code Playgroud)
我认为问题是这个旧内核在其makefile中没有这个选项.
我的下一个尝试是使用新内核3.2.6的Makefile和scripts目录替换旧内核.
这是输出:
# make
(cd /root/buildroot-2011.11/output/toolchain/linux-2.6.12.6; \ …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我理解我需要如何配置buildroot,以便我能够成功启动自己的文件系统并登录到它?
我有一个(貌似)工作内核,现在我创建了自己的文件系统(除了将控制台设置为ttyAMA0之外,没有真正更改构建根目录中的任何设置),但启动过程似乎挂起而没有任何问题:
....
[ 3.130000] VFS: Mounted root (ext3 filesystem) on device 179:2.
[ 3.140000] Freeing init memory: 144K
Starting logging: OK
Starting network...
ip: RTNETLINK answers: Operation not permitted
ip: SIOCSIFFLAGS: Permission denied
Run Code Online (Sandbox Code Playgroud)
这里可以看到整个启动日志:http://paste.ubuntu.com/1364407/
我知道/ etc/inittab控制启动过程,内容如下所示:
# Startup the system
null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -o remount,rw / # REMOUNT_ROOTFS_RW
null::sysinit:/bin/mkdir -p /dev/pts
null::sysinit:/bin/mkdir -p /dev/shm
null::sysinit:/bin/mount -a
null::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the sttyAMA0::respawn:/sbin/getty …Run Code Online (Sandbox Code Playgroud) 我目前有一个 buildroot 配置,它输出 U-Boot 包装的根文件系统。该过程的一部分覆盖来自外部目录的文件,其中包含网络接口、profile.d 脚本和一些自定义可执行文件等内容。
我的问题是:在不重建所有额外包的情况下重新创建根文件系统映像的最佳方法是什么?仅删除输出/图像和输出/目标目录,然后执行“全部制作”似乎不起作用。对于最常见的用法,我不需要重建工具链或任何其他包。我只需要重新创建根文件系统,并执行覆盖。但是,似乎没有一个好的 make 目标可以仅对输出进行清理,或者构建目标文件系统/图像。
谢谢,
-D
我遇到了一个希望能尽快解决的问题。
我有幸通过 BUILDROOT 编译 Linux zImage 内核,构建 rootfs,拥有引导加载程序,所以一切都是正确的。
但是在启动时,系统是如此之小,以至于我没有像 apt-get、yum 之类的包管理器......
尽管我有网络(wget 是可能的),但我不知道如何在我的主机中拥有一个简单的 gcc(Buildroot 不再允许编译 gcc)或更简单的包管理器。
交叉编译所有东西太无聊了,我认为更好的解决方案是 apt-get 包,解决依赖关系并为 ARM 架构安装它。
我使用包括 IPKG 和 OPKG 在内的包管理器选项重新编译,但存储库不起作用并且命令不返回任何内容(IE ipkg --list 等)
是否有人遇到过同样的问题,在编译的最小系统上拥有一个好的包管理器并为 Buildroot 构建优雅的最佳方法是什么。
在 ARM 主机上拥有本机编译工具链的最佳方法是什么?
感谢您的回答
我的目的是在这个最小的主机系统上本地编译我的代码,包括 -lm -lpthread 和 LIRC 模块和头文件。
斯特凡, 法国
---- 附加信息 ---
你好,
我刷新此标签以获取设置信息:
最近 buildroot 不再允许本地编译 gcc 包,即使 make 和其他工具在最近的 buildroot 发行版上可用
gcc 和其他标签被标记为已弃用
所以需要/有义务在主机上交叉编译所以我做了什么
为方便起见,我为我的代码提供了 Makefile,其中包含 pthread 和 lirc_client 的依赖项
有兴趣的可以问我
stef, 法国
编辑文件时:
/etc/network/interface
像这样:
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)
当我输入命令时make,我的界面将恢复默认设置。如何在Buildroot中设置静态地址接口eth0?
我一直在使用buildroot来使用uclibc构建工具链。现在,buildroot下载所有包,解压并构建它们。
我想更改工具链的uclibc源代码,然后使用新源代码重新编译工具链,但我只是不明白如何以漂亮的方式完成它。
完成构建后,所有提取的源都可以在“ <buildroot-src>/output/build ”中找到。但更改它们不会给我带来任何好处,因为 buildroot 仅在构建期间使用此目录作为中间目录。
所以我的想法是,也许可以更改uclibc包中的 .mk 文件,并使其使用我修改过的源代码,而不是下载并提取它(尚未确定是否可以在那里完成),但这似乎是一个有点难看的解决方案。
所以我的问题是:有没有更好的方法告诉 buildroot 使用现有源构建包?
我只想为我的Buildroot项目安装和构建工具链。make help建议该命令make <options> toolchain应该起作用;但是,运行该命令只是返回Nothing to be done for 'toolchain'.而output/host不会创建。
这是我的第一个问题,如果我错过重要规则,请随意批评或纠正我.
最近我的任务是将旧的DOS C代码移植到Linux平台上.字体处理由bitfonts实现.我编写了一个函数,如果你将正确的Unicode值传递给它,它能够绘制选定的字形.
但是,如果我尝试将char转换为USHORT(函数需要此类型),当字符在ASCII表之外时,我得到错误的值.
char* test;
test = "°";
printf("test: %hu\n",(USHORT)test[0]);
Run Code Online (Sandbox Code Playgroud)
显示的数字(控制台)应为176,而不是194.
如果你使用"!" 将显示正确的值33.我通过设置GCC编译器标志确保char是无符号的
-unsigned-char
Run Code Online (Sandbox Code Playgroud)
GCC编译器使用UTF-8编码作为默认编码.我真的不知道现在的问题在哪里.
我是否需要在编译器中添加另一个标志?
更新
在@Kninnug回答的帮助下,我设法编写了一个能够为我生成所需结果的代码.
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <wchar.h>
#include <stdint.h>
int main(void)
{
size_t n = 0, x = 0;
setlocale(LC_CTYPE, "en_US.utf8");
mbstate_t state = {0};
char in[] = "!°?"; // or u8"zß?"
size_t in_sz = sizeof(in) / sizeof (*in);
printf("Processing %zu UTF-8 code units: [ ", in_sz);
for(n = 0; n < in_sz; ++n)
{
printf("%#x ", (unsigned char)in[n]);
} …Run Code Online (Sandbox Code Playgroud) Buildroot 提供了一种将 sqlite 添加到我的构建配置中的方法,但是我看不到任何表明 sqlite 库是否具有多线程支持的地方。如何判断 Builtroot 包含的 sqlite 库版本是否具有多线程支持。
谢谢。
有没有办法在不清理整个项目的情况下重建 boot.scr 脚本?我删除了旧的 boot.scr 脚本,并且不知道如何生成新脚本(仅有make clean帮助)
设置变量 BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE。
make uboot-dirclean uboot-tools-dirclean没有帮助。
我发现创建 boot.scr 的 mkimage 脚本是从 uboot-tools 安装规则中调用的,但即使我清除 uboot-tools boot.scr 也不再生成