我想使用 OpenEmbedded在Ubuntu 13.04 主机上构建 Angstrom 内核。
git clone git://github.com/Angstrom-distribution/setup-scripts.git
cd setup-scripts
MACHINE=beagleboard./oebb.sh config beagleboard
MACHINE=beagleboard./oebb.sh update
MACHINE=beagleboard./oebb.sh bitbake virtual/kernel
Run Code Online (Sandbox Code Playgroud)
构建内核的原因是为了能够在主机上交叉编译内核驱动程序,针对 Angstrom 发行版(BeagleBoard)。Beagleboard 运行 2.6.32 的预构建映像。
据我所知,交叉编译不仅必须针对 Angstrom 发行版,还必须针对 BeagleBoard 运行的相同内核版本。OE如何选择“首选”版本?有什么办法可以选择 BitBake 将构建的内核版本吗?
我有一个在 Docker 容器(CentOS 7)上运行的 BitBake 构建过程。在recipe gcc-cross-i586-5.2.0-r0: task do_compile我尝试的每次运行中,BitBake 都会失败。
的输出示例bitbake:
NOTE: recipe gcc-cross-i586-5.2.0-r0: task do_compile: Started
ERROR: Worker process (367) exited unexpectedly (-9), shutting down...
ERROR: Worker process (367) exited unexpectedly (-9), shutting down...
ERROR: Worker process (367) exited unexpectedly (-9), shutting down...
ERROR: Worker process (367) exited unexpectedly (-9), shutting down...
NOTE: Tasks Summary: Attempted 1538 tasks of which 17 didn't need to be rerun and all succeeded.
Run Code Online (Sandbox Code Playgroud)
这是问题recipe gcc-cross-i586-5.2.0-r0: task do_compile …
我有一个基于autotools的BitBake配方,我希望安装二进制文件/usr/local/bin和安装库/usr/local/lib(而不是/usr/bin和/usr/lib,它们是默认的目标目录).
这是autotools.bbclass我发现重要文件的一部分.
CONFIGUREOPTS = " --build=${BUILD_SYS} \
--host=${HOST_SYS} \
--target=${TARGET_SYS} \
--prefix=${prefix} \
--exec_prefix=${exec_prefix} \
--bindir=${bindir} \
--sbindir=${sbindir} \
--libexecdir=${libexecdir} \
--datadir=${datadir} \
--sysconfdir=${sysconfdir} \
--sharedstatedir=${sharedstatedir} \
--localstatedir=${localstatedir} \
--libdir=${libdir} \
...
Run Code Online (Sandbox Code Playgroud)
我认为,最简单的方法来完成我想要做的是简单地改变${bindir}和${libdir},或者改变${prefix}到/usr/local,但我还没有这方面的任何成功.有没有办法改变这些安装变量,或者我是否以错误的方式考虑这个问题?
根据Ross Burton的建议,我尝试将以下内容添加到我的食谱中:
prefix="/usr/local"
exec_prefix="/usr/local"
Run Code Online (Sandbox Code Playgroud)
但这会导致构建在该配方的do_configure()任务期间失败,并返回以下内容:
| checking for GLIB... no
| configure: error: Package requirements (glib-2.0 >= 2.12.3) were not met:
|
| No package …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Yocto项目,版本:poky-jethro
我想为Raspberry Pi构建一个版本的发行版poky
Build Configuration:
BB_VERSION = "1.28.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "Ubuntu-14.04"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "raspberrypi"
DISTRO = "poky"
DISTRO_VERSION = "2.0.1"
TUNE_FEATURES = "arm armv6 vfp arm1176jzfs callconvention-hard"
TARGET_FPU = "vfp"
meta
meta-yocto = "jethro:3b223f75eec1738fbc913858e8e11c8305e3edcb"
meta-oe
meta-multimedia
meta-networking
meta-python = "jethro:c305ac5d2f5285d5eec8952a4ca7f3b4f89aed96"
meta-qt5 = "jethro:9bfcf79fcd824efb9f2a9bd72ecbedfee1315c96"
meta-raspberrypi = "jethro:f2cff839f52a6e6211337fc45c7c3eabf0fac113"
meta-rpi = "jethro:3ef71867eeb3669da40019469385a437843e8245"
Run Code Online (Sandbox Code Playgroud)
我成功地在另一个操作系统"Ubuntu-14.0403"上构建系统但是当我尝试在另一个版本"Ubuntu-14.0404"上构建系统时
出现此错误
[Errno 36]文件名太长
我想强制重新编译一个包,就像那样:
bitbake -f -c compile mypackage
Run Code Online (Sandbox Code Playgroud)
不过,我也希望被执行的所有以下任务(如install,package等),就像我曾呼吁bitbake mypackage从一个完全干净的状态.这可以在完成一个步骤,而不是下面的两个?
bitbake -f -c compile mypackage
bitbake mypackage
Run Code Online (Sandbox Code Playgroud)
或者作为替代解决方案,我可以以某种方式"污染"编译任务,以便bitbake mypackage从编译开始执行所有操作吗?
我第一次将 Yocto 用于带有 Xilinx Zynq 的 ARM 嵌入式系统。我想进行一些需要进入 menuconfig 实用程序的配置更改。Yocto 文档展示了如何为 Linux 内核执行此操作
bitbake yocto-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
其中,对于 Xilinx,我变成了
bitbake linux-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
它运作良好。
现在,我想对 u-boot 执行相同的操作,并使用 menuconfig 实用程序更改 .config 文件。我在 Yocto 或 Xilinx 文档中找不到任何方法。我尝试了显而易见的
bitbake u-boot-xlnx -c menuconfig
Run Code Online (Sandbox Code Playgroud)
只是为了得到一条错误消息:
错误:目标 u-boot-xlnx 不存在任务 do_menuconfig
知道如何使用 Yocto 进入 u-boot menuconfig 吗?
编辑:这是我使用的图层
BBLAYERS ?= " \
/home/sylvain/poky/meta \
/home/sylvain/poky/meta-poky \
/home/sylvain/poky/meta-yocto-bsp \
/home/sylvain/poky/openembedded-core/meta \
/home/sylvain/poky/meta-xilinx \
"
Run Code Online (Sandbox Code Playgroud) TL; DR:是否有一种方法可以在每次生成映像时强制重新编译程序包?
我有一个bbappend,do_deploy_append后面附加了一个文件,如果我修改此步骤,则在使用它生成图像时不会重新编译该配方。这可能会导致很难找到错误。Bitbake假定它没有改变。我只有2个这样的软件包,非常小。
是否有一个参数可以强制不手动进行清理和重新编译那些软件包?
我正在使用Yocto morty
如果我不得不使用 Yocto,但我不需要自定义操作系统,而是更喜欢常见的 ubuntu 16.04,该怎么办?有没有办法使用 yocto 环境创建它?
是否有将新的空目录添加到 rootfs 的方法?我尝试将其添加到我的 bbappend 文件之一中:
do_install() {
install -d ${D}/tmp/myNewDir
}
FILES_${PN} += "/tmp/myNewDir"
Run Code Online (Sandbox Code Playgroud)
但我收到了一个非描述性错误, Function failed: do_install
我接管了一个 Yocto 项目,在一个 .bb 配方文件中,我看到以下几行在图像中安装新目录:
do_install() {
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/apiary
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/lib
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/config
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/scripts
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/keys
Run Code Online (Sandbox Code Playgroud)
这有效,但我很困惑。从我阅读 Yocto 和做 do_install 来看,我认为-m选项仅用于安装文件而不是目录。
使用 install 命令执行install -m 0755 -d,-m和-d选项的效果是什么?
另外,为什么我看到的大多数其他目录安装中没有 ${D} 变量?对于这样的问题,我通常不会求助于 Stack Overflow,但有太多的不一致,我不明白,而且很难找到答案。
bitbake ×10
yocto ×9
openembedded ×5
linux ×2
build ×1
docker ×1
linux-kernel ×1
makefile ×1
rootfs ×1
u-boot ×1
ubuntu ×1
ubuntu-14.04 ×1