【发布时间】:2015-06-01 20:33:48
【问题描述】:
我正在为 ARM 板编译 linux。我需要对内核存储库中现有的驱动程序代码进行一些自定义更改并重新加载驱动程序。
我希望在制作后在驱动程序目录中找到一个“.ko”文件,但不存在这样的文件。显然 uImage/设备树图像编译不能那样工作。
我是否需要编写自己的 Makefile 来编译独立的设备驱动程序?
这可能是一个愚蠢的问题,但很抱歉我对内核/设备驱动程序很陌生。
编辑: 我遵循此处概述的过程:http://odroid.com/dokuwiki/doku.php?id=en:c1_building_kernel 在 git checkout 并安装交叉编译器(arm-linux-gnueabihf-gcc 4.9.2)之后,我发出了基本的 make 命令
$ make odroidc_defconfig
$ make -j4
$ make -j4 modules
$ make uImage
所有步骤都成功。日志的最后几行看起来像
KSYM .tmp_kallsyms1.o
KSYM .tmp_kallsyms2.o
LD vmlinux
SORTEX vmlinux
SYSMAP System.map
OBJCOPY arch/arm/boot/ccImage
Kernel: arch/arm/boot/ccImage is ready
Image arch/arm/boot/ccImage.lzo is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-3.10.72
Created: Sat Mar 28 22:44:45 2015
Image Type: ARM Linux Kernel Image (lzo compressed)
Data Size: 5459649 Bytes = 5331.69 kB = 5.21 MB
Load Address: 00208000
Entry Point: 00208000
Image arch/arm/boot/uImage is ready
编辑 2:驱动程序代码的路径 https://github.com/hardkernel/linux/tree/odroidc-3.10.y/drivers/amlogic/efuse
【问题讨论】:
-
我假设您想说“但不存在这样的文件”。你发出了什么命令来构建内核对象?输出是什么?
-
同意想知道构建过程和输出是什么,此外,您的构建系统是否可能配置为将输出转储到树外的某个地方?您可以尝试使用 find somepath -name "*.ko" 还要确保模块源目录中的 Makefile 已启用感兴趣的模块,无论是永久启用还是通过启用的配置选项。如果您真的不确定,请在源代码中添加 #error 或其他内容,然后查看构建是否中断 - 如果没有,则说明您的源代码没有被处理。
-
@mcleod_ideafix - 添加编译信息
-
@ChrisStratton - 执行
find . -name "*.ko"为我提供了“ko”文件列表,但没有我感兴趣的驱动程序。并且该驱动程序确实被编译(例如。添加语法错误中止汇编) -
显示相关驱动程序的 Makefile,或者更好的深度链接到它所在的源代码树。您确定它应该作为一个模块构建,而不是静态链接到内核吗?显示它所依赖的任何配置选项的状态。
标签: linux linux-kernel linux-device-driver