我正在使用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
现在回答我的问题:
我是否完全错了?交叉开发内核模块的推荐方法是什么?我这样做是因为我不想打开bitbake devshell并且每次都在那里进行代码开发。
这种工作(我可以编译工作模块)但make脚本给我一条错误消息,说明内核配置无效。我也尝试过将KERNEL_PATH设置为内核包git目录(build / tmp / work /// git(其中包含看似有效的.config文件)并且我得到了类似的错误。
< / LI>如何在不需要打开devshell的情况下提取env?我想编写一个提取它的脚本,以便我的同事不必手动完成。 devshell命令打开一个完全独立的Xterm窗口,这反过来削弱了它的可编程性......
答案 0 :(得分:2)
你正在寻找sdk安装程序:
bitbake your-image -c populate_sdk
然后,从您的构建目录转到tmp / deploy / sdk
并执行生成的shell脚本。
此脚本将允许您生成并安装sdk。
不仅sdk允许您通过提供所需的环境变量和工具来(交叉)编译内核,而且它还将提供一个sysroot +一个独立的工具链来帮助您轻松(并且很容易,我的意思是非常容易)使用autotools交叉编译应用程序(只要你提供Makefile.am和configure.ac)
只需找到environment-setup- *文件,进入你的内核目录并编译。 或者,对于基于autotools的应用程序开发, 转到包含项目的文件夹(sources + Makefile.am和configure.ac)
并且做:
libtoolize --automake
aclocal
autoconf
automake -a
现在您的项目已准备好进行编译:
./configure $CONFIGURE_FLAGS
make
make install DESTDIR=path/to/destination/dir
答案 1 :(得分:0)
如果您在快速入侵之后,而不是Ayman的更完整的解决方案,则目录中提供了完成每个构建阶段的脚本运行:
./build/tmp/work/{target_platform}/{package}/{version}/temp/run.do_{build_stage}
这些脚本可以从./temp/
目录独立运行,并包含所需的所有环境变量。