使用EXPORT_SYMBOL_GPL,可以将一个函数以符号的方式导出给其他GPL许可的模块使用。
例:
drivers\net\ethernet\mellanox\mlx4\intf.c中的mlx4_register_interface,
int mlx4_register_interface(struct mlx4_interface *intf)
{
struct mlx4_priv *priv;
if (!intf->add || !intf->remove)
return -EINVAL;
mutex_lock(&intf_mutex);
list_add_tail(&intf->list, &intf_list);
list_for_each_entry(priv, &dev_list, dev_list)
mlx4_add_device(intf, priv);
mutex_unlock(&intf_mutex);
return 0;
}
EXPORT_SYMBOL_GPL(mlx4_register_interface);
在drivers\infiniband\hw\mlx4\main.c文件中使用,
... ...
int mlx4_register_interface(struct mlx4_interface *intf);
MODULE_LICENSE("Dual BSD/GPL");
... ...
static int __init mlx4_ib_init(void)
{
int err;
wq = create_singlethread_workqueue("mlx4_ib");
if (!wq)
return -ENOMEM;
err = mlx4_ib_mcg_init();
if (err)
goto clean_wq;
err = mlx4_register_i