我正在使用 Buildroot 来编译嵌入式 Linux。它工作得很好,因为我有目标 Makefile 配置,但现在我需要 USB 设备的驱动程序。我设法使用 buildroots 在我的主机 Linux 上编译 Qt appilactions(c++) 以瞄准 Linux /output/host/usr/bin/arm-none-linux-gnueabi-c++
。效果很好。
现在我正在尝试编译c文件这位司机。
我这样称呼它:
/output/host/usr/bin/arm-none-linux-gnueabi-gcc -Wall -D__KERNEL__ -DMODULE -I/home/buildroot-2012.08/output/build/linux-2.6.35.3/include -DMODVERSIONS -include /home/buildroot-2012.08/output/build/linux-2.6.35.3/include/config/modversions.h -I /home/buildroot-2012.08/output/build/linux-2.6.35.3/drivers/usb/serial/ -O -c -o ftdi_sio.o ftdi_sio.c
我收到错误:
输出/build/linux-2.6.35.3/include/linux/linkage.h:5:致命错误:asm/linkage.h:没有这样的文件或目录
- 我应该如何配置驱动程序编译?
- 是否有其他方法可以为目标 linux 做到这一点?也许我没有以正确的方式做这件事。
答案1
asm/
是指向您的目标体系结构的符号链接,如果它不存在,则可能您在内核构建目录中缺少某些目标configure
(如果不存在,也许module_headers
可以做到)
从您的问题中不清楚您是否使用命令行、自定义 Makefile 或 Buildroot 包(您使用的是哪个版本的 Buildroot)。
您的命令行正在构建一个 C 对象.o
而不是内核模块(.o
是内核模块的扩展,直到版本 2.4,从 2.6 开始是.ko
)
如果您不确定这些标志会增加内核模块构建、构建和日志的详细程度,请使用相同的标志。
内核有它的方法构建模块并且 Buildroot 对于包有它的方式,最好的可能是创建一个新的包来构建你的模块(看看是否已经有其他一些包来构建模块)。
这个例子有点旧,但也许有帮助。
编辑
模块ftdi_sio.ko
生成到目录中/lib/modules/$(uname -r)/kernel/drivers/usb/serial/
builtin
但也可以配置为不.ko
生成,检查符号USB_SERIAL_FTDI_SIO在你的配置(应该是y
内置m
模块)。
/proc
如果它是内置的或插入的,则在运行时目标上应该有一个接口,称为ftdi_sio, 找到它。