今天通过阅读文章解决了几点困惑:
1.Linux内核模块运行的时候如何调用Linux内核函数?
Linux内核存在自己的符号表,模块在insmod加载时才连接目标文件,这些符号在文件 /proc/kallsyms 中提供。
2.内核模块中如何将一个符号导出?
模块可以使用如下宏导出符号到内核符号表:
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名); //只适用于包含GPL许可权的模块;
3.arm-linux-gcc能否编译出裸机的程序?
通常命令 gcc -o test test.c 编译出来的是ELF文件,这是Linux可以直接执行的。如果要运行裸机程序,还要执行相应的objcopy命令,去掉ELF格式的东西,保留机器代码。
4.关于ELF文件?
ELF文件里面应该也有类似符号表的东西,用于连接动态库和系统调用等。