我正在编写一个Linux内核模块,它内置于内核映像。因此,在引导期间调用模块的初始化函数,即module_init(myinit)
。在myinit
内,我需要进行SHA1哈希操作。但是,函数crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC);
返回-2。我的猜测是myinit
在加密库的初始化函数之前被称为,因此SHA1算法尚未注册。
然后我尝试使用late_initcall
代替module_init
。有效。我认为这很丑陋。如果加密模块也在使用late_initcall
怎么办?有多少个模块,有多少初始级别足够?
有更好的方法吗?例如。通过指定模块依赖关系,或者,等待表示加密库加载完成的事件。