EXPORT_SYMBOL 在编译ko的驱动中使用
时间: 2024-03-16 15:42:24 浏览: 69
driverinsmod.tar.gz
在编译Linux内核模块时,EXPORT_SYMBOL用于将模块中定义的符号(函数、变量等)导出到内核空间,以便其他模块或内核代码可以使用这些符号。
以下是在编译ko驱动时使用EXPORT_SYMBOL的步骤:
1. 在驱动程序中定义需要导出的符号,例如:
```c
#include <linux/module.h>
#include <linux/kernel.h>
void my_function(void)
{
printk(KERN_INFO "My function called\n");
}
EXPORT_SYMBOL(my_function);
```
在上述例子中,my_function函数被定义并使用EXPORT_SYMBOL宏导出。
2. 编写Makefile文件以编译驱动程序,例如:
```
obj-m += my_driver.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
```
在上述例子中,Makefile文件使用obj-m变量定义要编译的模块名,并使用make命令编译模块。
3. 在终端中执行make命令编译驱动程序,例如:
```
$ make
```
4. 加载驱动程序,例如:
```
$ insmod my_driver.ko
```
在上述例子中,使用insmod命令加载my_driver.ko驱动程序。
5. 卸载驱动程序,例如:
```
$ rmmod my_driver
```
在上述例子中,使用rmmod命令卸载my_driver驱动程序。
需要注意的是,EXPORT_SYMBOL用于将符号导出到内核空间,因此只能在内核模块中使用。如果导出的符号是GPL协议的,应该使用EXPORT_SYMBOL_GPL宏。如果导出的符号是GPL或者可能在未来被GPL要求的,应该使用EXPORT_SYMBOL_GPL_FUTURE宏。
阅读全文