| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #!usr/bin/perl
- # Copyright Statement:
- #
- # This software/firmware and related documentation ("MediaTek Software") are
- # protected under relevant copyright laws. The information contained herein
- # is confidential and proprietary to MediaTek Inc. and/or its licensors.
- # Without the prior written permission of MediaTek inc. and/or its licensors,
- # any reproduction, modification, use or disclosure of MediaTek Software,
- # and information contained herein, in whole or in part, shall be strictly prohibited.
- #
- # MediaTek Inc. (C) 2010. All rights reserved.
- #
- # BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- # THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- # RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
- # AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
- # NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
- # SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
- # SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
- # THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
- # THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
- # CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
- # SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- # STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
- # CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
- # AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
- # OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
- # MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- #
- # The following software/firmware and/or related documentation ("MediaTek Software")
- # have been modified by MediaTek Inc. All revisions are subject to any receiver's
- # applicable license agreements with MediaTek Inc.
- my $base_prj = $ARGV[0];
- my $prj = $ARGV[1];
- my $custom_dir = $ARGV[2];
- my $secro_ac = $ARGV[3];
- my $nand_page_size = $ARGV[4];
- my $board_avb_enable = $ARGV[5];
- my $dir = $ARGV[6];
- my $tgt = $ARGV[7];
- my $sdl_only = $ARGV[8];
- my $cfg_dir = "$custom_dir";
- my $cfg_def = "IMG_AUTH_CFG.ini";
- my $cfg = "$cfg_dir/$cfg_def";
- my $key = "$cfg_dir/IMG_AUTH_KEY.ini";
- my $oemkey = "$cfg_dir/VERIFIED_BOOT_IMG_AUTH_KEY.ini";
- $ENV{PROJECT}=$prj;
- my $secro_type = "GMP";
- ##########################################################
- # Dump Parameter
- ##########################################################
- print "\n\n";
- print "********************************************\n";
- print " Dump Paramter \n";
- print "********************************************\n";
- print " Base Project : $base_prj\n";
- print " Project : $prj\n";
- print " Custom Directory : $custom_dir\n";
- print " SECRO AC : $secro_ac\n";
- print " NAND Page Size : $nand_page_size\n";
- print " BOARD_AVB_ENABLE : $board_avb_enable\n";
- print " PRODUCT_OUT : $dir\n";
- print " SDL_ONLY : $sdl_only\n";
- print " TGT : $tgt\n";
- ##########################################################
- # Create Folder
- ##########################################################
- print "\n\n";
- print "********************************************\n";
- print " Create Folder \n";
- print "********************************************\n";
- `mkdir $dir/sig` if ( ! -d "$dir/sig" );
- print "Image Dir '$dir'\n";
- my $command = "scripts/sign/SignTool.sh";
- #tool for signing image with SHA256 + RSA2048 for verified boot
- my $command_2048 = "scripts/sign/SignTool_2048";
- ##########################################################
- # File Check
- ##########################################################
- my @imgs_need_sign_raw = ("lk.img", "logo.bin", "secro.img", "odmdtbo.img", "dtbo.img");
- my @imgs_need_sign = ("system.img", "system_other.img", "userdata.img", "efuse.img", "vendor.img", "odm.img", "vbmeta.img", "vbmeta_system.img", "vbmeta_vendor.img", "super.img");
- if ($board_avb_enable ne "true") {
- push (@imgs_need_sign_raw, "boot.img");
- push (@imgs_need_sign_raw, "recovery.img");
- } else {
- push (@imgs_need_sign, "boot.img");
- push (@imgs_need_sign, "recovery.img");
- }
- # ProjectConfig.mk settings is not imported here, and try all the possible names
- push (@imgs_need_sign, "trustzone.bin");
- push (@imgs_need_sign, "mobicore.bin");
- push (@imgs_need_sign, "tz.img");
- push (@imgs_need_sign, "tee.img");
- # Does not check whether all images in the list exist. Sign all the images which can be found.
- ##########################################################
- # Process Common Files
- ##########################################################
- print "\n\n";
- print "********************************************\n";
- print " Sign Common Images \n";
- print "********************************************\n";
- # for these images, two layers of signature is applied, one for verified boot, one for secure download.
- foreach my $img (@imgs_need_sign_raw) {
- if ("$tgt" ne "all") {
- if ("$tgt" ne $img) {
- warn "$img not selected target($tgt), bypass\n";
- next;
- }
- }
- if ( ! -e "$dir/$img") {
- warn "the $img does NOT exist, please check\n";
- next;
- }
- my $signed_verified_img = $img;
- $signed_verified_img =~ s/\./-verified\./;
- if ($sdl_only eq "yes") {
- print "secure boot signature generation bypassed for '$dir/$img'"
- } else {
- my $sig_img = $img;
- $sig_img =~ s/\.bin/\.sig/;
- $sig_img =~ s/\.img/\.sig/;
- print "Sign Image '$dir/$img' with key '$oemkey'... output = '$dir/$signed_verified_img'\n";
- system("$command_2048 $oemkey $dir/$img $dir/$signed_verified_img $dir/sig/$sig_img") == 0 or die "sign image(verified boot) fail";
- }
- my $signed_img = $img;
- $signed_img =~ s/\./-sign\./;
- my $signed_cfg = "$cfg_dir/$img.ini";
- if ( ! -e "$signed_cfg" ) {
- $signed_cfg = $cfg;
- }
- print "Sign Image '$dir/$img' with cfg '$signed_cfg'...\n";
- system("$command $key $signed_cfg $dir/$signed_verified_img $dir/$signed_img $nand_page_size") == 0 or die "sign image fail";
- }
- # these images are signed for secure download only and not covered by verified boot.
- foreach my $img (@imgs_need_sign) {
- if ("$tgt" ne "all") {
- if ("$tgt" ne $img) {
- warn "$img not selected target($tgt), bypass\n";
- next;
- }
- }
- if ( ! -e "$dir/$img") {
- warn "the $img does NOT exist, please check\n";
- next;
- }
- my $signed_img = $img;
- $signed_img =~ s/\./-sign\./;
- my $signed_cfg = "$cfg_dir/$img.ini";
- if ( ! -e "$signed_cfg" ) {
- $signed_cfg = $cfg;
- }
- print "Sign Image '$dir/$img' with cfg '$signed_cfg'...\n";
- system("$command $key $signed_cfg $dir/$img $dir/$signed_img $nand_page_size") == 0 or die "sign image fail";
- }
- sub print_system {
- my $command = $_[0];
- my $rslt = system($command);
- print "$command: $rslt\n";
- die "Failed to execute $command" if ($rslt != 0);
- }
- ##########################################################
- # Process EMMC Files
- ##########################################################
- print "\n\n";
- print "********************************************\n";
- print " Sign EMMC Images \n";
- print "********************************************\n";
- my @imgs_need_sign = ("MBR", "EBR1", "EBR2");
- foreach my $img (@imgs_need_sign) {
- if ("$tgt" ne "all") {
- if ("$tgt" ne $img) {
- warn "$img not selected target($tgt), bypass\n";
- next;
- }
- }
- if (-e "$dir/$img") {
- my $signed_cfg = "$cfg_dir/$img.ini";
- if ( ! -e "$signed_cfg" ) {
- $signed_cfg = $cfg;
- }
- print "Sign Image '$dir/$img' with cfg '$signed_cfg'...\n";
- system("$command $key $signed_cfg $dir/$img $dir/${img}-sign $nand_page_size") == 0 or die "sign EMMC image fail";
- }
- }
- my @imgs_need_sign = ("cache.img", "custom.img");
- foreach my $img (@imgs_need_sign) {
- if ("$tgt" ne "all") {
- if ("$tgt" ne $img) {
- warn "$img not selected target($tgt), bypass\n";
- next;
- }
- }
- if (-e "$dir/$img") {
- my $signed_img = $img;
- $signed_img =~ s/\./-sign\./;
- my $signed_cfg = "$cfg_dir/$img.ini";
- if ( ! -e "$signed_cfg" ) {
- $signed_cfg = $cfg;
- }
- print "Sign Image '$dir/$img' with cfg '$signed_cfg'...\n";
- system("$command $key $signed_cfg $dir/$img $dir/$signed_img $nand_page_size") == 0 or die "sign EMMC image fail";
- }
- }
- print "remove unused *sig files \n";
- system("rm -f $dir/*.sig ");
|