- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个第 3 方设备驱动程序,我正在尝试对其进行交叉编译。当我构建驱动程序时一切顺利,但我没有看到任何 driver.ko 文件,但是 driver.o 文件生成正常并且在构建过程中我没有看到任何错误。我也尝试过使用选项 V=1 并且看到以下错误
echo;
echo " ERROR: Kernel configuration is invalid.";
echo " include/generated/autoconf.h or include/config/auto.conf are missing.";
echo " Run 'make oldconfig && make prepare' on kernel src to fix it.";
echo;
但我的内核配置是正确的,我已经尝试使用此配置的简单 hello world 模块,在那种情况下我可以构建我的模块但仍然看到此错误消息。我还可以在内核源代码中看到文件 include/generated/autoconf.h 和 include/config/auto.conf。仍然是为什么我无法构建我的驱动程序模块。
这是构建的输出。
LD [M] /home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553/imx6build/host/os/linux/ar6000.o
Building modules, stage 2.
MODPOST 0 modules
make[2]: Leaving directory `/home/farshad/Work/CSP/projects/phase_1/farshad/cspbox/platform/imx6/mel5/fs/workspace/linux-2.6.38-imx6'
如您所见,ar6000.o 构建正确,没有任何错误,但为什么没有构建 ar6000.ko,否则它应该报告“MODPOST 1 模块”。由于 ar6000.ko 没有在完整构建过程结束时构建,我也收到以下错误
cp: cannot stat `/home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553/imx6build/host/os/linux/ar6000.ko': No such file or directory
2404 make[1]: *** [install] Error 1
这是显而易见的。我的问题是为什么我一开始没有得到 ar6000.ko。通过谷歌搜索,有人也遇到了这个问题,并提到用 sudo 运行 make 解决了它,但它没有给我带来好运!
我在想我的内核配置是否有任何问题(即驱动程序正在寻找一些我没有在我的内核中启用的配置设置,但在那种情况下它应该给编译器错误寻找所需的#define),另一点可能是驱动程序构建系统有问题,我正在努力解决这个问题。我的交叉编译环境很好,因为我在为我的 (Ubuntu x86) 机器构建相同的驱动程序时看到完全相同的问题!!
任何想法。此致,法鲁克·阿尔沙德
更新#1它是一个 3rd 方驱动程序包,它还与驱动程序模块一起构建其他实用程序。这是驱动模块构建过程的输出
make CT_BUILD_TYPE=MX6Q_ARM CT_OS_TYPE=linux CT_OS_SUB_TYPE= CT_LINUXPATH=~/Work/CSP/projects/phase_1/farshad/cspbox/platform/imx6/mel5/fs/workspace/linu x-2.6.38-imx6 CT_BUILD_TYPE=MX6Q_ARM CT_CROSS_COM PILE_TYPE=~/bin/mgc/CodeSourcery/Sourcery_CodeBench_for_ARM_GNU_Linux/bin/arm-none-linux- gnueabi- CT_ARCH_CPU_TYPE=arm CT_HC_DRIVERS=pci_std/ CT_MAKE_INCLUDE_OVERRIDE= CT_BUILD_OUTPUT_OVERRIDE=/home/far shad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553 /imx6build/host/.output/MX6Q_ARM-SDIO/image -C /home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux _release_[posted_2011_8_19_olca3.1RC_553/imx6build/host/sdiostack/src default
make[3]: Entering directory `/home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olc a3.1RC_553/imx6build/host/sdiostack/src'
make -C ~/Work/CSP/projects/phase_1/farshad/cspbox/platform/imx6/mel5/fs/workspace/linux-2.6.38-imx6 SUBDIRS=/home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca 3.1RC_553/imx6build/host/sdiostack/src ARCH=arm CROSS_COMPILE=~/bin/mgc/CodeSourcery/Sourcery_CodeBench_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi- EXTRA_CFLAGS="-DLINUX -I/home/farshad/Work/CSP/board s/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553/imx6build/host/sdiostack/src/include -DDEBUG" modules
make[4]: Entering directory `/home/farshad/Work/CSP/projects/phase_1/farshad/cspbox/platform/imx6/mel5/fs/workspace/linux-2.6.38-imx6'
Building modules, stage 2.
MODPOST 0 modules
make[4]: Leaving directory `/home/farshad/Work/CSP/projects/phase_1/farshad/cspbox/platform/imx6/mel5/fs/workspace/linu x-2.6.38-imx6'
这里是驱动模块的Makefile。
ifdef CT_MAKE_INCLUDE_OVERRIDE
-include $(CT_MAKE_INCLUDE_OVERRIDE)
else
-include localmake.$(CT_OS_TYPE).inc
-include localmake.$(CT_OS_TYPE).private.inc
endif
export CT_OS_TYPE
export CT_OS_SUB_TYPE
export CT_OS_TOP_LEVEL_RULE
export CT_PASS_CFLAGS
export CT_SRC_BASE
export CT_BUILD_SUB_PROJ
# this makefile can only be invoked from the /EMSDIO/src base
CT_SRC_BASE :=$(shell pwd)
# export flags for which HCDs to build. Set the hcd driver name in hcd/ in your localmake.*.inc file.
export CT_HC_DRIVERS
export PDK_BUILD
export HDK_BUILD
export ALL_BUILD
export ATHRAW_FD_BUILD
export BUS_BUILD
# For Linux
ifeq ($(CT_OS_TYPE),linux)
#make a copy for linux 2.4
EXTRA_CFLAGS += -DLINUX -I$(CT_SRC_BASE)/include
ifneq ($(CT_RELEASE),1)
EXTRA_CFLAGS += -DDEBUG
endif
export EXTRA_CFLAGS
CT_SRC_OUTPUT :=$(CT_SRC_BASE)/../output
ifdef CT_BUILD_OUTPUT_OVERRIDE
_CT_COMPILED_OBJECTS_PATH :=$(CT_BUILD_OUTPUT_OVERRIDE)
_MAKE_OUTPUT_DIR :=
_CLEAN_OUTPUT_DIR :=
else
_CT_COMPILED_OBJECTS_PATH := $(CT_SRC_OUTPUT)/$(CT_BUILD_TYPE)
_MAKE_OUTPUT_DIR := mkdir --parents $(_CT_COMPILED_OBJECTS_PATH)
_CLEAN_OUTPUT_DIR := rm -R -f $(CT_SRC_OUTPUT)
endif
ifeq ($(CT_OS_SUB_TYPE),linux_2_4)
CT_PASS_CFLAGS := $(EXTRA_CFLAGS)
_CT_MOD_EXTENSION :=o
ifeq ($(ALL_BUILD),1)
subdir-m += busdriver/ lib/ hcd/ function/
else
ifeq ($(BUS_BUILD),1)
subdir-m += busdriver/ lib/ hcd/
else
ifeq ($(PDK_BUILD),1)
subdir-m += function/
else
ifeq ($(HDK_BUILD),1)
subdir-m += hcd/ function/
endif
endif
endif
endif
# add in rules to make modules
CT_OS_TOP_LEVEL_RULE :=$(CT_LINUXPATH)/Rules.make
include $(CT_OS_TOP_LEVEL_RULE)
else
#2.6+
_CT_MOD_EXTENSION :=ko
ifeq ($(ALL_BUILD),1)
obj-m += busdriver/ lib/ hcd/ function/
else
ifeq ($(BUS_BUILD),1)
obj-m += busdriver/ lib/ hcd/
else
ifeq ($(PDK_BUILD),1)
obj-m += function/
else
ifeq ($(HDK_BUILD),1)
obj-m += hcd/ function/
endif
endif
endif
endif
endif
ifdef CT_BUILD_SUB_PROJ
_CT_SUBDIRS=$(CT_BUILD_SUB_PROJ)
else
_CT_SUBDIRS=$(CT_SRC_BASE)
endif
ifdef CT_CROSS_COMPILE_TYPE
CT_MAKE_COMMAND_LINE=$(CT_OUTPUT_FLAGS) -C $(CT_LINUXPATH) SUBDIRS=$(_CT_SUBDIRS) ARCH=$(CT_ARCH_CPU_TYPE) CROSS_COMPILE=$(CT_CROSS_COMPILE_TYPE)
else
CT_MAKE_COMMAND_LINE=$(CT_OUTPUT_FLAGS) -C $(CT_LINUXPATH) SUBDIRS=$(_CT_SUBDIRS)
endif
makeoutputdirs:
$(_MAKE_OUTPUT_DIR)
default: makeoutputdirs
echo " ************ BUILDING MODULE ************** "
$(MAKE) $(CT_MAKE_COMMAND_LINE) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
echo " *** MODULE EXTENSION = $(_CT_MOD_EXTENSION)"
$(CT_SRC_BASE)/../scripts/getobjects.scr $(CT_SRC_BASE) $(_CT_COMPILED_OBJECTS_PATH) $(_CT_MOD_EXTENSION)
ifeq ($(CT_OS_SUB_TYPE),linux_2_4)
# on 2.4 we can't invoke the linux clean with SUBDIRS, it will just clean out the kernel
clean:
find $(_CT_SUBDIRS) \( -name '*.[oas]' -o -name core -o -name '.*.flags' -o -name '.ko' -o -name '.*.cmd' \) -type f -print \
| grep -v lxdialog/ | xargs rm -f
$(_CLEAN_OUTPUT_DIR)
else
clean:
$(MAKE) $(CT_MAKE_COMMAND_LINE) clean
find $(_CT_SUBDIRS) \( -name '*.[oas]' -o -name core -o -name '.*.flags' \) -type f -print \
| grep -v lxdialog/ | xargs rm -f
$(_CLEAN_OUTPUT_DIR)
endif
endif
# For QNX
ifeq ($(CT_OS_TYPE),qnx)
LIST=VARIANT
EARLY_DIRS=lib
##ifndef QRECURSE
QRECURSE=./recurse.mk
##ifdef QCONFIG
###QRDIR=$(dir $(QCONFIG))
##endif
##endif
include $(QRDIR)$(QRECURSE)
endif
最佳答案
好的,我已经找到问题了。我在模块源目录中有方括号字符“[”
LD [M] /home/farshad/Work/CSP/boards/imx6q/ar6k3/ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553/imx6build/host/os/linux/ar6000.o
从路径中删除它效果很好,我得到了我的内核模块目标文件。我改名了
ar6003_3.1_RC_Linux_release_[posted_2011_8_19_olca3.1RC_553
到
ar6003,
也测试过
ar6003_3.1_RC_Linux_release_posted_2011_8_19_olca3.1RC_553
两者都运行良好。我在 Ubuntu 10.04 上构建。我的一位同事在 Ubuntu 11.04 的路径中使用相同的来源构建了“[”字符,并且内核模块目标文件构建得很好,这也表明 grep/find/awk 或此类实用程序在不同版本中的行为发生了变化,正在使用哪个内核构建系统,导致此问题。
问候,法鲁克阿尔沙德。
关于linux - 内核模块不构建 .ko 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751398/
我的 MVC 布局中有以下内容(在底部): @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Sc
我们正在做一个机器人项目,我们将使用相机(ArtCam 130MI)在 Ubuntu 12.04 上进行图像处理,该公司已终止对 Linux 的支持,但向我们发送了编译驱动程序的源代码,但在 load
这两个函数都允许替换/修改绑定(bind)上下文并将其应用于未绑定(bind)的节点。 “未绑定(bind)”表示我自己的自定义绑定(bind)想要使用这些有用的功能必须总是返回 { controls
我正在尝试使用计算来计算某些产品的总和。 function productViewModel(){ self = this; function productModel(data)
我正在尝试将 View 模型序列化为 JSON 以发送回我的服务器,但收到以下错误。 Uncaught Error: Pass a function that returns the value of
我有一个问题。请帮帮我。我有 ko.compulated,它有一个检查 ko.isObservable 变量,我需要 ko.compulated 不对这个变量的更改使用react。请参阅示例: ko.
两者都用于在 View 模型上应用 knockout 验证配置。这两种说法有什么不同? 谢谢 最佳答案 我看起来像配置是为了向后兼容,只是调用 init。 来自验证源( https://github.
ko.validation.group有什么区别和 ko.validatedObservable ?当我应该使用一种而不是另一种时,是否有特殊情况? 最佳答案 ko.validation.group只
我在尝试用 requirejs 很好地进行 knockout 时遇到了问题(从这里的帖子数量来看,其他人也是如此!)。我在这里读到的任何内容都没有遇到过这个问题。 以下是我的require配置: re
背景 Trevor 有一个简单的 knockoutjs 页面,包含三个声明的 ko.observable() 和一个声明的 ko.computed() 问题 Trevor 想删除第三个声明的项目。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是knockout js的新手,我想将knockout.js与asp.net表单应用程序一起使用。我想使用 ajax 调用更新实体,如下所示 // Update product details
我使用 kogrid 显示数据,如下所示: 我的 knockout 虚拟机对 MVC Controller 进行 ajax 调用,以检索形状如下的 DTO: 我想将具有验证失败的值的单元格背景涂成红色
我在使用 KOgrid 时遇到两个问题。 1)我无法在kogrid中获取滚动条。没有滚动条很难进行数据输入。 2)如果不指定硬编码的高度和宽度,我也无法让 kogrid 工作。在我的应用程序中,我不能
我从加载的列表中获取一些数据并将它们添加到可观察数组中,我想将它们显示在另一个列表中,除了数据未显示在屏幕上之外,一切都会进行这是代码 self.addData = function (val) {
我有一个像这样的 ko maaaped 数组。 var Type = []; Type.push("Flip"); Type.push("Bar")
我有一些正在处理的代码是一个更大的预算应用程序的一部分。该位允许用户输入一些每周重复发生的费用,应用程序将根据输入计算每月总计。除了在编辑现有条目时更新表中的每月金额外,一切正常。删除功能会更新每月每
我得到: Uncaught TypeError: Cannot call method 'applyBindings' of undefined 我查看了 chrome 中的“网络”选项卡,发现已加载
我有一张 map ,其中有一个元素显示当前正在加载哪些图层。我在一个可移除的可观察数组中保存了一个层名称列表。加载新图层时,它们会按预期显示。当层完成加载时,它们将按预期移除,除了最后一个。即使调试显
我试图了解保持可观察函数或将其设置为对象之间的区别 我的可观察项目: self.SelectedItem = ko.observable(); 我的观点: @Html.Action("P
我是一名优秀的程序员,十分优秀!