linux - 编译linux驱动的步骤

标签 linux linux-kernel linux-device-driver

要在 Linux 上编译应用程序,涉及的步骤是:

Pre-processing->Compilation->Assembly->Linking.

编译内核驱动程序涉及哪些步骤?如果我将驱动程序编译为内置模块与模块与使用自定义 Makefile 相比,步骤是否不同?

最佳答案

Linux 中的设备驱动程序遵循相同的正确步骤:-

预处理->编译->组装->链接

这些是无论在哪里都需要遵循的基本步骤。

关于内置模块与模块与使用自定义 Makefile::-

设备驱动程序可以与整个内核一起编译,设备驱动程序是内核镜像的一部分,意味着设备驱动程序与内核静态链接。当设备驱动程序与内核静态链接并在启动时加载。

当设备驱动程序被编译为模块时,这个模块就不是内核镜像的一部分,可以动态加载到系统中。

当设备驱动程序是内核镜像的一部分时,该设备驱动程序源文件编译为内核源代码树的普通文件。

例如 sample.c 有设备驱动程序代码和 CONFIG_SAMPLE 配置宏来控制它的编译,然后在 Makefile 中包含以下行

Config-($CONFIG_SAMPLE)   = sample.o

当 config 宏的值为 y 时,驱动程序使用内核镜像进行编译,当其值为 n then 时,设备驱动程序不被编译。

可以使用以下命令将设备驱动程序编译为一个模块。

make -C path/of/kernel    path/of/driver/in/kernel/folder/module.ko

关于linux - 编译linux驱动的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34448707/

相关文章:

linux - 来自 Linux 用户空间的 PEBS 的 x86-64 "linear address"?

c - linux终端使用printk打印数据

c - 用户空间中缺少 I2c eeprom 文件 - SFP 模块

c - 在给定指针的情况下从内核内部访问内核内存

linux - 不能打开超过 1023 个套接字

assembly - x86 中的 IN 和 OUT 指令有何用途?

linux-kernel - "irq_to_desc"未定义?

linux - 使用 xxd 将整数转换为二进制

c++ - 调用弱函数符号和强函数符号?

Linux 内核 IIO 事件 sysfs 文件只可读