0

我正在为使用 Yocto Linux(1.3 版)的项目开发内核模块。我想使用 Yocto 项目中的内核头文件以及编译器和库,但开发内核模块而不需要每次都运行 bitbake。我最初的解决方案是执行 devshell 任务并使用以下方法提取环境变量:

bitbake mykernel -c devshell

然后在为我打开的新 xterm 窗口中 bitbake:

env | sed 's/\=\(.*\)/\="\1"/' > buildenv #put quotes around r-values in env listing
^D #(I leave the devshell)

然后将其复制到我的开发目录并在运行 make 及其所有选项之前获取它

KERNEL_PATH=/mypathto/build/tmp/sysroots/socfpga_cyclone5/usr/src/kernel
source ./buildenv && make -C $KERNEL_PATH V=1 M=`pwd` \
ARCH=arm CROSS-COMPILE=arm-linux-gnueabihf- \
KERNEL_VERSION=3.13.0-00298-g3c7cbb9 \
CC="arm-linux-gnueabihf-gcc -mno-thumb-interwork -marm" \
LD=arm-linux-gnueabihf-ld  AR=arm-linux-gnueabihf-ar

现在我的问题:

  1. 我会完全错了吗?交叉开发内核模块的推荐方法是什么?我这样做是因为我不想每次都打开 bitbake devshell 并在那里进行代码开发。

  2. 这种工作(我可以编译工作模块)但是 make 脚本给了我一条错误消息,说内核配置无效。我也尝试过将 KERNEL_PATH 设置为内核包 git 目录(build/tmp/work///git(其中包含似乎是有效的 .config 文件),我得到了类似的错误。

  3. 如何在不需要打开 devshell 的情况下提取环境?我想编写一个脚本来提取它,这样我的同事就不必手动执行了。devshell 命令打开了一个完全独立的 Xterm 窗口,这反而削弱了它的可脚本性......

4

2 回答 2

2

sdk 安装程序是您正在寻找的:

bitbake your-image -c populate_sdk

然后,从您的构建目录转到 tmp/deploy/sdk

并执行生成的 shell 脚本。

该脚本将允许您生成和安装 sdk。

sdk 不仅允许您通过提供所需的环境变量和工具来(交叉)编译您的内核,而且它还将提供一个 sysroot + 一个独立的工具链来帮助您轻松(而且我的意思是很容易)交叉编译应用程序自动工具(只要您提供 Makefile.am 和 configure.ac)

只需获取 environment-setup-* 文件,进入您的内核目录并编译。或者,对于基于自动工具的应用程序开发,转到包含您的项目的文件夹(sources + Makefile.am 和 configure.ac)

并做:

libtoolize --automake
aclocal
autoconf
automake -a

现在您的项目已准备好进行编译:

./configure $CONFIGURE_FLAGS
make
make install DESTDIR=path/to/destination/dir
于 2014-11-06T22:29:44.783 回答
0

如果您想要快速破解,而不是 Ayman 更完整的解决方案,运行以完成每个构建阶段的脚本在目录中可用: ./build/tmp/work/{target_platform}/{package}/{version}/temp/run.do_{build_stage}

这些脚本可以从./temp/目录独立运行,并包含所需的所有环境变量。

于 2014-12-17T05:45:52.677 回答