我有一个elf格式的Linux内核映像,我想找出.config
用于构建这个内核的文件.当我对图像进行objdump时,我看到一个名为kernel_config_data
包含文本但看起来不像配置文件的部分.有没有办法检索这些信息?
我可以使用以下命令.config
根据基于ARM的自定义板的指定体系结构默认值创建Linux内核文件:
ARCH=arm make defconfig KBUILD_DEFCONFIG=var_som_mx6_android_defconfig
Run Code Online (Sandbox Code Playgroud)
我以为这个命令或多或少复制./arch/arm/configs/var_som_mx6_android_defconfig
到了./.config
.但是,生成的.config
文件并不完全是副本:
$ diff --unified arch/arm/configs/var_som_mx6_android_defconfig .config
--- arch/arm/configs/var_som_mx6_android_defconfig 2017-01-20 12:10:51.891515984 -0800
+++ .config 2017-01-26 15:31:29.000000000 -0800
@@ -407,6 +407,7 @@
CONFIG_ARM_ERRATA_751472=y
CONFIG_ARM_ERRATA_794072=y
CONFIG_ARM_ERRATA_761320=y
+CONFIG_ARM_ERRATA_845369=y
# CONFIG_ARM_ERRATA_753970 is not set
CONFIG_ARM_ERRATA_754322=y
# CONFIG_ARM_ERRATA_754327 is not set
@@ -2683,7 +2684,6 @@
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
# CONFIG_CUSE is not set
-CONFIG_AUFS_FS=y
#
# Caches
@@ -2759,6 +2759,21 @@
# CONFIG_PSTORE is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is …
Run Code Online (Sandbox Code Playgroud) 我已经完成make menuconfig
了一个电路板defconfig
并修改了一些配置.当我选择save时,.config
在Kernel top目录中创建了一个new .
我想defconfig
为这个.config
创建的文件创建新的.
我可以将其复制.config
为新defconfig
副本arch/arm/configs/
吗?
$ cp .config arch/arm/configs/board_new_defconfig
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Makefile编译linux内核模块:
obj-m += main.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)
这给了我:
main.c:54: warning: ISO C90 forbids mixed declarations and code
Run Code Online (Sandbox Code Playgroud)
我需要切换到C99.阅读后我注意到我需要添加一个标志-std = c99,不确定它在哪里添加.
如何更改Makefile以便它编译为C99?
我正在面对Linux内核构建系统(Kbuild,内核≥2.6.28)以及更大项目的目录结构和构建系统.我们的项目包含一个树外的Linux内核模块,我们的目录结构如下所示(显然是简化的):
checkout/src/common/*.c source files (common to Linux and other platforms)
checkout/src/linux-driver/*.c source files (for the Linux kernel driver)
checkout/build/linux/Kbuild Kbuild
tmp/linux-2.6.xx/ where the Linux kernel is unpacked and configured
output/linux-arm-debug/ where object files must end up
Run Code Online (Sandbox Code Playgroud)
构建过程不得修改任何内容checkout
,并且构建模块不得修改任何内容tmp/linux-2.6.xx
.所有输出文件必须最终output/linux-arm-debug
(或在构建时选择任何体系结构和调试变体).
我已经阅读kbuild/modules.txt
,并开始写我的Kbuild
文件:
MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)
obj-m += $(MOD_OUTPUT_DIR)/foo_mod.o
$(MOD_OUTPUT_DIR)/our_module-objs := $(MOD_OUTPUT_DIR)/foo_common.o $(MOD_OUTPUT_DIR)/foo_linux.o
Run Code Online (Sandbox Code Playgroud)
这会将目标文件存储在与Kbuild
生命不同的目录中.现在我如何指定foo_common.o
需要编译…/checkout/src/common/foo_common.c
和foo_linux.o
从中编译…/checkout/src/linux-driver/foo_linux.c
?
从头开始编译Linux时,我意识到编译时会出现编译代码.
例如CC文件名,LD文件名,CC [M]文件名.
这些代码是什么意思?
我打算在我的项目中添加对menuconfig的支持.该项目与linux内核无关,所以我必须在menuconfig和Makefile中从头开始编写所有内容.
如何添加对menuconfig的支持并创建Kconfig并使makefile读取.config中的定义.
任何好的教程开始?
我正在使用 LeopardBoard DM368,我想启用一些视频硬件。相关模块有 vpfe-capture、isif 和 tvp7002。
我已经编写了一个 defconfig 文件,其中包含我认为是正确的 CONFIG_FOO 参数集,以便一切正常工作。从各个 Kconfig 文件中出现的依赖关系来看,我相信我已经正确完成了所有操作,但我似乎无法阻止 kconf 丢弃CONFIG_ISIF
和CONFIG_VPFE_CAPTURE
.
我非常丑陋的选择是进入并开始手动修改 makefile。这可以获取我想要的模块,但它显然与 Kconfig 系统的设计和意图不一致,并且会破坏任何像“make gconfig”这样的工具。
make 有一个“-d”详细标志来解释它如何处理依赖项。kconf 是否有类似的东西,我可以在其中解释为什么它没有给我我想要获取的两个 CONFIG?
在内核 Makefile 中我发现了如下代码:
ctags CTAGS CSCOPE: $(HEADERS) $(SOURCES)
$(ETAGS) $(ETAGSFALGS) $(HEADERS) $(SOURCES)
$(call cmd, ctags)
Run Code Online (Sandbox Code Playgroud)
另外,我在哪里可以找到宏或函数?