当前位置: 技术问答>linux和unix
内核模块能否单独编译,单独加入linux内核,给应用程序使用
来源: 互联网 发布时间:2017-05-29
本文导语: 我虚拟机装了Ubuntu 12.04.4 LTS n l Linux ubuntu 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2 014 i686 i686 i386 GNU/Linux 我也安装了gcc g++编译工具 我下载了linux-3.6内核源码,在lib目录下有一个bch.c文...
我虚拟机装了Ubuntu 12.04.4 LTS n l Linux ubuntu 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2
014 i686 i686 i386 GNU/Linux
我也安装了gcc g++编译工具
我下载了linux-3.6内核源码,在lib目录下有一个bch.c文件,最后有这些字样
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ivan Djelic ");
MODULE_DESCRIPTION("Binary BCH encoder/decoder");
EXPORT_SYMBOL_GPL()下列4个函数
struct bch_control *init_bch(int m, int t, unsigned int prim_poly);
void free_bch(struct bch_control *bch);
void encode_bch(struct bch_control *bch, const uint8_t *data,
unsigned int len, uint8_t *ecc);
int decode_bch(struct bch_control *bch, const uint8_t *data, unsigned int len,
const uint8_t *recv_ecc, const uint8_t *calc_ecc,
const unsigned int *syn, unsigned int *errloc);
如果我想在应用程序用到上面的4个函数,我应该如何做?
1 可以将这个module单独编译出来 然后insmod这个module,然后应用程序有bch.h头文件,直接调用吗?
编译时makefile要链接什么呢?想libc.so这样的?
2 把bch代码中跟内核函数有关的修改掉,当做应用层编译使用? 这个我试过,但是不知道哪里有问题,一些函数替换后,编译是通过了,但是init_bch(……)这个函数都没执行成功。
3 还是要编译整个内核?那可以再应用层调用吗?这个比较复杂了。
014 i686 i686 i386 GNU/Linux
我也安装了gcc g++编译工具
我下载了linux-3.6内核源码,在lib目录下有一个bch.c文件,最后有这些字样
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ivan Djelic ");
MODULE_DESCRIPTION("Binary BCH encoder/decoder");
EXPORT_SYMBOL_GPL()下列4个函数
struct bch_control *init_bch(int m, int t, unsigned int prim_poly);
void free_bch(struct bch_control *bch);
void encode_bch(struct bch_control *bch, const uint8_t *data,
unsigned int len, uint8_t *ecc);
int decode_bch(struct bch_control *bch, const uint8_t *data, unsigned int len,
const uint8_t *recv_ecc, const uint8_t *calc_ecc,
const unsigned int *syn, unsigned int *errloc);
如果我想在应用程序用到上面的4个函数,我应该如何做?
1 可以将这个module单独编译出来 然后insmod这个module,然后应用程序有bch.h头文件,直接调用吗?
编译时makefile要链接什么呢?想libc.so这样的?
2 把bch代码中跟内核函数有关的修改掉,当做应用层编译使用? 这个我试过,但是不知道哪里有问题,一些函数替换后,编译是通过了,但是init_bch(……)这个函数都没执行成功。
3 还是要编译整个内核?那可以再应用层调用吗?这个比较复杂了。
|
EXPORT_SYMBOL_GPL导出的符号是在另外的模块中使用的,而不能让应用程序直接调用。想调用的话,自己写一个模块,做承上启下的作用来间接调用。
|
其实是要赞同你来的,点错成板砖了。。。。
|
喜忧参半。