硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3033|回复: 4
收起左侧

[算法] 这个可以有,SEGGER提供了39种算法检测固件完整性

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2020-8-11 16:00:26 | 显示全部楼层 |阅读模式
博文说明(含案例):
https://blog.segger.com/integrity-checks-with-the-new-segger-linker/

Wiki说明(含案例):
https://wiki.segger.com/Integrity_checks_with_Embedded_Studio_and_SEGGER_Linker

论坛下载(请使用Emebdded Studio 5.10及其以上版本):
STM32F407_CRC_SEGGER_LINKER.zip (2.8 MB, 下载次数: 156)


支持的检测算法,集成到了SEGGER LINKER上了

  1. CRC-7/MMC
  2. CRC-8
  3. CRC-8/CDMA2000
  4. CRC-8/DARC
  5. CRC-8/MAXIM, CRC-8/1WIRE
  6. CRC-8/AUTOSAR
  7. CRC-8/BLUETOOTH
  8. CRC-16/CCITT:AUG
  9. CRC-16/CCITT:NOAUG
  10. CRC-16/KERMIT
  11. CRC-16/X.25
  12. CRC-16/XMODEM
  13. CRC-16/ARC
  14. CRC-16/UMTS
  15. CRC-16/MODBUS
  16. CRC-16/USB
  17. CRC-32
  18. CRC-32/BZIP2
  19. CRC-32/MPEG2, CRC-32/STM32
  20. CRC-32/POSIX
  21. CRC-32/XFER
  22. CRC-32C
  23. CRC-32D
  24. CRC-32Q
  25. CRC-CCITT:AUG
  26. CRC-CCITT:NOAUG
  27. MD5
  28. RIPEMD-160
  29. SHA-1
  30. SHA-224
  31. SHA-256
  32. SHA-384
  33. SHA-512
  34. SHA-512/224
  35. SHA-512/256
  36. SHA3-224
  37. SHA3-256
  38. SHA3-384
  39. SHA3-512
  40. SM3
复制代码


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-8-11 16:03:17 | 显示全部楼层
的确是比之前MDK的方法方便很多

成功实现MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较
http://www.armbbs.cn/forum.php?m ... 7379&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

7

主题

114

回帖

135

积分

初级会员

积分
135
发表于 2020-8-12 19:34:21 | 显示全部楼层
这能用于Keil么
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-8-13 00:43:31 | 显示全部楼层

MDK没法用,MDK的话,可以用我二楼发的那个。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-8-18 00:30:15 | 显示全部楼层
  1. /*********************************************************************
  2. *                    SEGGER Microcontroller GmbH                     *
  3. *                        The Embedded Experts                        *
  4. **********************************************************************
  5. *                                                                    *
  6. *            (c) 2014 - 2020 SEGGER Microcontroller GmbH             *
  7. *                                                                    *
  8. *           www.segger.com     Support: support@segger.com           *
  9. *                                                                    *
  10. **********************************************************************
  11. *                                                                    *
  12. * All rights reserved.                                               *
  13. *                                                                    *
  14. * Redistribution and use in source and binary forms, with or         *
  15. * without modification, are permitted provided that the following    *
  16. * conditions are met:                                                *
  17. *                                                                    *
  18. * - Redistributions of source code must retain the above copyright   *
  19. *   notice, this list of conditions and the following disclaimer.    *
  20. *                                                                    *
  21. * - Neither the name of SEGGER Microcontroller GmbH                  *
  22. *   nor the names of its contributors may be used to endorse or      *
  23. *   promote products derived from this software without specific     *
  24. *   prior written permission.                                        *
  25. *                                                                    *
  26. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
  27. * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
  28. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
  29. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
  30. * DISCLAIMED.                                                        *
  31. * IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR        *
  32. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
  33. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
  34. * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
  35. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
  36. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
  37. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
  38. * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
  39. * DAMAGE.                                                            *
  40. *                                                                    *
  41. **********************************************************************

  42. -------------------------- END-OF-HEADER -----------------------------

  43. File    : main.c
  44. Purpose : Example application doing a CRC check using the STM32 CRC peripheral

  45. */

  46. #include <stdio.h>
  47. #include <stdlib.h>
  48. #include "stm32f4xx.h"

  49. #define FLASH_IMAGE_START 0x08000000
  50. #define FLASH_IMAGE_END   0x0807FFFC
  51. #define FLASH_APPLICATION_END (FLASH_IMAGE_END - 0x4)

  52. /*********************************************************************
  53. *
  54. *       main()
  55. *
  56. *  Function description
  57. *   Application entry point.
  58. */
  59. int main(void) {
  60.   int i;
  61.   unsigned int NumItems;
  62.   unsigned int* pData;
  63.   unsigned int CRCResultHW;
  64.   unsigned int CRCResult;
  65.   unsigned int OldValue;
  66.   
  67.   i = 0;
  68.   NumItems = (FLASH_APPLICATION_END - FLASH_IMAGE_START) / 4;
  69.   pData = (unsigned int*)FLASH_IMAGE_START;    // points to start of Flash
  70.   CRCResult = *(unsigned int*)FLASH_IMAGE_END; // Saves CRC value calculated by SEGGER Linker
  71.   //
  72.   // Config CRC Module
  73.   //
  74.   RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN;
  75.   CRC->CR |= CRC_CR_RESET;
  76.   //
  77.   // Calculate CRC with ST CRC unit over complete Flash area
  78.   //
  79.   do {
  80.     CRC->DR = __REV(*pData);  // ST algorithm expects words in reversed order
  81.     pData++;
  82.   } while (NumItems--);
  83.   CRCResultHW = CRC->DR;
  84.   printf("Hardware calculated CRC over Flash is: 0x%X \n", CRCResultHW);
  85.   printf("SEGGER Linker calculated CRC over Flash is: 0x%X\n", CRCResult);
  86.   //
  87.   // Compare with Linker result
  88.   //
  89.   if (CRCResult == CRCResultHW) {
  90.     printf("Both CRC check sums are matching!\n");
  91.   } else {
  92.     printf("CRC check sums are not matching. Check parameters.\n");
  93.   }
  94.   do {
  95.     i++;
  96.   } while (1);
  97. }

  98. /*************************** End of file ****************************/
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 11:21 , Processed in 0.264844 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表