Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194485
  • 博文数量: 44
  • 博客积分: 1515
  • 博客等级: 上尉
  • 技术积分: 480
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-06 16:39
文章分类

全部博文(44)

文章存档

2013年(3)

2012年(2)

2011年(2)

2009年(20)

2008年(17)

我的朋友

分类:

2008-09-01 15:25:00

为了保存flash上数据的安全,需要对kernel和文件系统进行加密。
加密采用tea加密算法。
1 在PC上对kernel的img文件进行加密,同时对密钥加密,保存在img末端。
2 hi3510通过i2c与psoc进行通信,将加密过的密钥发给posc,psoc使用保存在内部的key对密钥进行
  解密,解密后发给3510.3510根据密钥对kernel img进行解密,解密后跳转。
 解密阶段发生在将kernel从flash拷贝到ram;
文件系统的加密暂未实现。

注意:
1 pc上对密钥加密使用的key 和 psoc上对密钥解密使用的key 相同,事先约定好的。
2 hi3510 为小端字节序,而psoc为大端字节序。

加密的kernel实为mkimage制作的镜像;mkimage为uboot下的一个工具,主要作用是对编译的好的内核加一个image_header_t 头,指定kernel的类型、名字、以及加载地址和入口地址。其中加载地址为将kernel从flash 拷贝到ram的地址,而入口地址为uboot将cpu交给kernel的跳转地址(即kernel执行的第一条指令地址,我的理解);uboot的do_bootm/* in comm/cmd_bootm.c*/函数的主要两个工作:
1 判断image_header_t中的加载地址和do_bootm传入的参数addr是否相等;如果相等,表示现在内核已经位于image_header_t中ih_load指定的位置,不再做复制kernel的工作;如果不相等,表示kernel仍然处于flash,将kernel的数据拷贝到ih_load指定的位置(该数据没有包括image_header_t,所以mkimage时一定注意入口地址的指定)
2 调用do_bootm_linux启动kernel。

mkimage时,可以指定加载地址和入口地址相等,也可以不相等;在m161中,将入口地址指定为加载地址向后偏移64字节(image_header_t的大小)


阅读(1684) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~