Không phải là câu trả lời, mà là một minh chứng, như đã hứa từ nhận xét của tôi, rằng các ký hiệu xuất khẩu không phải là được yêu cầu không tĩnh. Các dưới 2 module chứng minh điều này:
/* mod1.c */
#include <linux/module.h>
static int mod1_exp_func(int i)
{
pr_info("%s:%d the value passed in is %d\n",
__func__, __LINE__, i);
return i;
}
EXPORT_SYMBOL(mod1_exp_func); /* export static symbol */
static int __init mod1_init(void)
{
pr_info("Initializing simple mod\n");
return 0;
}
static void __exit mod1_exit(void)
{
pr_info("This module is exiting\n");
}
module_init(mod1_init);
module_exit(mod1_exit);
MODULE_LICENSE("GPL v2");
Và các mô-đun thứ hai
/* mod2.c */
#include <linux/module.h>
extern int mod1_exp_func(int);
static int __init mod2_init(void)
{
pr_info("Initializing mod2\n");
pr_info("Calling exported function in mod1\n");
mod1_exp_func(3);
return 0;
}
static void __exit mod2_exit(void)
{
pr_info("mod2 exiting\n");
}
module_init(mod2_init);
module_exit(mod2_exit);
MODULE_LICENSE("GPL v2");
Chúng được thử nghiệm trên CentOS 6 & CentOS 7: kernel 2.6.32 và 3.10 (tương ứng). Đang tải mod1.ko và sau đó mod2.ko sẽ dẫn đến giá trị được chuyển đến mod1_exp_func() được in vào bộ đệm nhật ký hạt nhân.
Nguồn
2015-08-18 15:11:02
http://stackoverflow.com/questions/6670589/use-of-export-symbol có thể được sử dụng – Bart
thông tin tuyệt vời về điều này có thể được tìm thấy [nghe] (http://tuxthink.blogspot.in/2011/ 07/export-symbols-from-module.html) –
Ví dụ về runnable tối thiểu: https://stackoverflow.com/a/44614246/895245 –