2017-2018-1 20155227 20155318 实验二 固件程序设计
2017-11-05 18:10
531 查看
2017-2018-1 20155227 20155318 实验二 固件程序设计
实验目的,实验步骤
实验过程如下。实验二 固件程序设计-1-MDK
0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 3. 提交破解程序中产生LIC的截图 4. 提交破解成功的截图
安装MDK-ARM→安装ULINK驱动→破解MDK4.74→将生成的CID粘至keil-MDK→选择ARM点generate生成LIC→将生成的LIC复制到new LIC中→ADD LIC破解成功
实验二 固件程序设计-2-LED
0. 注意不经老师允许不准烧写自己修改的代码 1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 3. 实验报告中分析代码
安装SC000库->安装打开keilMDK新建工程->芯片库选择Generic SC000 Device Database库→点开 ARM 结构目录,选择SC000,完成工程搭建
LED实验:编译代码
连接下载调试工具 NZDownloadTool,后下载代码
产生led闪烁的现象
主函数代码的执行过程为:
1) 系统初始化,中断设置,使能所有中断; 2) 判断按键,返回 boot 条件,确认是否进行程序下载; 3) 设置 GPIO0 状态为上拉输出; 4) 进入循环程序,LED 灯间隔 100ms 闪烁; 需要注意:程序初始化至 GPIO 配置的代码不能随意更改,否则无法初始化 芯片,下载程序。
实验二 固件程序设计-3-UART
0. 注意不经老师允许不准烧写自己修改的代码 1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 3. 实验报告中分析代码
添加芯片过程同前一道题,这里就省略了
编译后将程序下载到试验箱上(这里需注意:打开 Z32 的电源开关前,按住 Reboot 按键不放,两次打开电源开关,Z32 即可被电脑识别)
使用串口调试助手(sscom)观察串口通信收发的数据(在控制面板——设备管理器——端口,查看串口线所占用的PC端口,本机是COM3)
关闭 Z32 电源开关,再打开,程序自动运行,可以在串口调试助手看到如下
实验现象,证明 PC 机串口已经接收到 Z32 串口发送来的信息
1) void UART_IrqService(void)是串口中断服务函数,本实验中实现串口中 断执行子程序,从 PC 端串口调试助手发送数据至 Z32,Z32 再经串口 发送给 PC 机; 2) void UART_BrpSet(UINT16 set)是波特率设置函数,串口实验波特率设置 为 115200; 3) void UART_Init(void)是串口初始化函数,实现配置串口时钟、使能中断; 4) void UART_SendByte(UINT8 dat)是发送单字节函数,使用此函数一次发 送一个字节数据; 5) void UART_SendString(UINT8 * str)是发送字符串函数,使用此函数发送 字符串数据; 6) void uart_SendString(UINT8 buf[],UINT8 length)是发送某一长度的字符 串函数,实现发送一定长度的字符串数据。 7) void UART_SendNum(INT32 num)是发送单个十进制整数函数,使用此 函数发送一个十进制整数; 8) void UART_SendHex(UINT8 dat)是发送单个十六进制整数函数,使用此 函数发送一个十六进制整数; 9) UINT8 UART_GetByte(UINT8 *data)是接收单字节函数,使用此函数接 收单字节数据; 10) void UART_Receive(UINT8 *receive, UINT8 len) 是接收多字节函数,使 用此函数接收多个字节数据; 主函数: 1) 系统初始化,中断设置,使能所有中断; 2) 判断按键,返回 boot 条件,确认是否进行程序下载; 3) 初始化 Uart,使能 Uart 接口,配置 Uart 中断并使能; 4) 先发送单个字符“A”,换行,再发送字符串“Welcome to Z32HUA!”, 换行,发送数字串“1234567890”,换行,再发送 16 位数“0xAA”,换 行。 5) 进入 while 循环程序,等待串口中断到来并判断数据是否接收完毕,若 中断到来,转入执行串口中断服务程序,待接收数据完毕,Z32 将数据 发回串口助手。
实验二 固件程序设计-4-国密算法
0. 网上搜集国密算法标准SM1,SM2,SM3,SM4 1. 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译 2. 四个算法的用途? 3. 《密码学》课程中分别有哪些对应的算法? 4. 提交2,3两个问题的答案 5. 提交在Ubuntu中运行国密算法测试程序的截图
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM1 为对称加密。其加密强度与AES相当。
SM2为非对称加密,基于ECC。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。
SM3 消息摘要。校验结果为256位。SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂。
SM4 无线局域网标准的分组数据算法。目的是为了加密保护静态储存和传输信道中的数据对称加密,密钥长度和分组长度均为128位。
《密码学》课程中有AES、RSA、MD5(SHA-1)、DES这几个算法分别与SM1,SM2,SM3,SM4对应。
SM2算法实现:
SM3算法实现:
SM4算法实现:
实验二 固件程序设计-5-SM1
0. 注意不经老师允许不准烧写自己修改的代码 1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.16”完成SM1加密实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 3. 实验报告中分析代码
编译和下载过程与之前的相同,此处直接展示实验结果
代码分析如下:
实验中的问题和解决过程
问题1 运行SM2时出现“未定义的引用”的问题。解决:参考杜可欣同学的博客,先重新安装了
openssl和
libssl-dev。
两条命令分别为:
sudo apt-get remove openssl libssl-dev sudo apt-get install openssl libssl-dev -y
接着,在编译时添加参数
-lssl -lcrypto,成功解决该问题。
问题2:破解MDK4.74出现如下错误:
解决:在运行uvision没有用管理员身份进入,直接双击软件运行,使用的是默认用户权限,而右键→管理员身份运行,可以获得最高权限
实验体会
本次实验的实验步骤很简单,只要一步步按部就班就行,在运行SM2时遇到的找不到库的问题,也提醒了我们gcc在编译的时候要注意各文件的依赖顺序。参考资料
信息安全系统实验箱指导书杜可欣同学的博客
相关文章推荐
- 2017-2018-1 20155227 20155318 实验四 外设驱动程序设计
- 2017-2018-1 20155209 20155230 实验二 固件程序设计
- 2017-2018-1 20155218 20155205 实验二 固件程序设计
- 2017-2018-1 20155306 20155315《信息安全系统设计基础》实验二 固件程序设计
- 2017-2018-1 20155320 20155326 实验二 固件程序设计
- 2017-2018-1 20155321 20155330 实验二 固件程序设计
- 2017-2018-1 20155203 20155204 实验二 固件程序设计
- 2017-2018-1 20155217 20155236实验二 固件程序设计
- 2017-2018-1 20155307 20155338 20155335 实验二 固件程序设计
- 2017-2018-1 20155331 20155336 实验二 固件程序设计
- 2017-2018-1 20155333 20155328 实验二 固件程序设计
- 2017-2018-1 20155225 20155229 实验二 固件程序设计
- 2017-2018-1 20155225 20155229 实验二 固件程序设计
- 2017-2018-1 20155227 20155318 实验一 开发环境的熟悉
- 2017-2018-1 20155223 20155207 实验二 固件程序设计
- 2017-2018-1 20155320 20155326 实验二 固件程序设计
- 2017-2018-1 20155328 20155333 实验二 固件程序设计 实验报告
- 2017-2018-1 20155223 20155207 实验二 固件程序设计