sco*_*007 1 cross-compiling linux-kernel ldflags
我正在尝试为ARM linux编译AODV.我使用SabreLite作为内核版本3.0.35_4.1.0的板.值得一提的是,我正在使用openembedded为我的主板创建Linux发行版.AODV源代码(http://sourceforge.net/projects/aodvuu/)有一个README文件,它提供了一些关于如何在ARM上安装它的指示.(http://w3.antd.nist.gov/wctg/aodv_kernel/kaodv_arm.html).
我能够升级makefile以便与2.6之后的内核版本一起使用(如上所述,我有3.0.35_4.1.0内核版本).所以,基本上,我要做的是我必须创建一个模块(比如说file.ko),然后将它加载到ARM中(使用insmod file.ko命令).
为此,我使用交叉编译器,其中的一些值如下所示:
echo $ CC:arm-oe-linux-gnueabi-gcc -march = armv7-a -mthumb-interwork -mfloat-abi = hard -mfpu = neon -mtune = cortex-a9 --sysroot =/usr/local/oecore- x86_64的/ sysroots/cortexa9hf-VFP氖-OE-Linux的gnueabi
echo $ ARCH = arm
echo $ CFLAGS:O2 -pipe -g -feliminate-unused-debug-types
echo $ LD:arm-oe-linux-gnueabi-ld --sysroot =/usr/local/oecore-x86_64/sysroots/cortexa9hf-vfp-neon-oe-linux-gnueabi
echo $ LDFLAGS:-Wl,-O1 -Wl, - hash-style = gnu -Wl, - as-needed -Wl, - as-needed
当我启动"make命令"时,我收到以下错误:
LD [M] /home/scof/script_emulation/AODV/aodv-uu/lnx/kaodv.o
arm-oe-linux-gnueabi-ld:无法识别的选项'-Wl,-O1'
arm-oe-linux-gnueabi-ld:使用--help选项获取用法信息
它表明链接器有问题.这个链接器来自交叉编译工具,我通常不应该触摸它.
无论如何,为了解决以上错误,我尝试撤消LDFLAGS,如下所示: export LDFLAGS ='',之后,make命令工作,我得到模块kaodv.ko.但是当我将它插入我的ARM进行检查时,它不起作用.它实际上冻结了我的终端
所以我的问题是,编译时是否必须指定LDFLAGS?撤销LDFLAGS是否会对生成的内核模块产生影响.实际上,我试图了解可能出现问题的地方,唯一能找到的是我不应该手动改变LDFLAGS.但如果我不改变de LDFLAGS,我会得到无法识别的选项错误.
我的第二个问题是,在ARM编译中LDFLAGS的可能值是什么
谢谢 !!
echo $ LDFLAGS:-Wl,-O1 -Wl, - hash-style = gnu -Wl, - as-needed -Wl, - as-needed
在基于GCC的工具链中调用链接器有两种常用方法.一种是直接进行,另一种是使用GCC作为前端来调用链接器,而不是直接调用它.执行此操作时,为链接器选择的选项将作为前缀,-Wl,以便GCC知道传递它们而不是解释它们本身.
在您的情况下,LD本身的错误消息
arm-oe-linux-gnueabi-ld:无法识别的选项'-Wl,-O1'
表示您的构建系统LDFLAGS 直接传递给链接器,而不是通过GCC.
因此,您应该删除-Wl,前缀,而您的LDFLAGS将改为
-O1 --hash-style = gnu --as-needed --as-needed
(最后一个论点的重复可能毫无意义但是良性)
| 归档时间: |
|
| 查看次数: |
10391 次 |
| 最近记录: |