Build ARM的交叉编译内核模块
我想在x86 Ubuntu 13.04上交叉编译针对ARM Angstrom(BeagleBoard)的rtl8192cu驱动程序 交叉编译先决条件:Build ARM的交叉编译内核模块,build,linux-kernel,kernel,arm,cross-compiling,Build,Linux Kernel,Kernel,Arm,Cross Compiling,我想在x86 Ubuntu 13.04上交叉编译针对ARM Angstrom(BeagleBoard)的rtl8192cu驱动程序 交叉编译先决条件: rtl8192cu驱动器 交叉工具链(CodeSourcery/arm angstrom linux gnueabi) 内核源 出于这个原因,我在Ubuntu机器上复制了BeagleBoard的内核源代码usr/src目录(它们是在BeagleBoard上编译的,因为我需要重建内核) 运行交叉编译的make,我得到以下错误: make ARCH=
make
,我得到以下错误:
make ARCH=arm CROSS_COMPILE=/home/demetres/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi- -C /home/demetres/Desktop/ks1 M=/home/demetres/Desktop/rtl3 modules
make[1]: Entering directory `/home/demetres/Desktop/ks1'
CC [M] /home/demetres/Desktop/rtl3/core/rtw_cmd.o
/bin/sh: scripts/basic/fixdep: cannot execute binary file
make[2]: *** [/home/demetres/Desktop/rtl3/core/rtw_cmd.o] Error 126
make[1]: *** [_module_/home/demetres/Desktop/rtl3] Error 2
make[1]: Leaving directory `/home/demetres/Desktop/ks1'
make: *** [modules] Error 2
如果我运行file fixdep
我会得到:
fixdep: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
这是有道理的,因为fixdep是内核源代码的一部分(在ARM平台上编译)
我的问题是:该过程正确吗?如何修复此错误
编辑:
运行make V=1
:
make ARCH=arm CROSS_COMPILE=/home/demetres/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi- -C /home/demetres/Desktop/ks M=/home/demetres/Desktop/rtl modules
make[1]: Entering directory `/home/demetres/Desktop/ks'
test -e include/linux/autoconf.h -a -e include/config/auto.conf || ( \
echo; \
echo " ERROR: Kernel configuration is invalid."; \
echo " include/linux/autoconf.h or include/config/auto.conf are missing."; \
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo; \
/bin/false)
mkdir -p /home/demetres/Desktop/rtl/.tmp_versions ; rm -f /home/demetres/Desktop/rtl/.tmp_versions/*
make -f scripts/Makefile.build obj=/home/demetres/Desktop/rtl
/home/demetres/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-gcc -Wp,-MD,/home/demetres/Desktop/rtl/core/.rtw_cmd.o.d -nostdinc -isystem /home/demetres/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.3/include -Iinclude -I/home/demetres/Desktop/ks/arch/arm/include -include include/linux/autoconf.h -D__KERNEL__ -mlittle-endian -Iarch/arm/mach-versatile/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -marm -fno-omit-frame-pointer -mapcs -mno-sched-prolog -mabi=apcs-gnu -mno-thumb-interwork -D__LINUX_ARM_ARCH__=5 -march=armv5te -mtune=arm9tdmi -msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack -O1 -Wno-unused-variable -Wno-unused-value -Wno-unused-label -Wno-unused-parameter -Wno-unused-function -Wno-unused -Wno-uninitialized -I/home/demetres/Desktop/rtl/include -DCONFIG_POWER_SAVING -DCONFIG_LITTLE_ENDIAN -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(rtw_cmd)" -D"KBUILD_MODNAME=KBUILD_STR(8192cu)" -c -o /home/demetres/Desktop/rtl/core/rtw_cmd.o /home/demetres/Desktop/rtl/core/rtw_cmd.c
/bin/sh: scripts/basic/fixdep: cannot execute binary file
make[2]: *** [/home/demetres/Desktop/rtl/core/rtw_cmd.o] Error 126
make[1]: *** [_module_/home/demetres/Desktop/rtl] Error 2
make[1]: Leaving directory `/home/demetres/Desktop/ks'
make: *** [modules] Error 2
fixdep是一个ARM二进制文件,您正试图在x86机器(英特尔)上运行它。您可能需要重新编译内核资源(只需生成它们),然后再次尝试交叉编译。请尝试命令中的
V=1
选项,并粘贴已使用make V=1
结果编辑的结果。我检查了丢失的文件,但它们应该在哪里:include/linux/autoconfig.h
和include/config/auto.conf
。在这种情况下,内核源代码可以在x86机器上编译,还是必须在ARM体系结构下编译?是的。您可以在x86机器上为ARM编译。这不是你想要的吗。只是在编译fixdep时,请确保elf是为x86而不是arm构建的。