2017-07-27 127 views
-1

我对模块编码很陌生,我需要运行一些在模块中使用GMP库的计算。内核中的GMP模块

所以第一个问题:通常是可以在内核中运行GMP吗? 为了测试,我写了这个模块:

#include <linux/init.h> 
#include <linux/module.h> 
#include <gmp.h> 

int hallo_init(void) 
{ 
    mpz_t testFactor; 
    mpz_init(testFactor, NULL); 
    mpz_set_str(testFactor, "19", 10); 
    int length = (int) mpz_sizeinbase(testFactor,2); 

    printk(KERN_ALERT "That is testFactor: %x \n",length); 

    return 0; 
} 

void hallo_exit(void) 
{ 
    printk(KERN_ALERT "exit \n"); 
} 

module_init(hallo_init); 
module_exit(hallo_exit); 

我用下面的命令来运行它:

sudo make -C /lib/modules/$(uname -r)/build M=$PWD modules -lgmp 

生成文件由

obj-m := gmpFile.o 

我也试过用-lgmp在makefile中:

obj-m := halloGmp.o 
ccflags-y := -lgmp 

但我总是得到一个致命错误:gmp.h: No such file or directory 有什么建议吗?将感谢帮助!

+0

这显然是一个XY问题。如果您有超量计算,请在用户空间中执行它们,内核模块应限制为最低要求。作为旁注:'%x'采用'unsigned',而不是'int' - >未定义的行为。 – Olaf

+0

不幸的是,我不能在用户空间中完成它们。最后,为了分析某些连接的安全性,我想用我的实现来替换Encryption(ECDH),以及针对某种攻击的对策。因此我需要在内核中运行我的代码 – Balltasar

+0

还有其他一些测试加密的方法,例如通过使用原始套接字,保险丝等。无论如何,GMP不适用于加密算法。 – Olaf

回答

0

我对GMP并不熟悉,但不太可能将库动态链接到内核模块。

原因是内核是一个独立的程序,不知道你使用的任何系统库(如glib ...),很可能GMP使用这些库。

我能想到的唯一解决方案是,您可以执行一个内核模块,与用户空间中的程序进行通信,并将GMP链接到应用程序的用户区部分。