在模块初始化期间使用Linux内核加密库

在模块初始化期间使用Linux内核加密库,linux,linux-kernel,Linux,Linux Kernel,我正在编写一个Linux内核模块,它内置于内核映像中。因此,在引导期间调用模块的init函数,即module_init(myinit)。在myinit中,我需要执行SHA1哈希操作。但是,函数crypto_alloc_hash(“sha1”,0,crypto_ALG_ASYNC)返回-2。我的猜测是,myinit在加密库的init函数之前调用了,因此SHA1算法尚未注册 然后我尝试使用late\u initcall而不是module\u init。成功了。我觉得很难看。如果加密模块也在使用lat

我正在编写一个Linux内核模块,它内置于内核映像中。因此,在引导期间调用模块的init函数,即
module_init(myinit)
。在
myinit
中,我需要执行SHA1哈希操作。但是,函数
crypto_alloc_hash(“sha1”,0,crypto_ALG_ASYNC)返回-2。我的猜测是,
myinit
在加密库的init函数之前调用了,因此SHA1算法尚未注册

然后我尝试使用
late\u initcall
而不是
module\u init
。成功了。我觉得很难看。如果加密模块也在使用
late\u initcall
,该怎么办?有多少个模块,多少初始化级别就足够了


有更好的方法吗?例如,通过指定模块依赖项,或等待一个表示加密库加载完成的事件。

有多少模块以及多少初始化级别足够?
-枚举初始化级别。@Tsyvarev,我知道。我的意思是级别的数量远远少于模块的数量,所以这不是解决模块依赖性问题的好方法。如果你知道这一点,那么再次问这个问题的原因是什么?请在你的帖子中只留下那些你想回答的问题。对于其他事实,请使用陈述句,就像你在评论中所做的那样。(发帖本身没问题,但最好不要让我们猜测你到底想要什么。)@Tsyvarev,对不起,有点模棱两可。