一、驱动编译方式
驱动程序的编译通常有两种方式:静态编译进内核和动态编译为内核模块。
静态编译进内核 静态编译是指将驱动代码直接编译到内核镜像中。这种方式的优点是驱动会随内核启动而自动加载,无需额外操作;但缺点是增加了内核镜像的大小,并且一旦内核重新编译或更新,驱动也需要随之调整。此外,如果驱动出现错误,可能会导致整个系统崩溃。
动态编译为内核模块 动态编译是将驱动以模块的形式编译,这种方式更加灵活,允许用户在系统运行时动态加载或卸载模块。这种方式适合调试阶段或需要频繁更新驱动的场景。
二、静态编译进内核
源代码下载
git clone git@gitee.com:yangxuesong314/linux-driver.git (若之前已git拉取代码可以忽略)
代码位于:linux-driver/01.Linux模块化编程/02.静态编译进内核实验
为了静态编译驱动模块,我们需要改写 Makefile 文件来定义编译规则。
修改 Makefile
上一小节的:obj-m += helloworld.o 变更为 obj-y += helloworld.o 即可
makefile
obj-y += helloworld.o1
除此外,还需要更改 kernel/driver 目录下的 Makefile:
在文件末尾增加:
makefile
obj-y += test/1

三、内核编译
bash
./build.sh kernel1
如下编译日志可见,编译出 hello.o 中间文件。

思考
上述操作,我们默认就打开了 hello.c 文件的编译,但实际工作中,我们时常需要根据项目需要打开编译,此时我们就需要了解 defconfig 文件了。详见04