测试的时候,发现内核驱动里用crc32_le计算出的值和u-boot里用crc32计算出的值不一样。

又用python的zlib.crc32和把内容写到文件用linuxcrc32命令计算,发现与u-bootcrc32函数计算结果一致。

对比u-boot和linux内核用的crc32table,两者是一致的,后来查看代码,发现u-boot的crc32有个与0xffffffffL进行异或的操作。 实际linux的crc32_le函数与u-boot的crc32_no_comp函数是一致的。

1uint32_t __efi_runtime crc32(uint32_t crc, const Bytef *p, uInt len)
2{
3     return crc32_no_comp(crc ^ 0xffffffffL, p, len) ^ 0xffffffffL;
4}