Makefile
代码讲解:
- make命令调用Makefile文件,并且对其执行两次,第一次进入ifeq语句内编译内核源码,第二次根据hello.o对其进行编译生成模块。
- make clean命令删除所有当前目录下的.ko文件
- make install命令将.ko文件拷贝到根文件系统目录下
ROOTFS = /根文件系统路径
ifeq ($(KERNELRELEASE), )
KERNEL_DIR = /内核目录
CUR_DIR = $(shell pwd) //当前路径
all:
make -C $(KERNEL_DIR) M=$(CUR_DIR) modules
clean:
make -C $(KERNEL_DIR) M=$(CUR_DIR) clean
install:
cp -raf *.ko $(ROOTFS)
else
obj-m += hello.o
endif
驱动模块参数传递
用途:一般对于驱动开发,在驱动代码中需读取对应固件文件的信息,该固件代码为硬件中内部运行的代码,原厂开发,读取内部代码对特定硬件信息进行初始化。
函数:module_param(name, type, perm) //变量名、类型、权限(可以用0666或宏定义)
注意:如果在驱动中已对变量进行初始化,将被传入的值覆盖,优先读取传入值。
符号导出
由于驱动模块中他们是相对独立的,当我们需要将两个驱动进行关联时,可将驱动模块文件中实现的函数符号导出到全局的符号表,所有驱动均可使用,类似于动态库。
对于符号导出的驱动模块,只需声明LICENSE,即MODULE_LICENSE(“GPL”); 无需模块的加载和卸载入口声明。
符号导出格式:EXPORT_SYMBOL(函数);
使用:在其他函数中声明对应的头文件即可引用。