amlogic S905X udpate imge的压缩和解压

使用的板子是khadas VIM

amlogic的升级和烧写有多种方式, 常见的是USB烧写和SD卡烧写. USB烧写的流程其实是解压update.img中的文件,然后push到RAM中运行. 然后再push文件到ram中烧写. 这个和Freescale的MFGTools类似.

 

update.img的生成

生成update.img的命令如下,可以看到不同文件在update.img中被包含, 中括号里面是文件名字和分区名字, 这个信息在后面的解压中会被用到.

 

 
  1. $ ./vendor/amlogic/tools/aml_upgrade/aml_image_v2_packer -r out/target/product/kvim/upgrade/aml_upgrade_package.conf out/target/product/kvim/upgrade/ out/target/product/kvim/update.img

  2. [Msg]Pack Item[USB , DDR] from (out/target/product/kvim/upgrade/u-boot.bin.usb.bl2),sz[0xc000]B,

  3. [Msg]Pack Item[USB , UBOOT] from (out/target/product/kvim/upgrade/u-boot.bin.usb.tpl),sz[0xd0000]B,ft[normal]

  4. [Msg]Pack Item[UBOOT , aml_sdc_burn] from (out/target/product/kvim/upgrade/u-boot.bin.sd.bin),sz[0xdc200]B,ft[normal]

  5. [Msg]Pack Item[ini , aml_sdc_burn] from (out/target/product/kvim/upgrade/aml_sdc_burn.ini),sz[0x24d]B,

  6. [Msg]Pack Item[PARTITION , boot] from (out/target/product/kvim/upgrade/boot.img),sz[0x7ee800]B,ft[normal]

  7. [Msg]Pack Item[VERIFY , boot] from (out/target/product/kvim/upgrade/boot.img),vry[sha1sum aa0fea3f2bd1ffe15f8f5c9ff1d71609ee7db42d]

  8. [Msg]Pack Item[PARTITION , bootloader] from (out/target/product/kvim/upgrade/u-boot.bin),sz[0xe0000]B,ft[normal]

  9. [Msg]Pack Item[VERIFY , bootloader] from (out/target/product/kvim/upgrade/u-boot.bin),vry[sha1sum 3f5d17c6352bdb7bdff9a1114da3ce6f36c3803d]

  10. [Msg]Pack Item[PARTITION , logo] from (out/target/product/kvim/upgrade/logo.img),sz[0x11b5b0]B,ft[normal]

  11. [Msg]Pack Item[VERIFY , logo] from (out/target/product/kvim/upgrade/logo.img),vry[sha1sum bf640f9e75764aa138a5783550d3f842814ed171]

  12. [Msg]Pack Item[xml , manifest] from (out/target/product/kvim/upgrade/manifest.xml),sz[0xe2f2]B,

  13. [Msg]Pack Item[dtb , meson1] from (out/target/product/kvim/upgrade/meson.dtb),sz[0x94dd]B,

  14. [Msg]Pack Item[conf , platform] from (out/target/product/kvim/upgrade/platform.conf),sz[0xca]B,

  15. [Msg]Pack Item[PARTITION , recovery] from (out/target/product/kvim/upgrade/recovery.img),sz[0xab5800]B,ft[normal]

  16. [Msg]Pack Item[VERIFY , recovery] from (out/target/product/kvim/upgrade/recovery.img),vry[sha1sum 3dc97761a4200b31e7898aa32a4465e3d792bc61]

  17. [Msg]Pack Item[PARTITION , system] from (out/target/product/kvim/upgrade/system.img),sz[0x222f3954]B,ft[sparse]

  18. [Msg]Pack Item[VERIFY , system] from (out/target/product/kvim/upgrade/system.img),vry[sha1sum c4e2bb6e4fadfe8762490d99be6d9b85a9fd7f29]

  19. [Msg]version:0x2 crc:0xf2f5fb70 size:597054308 bytes[569MB]

  20. Pack image[out/target/product/kvim/update.img] OK

 

 

Update.img的解压

参考下面这个地址中的.c文件

http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s912/others-aml-s912/knowledge-tutorials-av/608116-how-to-recover-so-you-bricked-your-box

因为他的这个是为S912S为处理的, 对于S905X而言也是类似的, 同时因为他默认指定了一个打开的文件, 因此我改了一下:

 

 
  1. #include <errno.h>

  2. #include <inttypes.h>

  3. #include <stdio.h>

  4. #include <stdlib.h>

  5. #include <string.h>

  6. #include <arpa/inet.h>

  7.  
  8. uint32_t convert(uint8_t *test, uint64_t loc) {

  9. return ntohl((test[loc] << 24) | (test[loc+1] << 16) | (test[loc+2] << 8) | test[loc+3]);

  10. }

  11.  
  12. void main(int argc, char * argv[]) {

  13. FILE *fileptr;

  14. uint8_t *buffer;

  15. long filelen;

  16.  
  17. FILE *f;

  18. char *filename;

  19. uint64_t record;

  20. uint64_t record_loc;

  21. uint64_t file_loc;

  22. uint64_t file_size;

  23.  
  24. printf("file is %s\n", argv[1]);

  25. fileptr = fopen(argv[1], "rb");

  26. fseek(fileptr, 0, SEEK_END);

  27. filelen = ftell(fileptr);

  28. rewind(fileptr);

  29.  
  30. buffer = (uint8_t *)malloc((filelen+1)*sizeof(uint8_t));

  31. fread(buffer, filelen, 1, fileptr);

  32. fclose(fileptr);

  33.  
  34. for (record = 0; record < (uint8_t)buffer[0x18]; record = record + 1){

  35. record_loc = 0x40 + (record * 0x240);

  36.  
  37. filename = (malloc(32));

  38. sprintf(filename,"%s.%s",(char *)&buffer[record_loc+0x120], (char *)&buffer[record_loc+0x20]);

  39.  
  40. file_loc = convert(buffer,record_loc+0x10);

  41. file_size = convert(buffer,record_loc+0x18);

  42.  
  43. f = fopen(filename, "wb");

  44. if (f == NULL) {

  45. printf("ERROR: could not open output\n");

  46. printf("the error was: %s\n",strerror(errno));

  47. free(filename);

  48. continue;

  49. }

  50. fwrite(&(buffer[file_loc]), sizeof(uint8_t), (size_t)file_size, f);

  51. fclose(f);

  52. free(filename);

  53. }

  54. free(buffer);

  55. }


将这个代码保存, 使用gcc直接编译, 然后就可以带一个update.img为参数运行了, 即可得到对应的解压文件.

 

解压后各个文件的意义

因为解压后的名字都是NAME.PARTITION这样的命名, 这个需要看前面提到的update.img的生成log中对应

 

使用SD卡烧写

SD卡的烧写一样可以参考下面文章中的dd:

http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s912/others-aml-s912/knowledge-tutorials-av/608116-how-to-recover-so-you-bricked-your-box

具体而言就是将uboot.bin.sdcard dd到第二个sector, 然后拷贝各种配置文件.

 

 

卡刷工具BootcardMaker的使用:
这里写图片描述
将存储卡插入电脑后,打开BootcardMaker工具,选择盘符,Yes,点击Open选择boot.bin.sd.bin文件,Make;
注意:这里会将卡格式化,完成后,再将aml_sdc_burn.ini,u-boot.bin.sd.bin,XXX.img
这三个文件放入存储卡;
注意:aml_sdc_burn.ini文件中package = xxx.img要对应起来。
完成上述步骤后将卡插入盒子,按住reset按钮接通电源,进入刷机界面后,松开。

以上就是Amlogic工具的使用方式,不过使用工具还会遇到不少问题,最好的方式还是通过编译代码

 

国外网站的线刷贴

http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s912/others-aml-s912/knowledge-tutorials-av/608116-how-to-recover-so-you-bricked-your-box

http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s912/others-aml-s912/knowledge-tutorials-av/602802-aml_upgrade_package-img-extract

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值