Linux内核crypto子系统深入理解(2)

--> ops->cot_decompress = crypto_decompress;
        /*
        * 在创建上下文的最后调用下,算法里的初始化函数,如果是和一个硬件
        * 的驱动适配,那么这里就可以执行相应硬件初始化的内容。
        */
            --> if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))

第二,就是执行压缩的操作:
crypto_comp_compress(tfm, input, ilen, result, &dlen)

crypto_comp_compress(crypto_comp, src, slen, dst, dlen)
        /* so hardware can do compress here! */
    --> compress_tfm->cot_compress;

第三,就是释放这个压缩的上下文
crypto_free_comp(comp)

内核虽然现在提供了压缩的异步接口,但是貌似还没有驱动会用到。异步接口的使用要比同步接口复杂一点。下面具体看看。

In alg_test_comp, async branch:
/* 和同步一样,这里也创建一个异步的上下文 */
acomp = crypto_alloc_acomp(driver, type, mask);
/*
 * 不过和同步接口不一样的是,这里又创建一个acomp_req的上下文, 后续的操作都围绕着这个req结构展开。可以看到req里面包含了异步接口需要的回调函数。
 */
 
req = acomp_request_alloc(tfm);
acomp_request_set_params(req, &src, &dst, ilen, dlen);
acomp_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
              crypto_req_done, &wait);
crypto_acomp_compress(req)
 
这里需要说明的是,testmsg.c里的这个acomp的测试程序里加了wait/complete的相关内容。这里应该是为了测试方便而加的,一般的异步接口里, 当硬件完成操作的时候,在中断函数里直接调用异步接口的回调函数就可以了。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12276.html