博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高通平台手机开发之刷机包脚本
阅读量:4284 次
发布时间:2019-05-27

本文共 4173 字,大约阅读时间需要 13 分钟。

打包脚本:

高通平台有很多CPU,里面运行不同的软件,所以需要将他们打包到以前,通过高通的工具QFIL,Firehose之类的工具刷写到手机里。

从高通的网站,上下载的Code,有两个git目录 
一是编译好的二进制文件,比如:msm8974-la-3-0_amss_device 
另一个是源码,比如:msm8974-la-3-0_amss_oem_standard 
里面的目录都是一样的。

进入目录有两个文件:about.html,contents.xml 
用于描述整个软件的Release版本号,各个模块的版本号,对应的AP软件版本号等待。

common/build 

├── bin 
│ └── asic 
│ ├── NON-HLOS.bin 
│ └── pil_split_bins 
│ ├── adsp.b00 
│ ├── xxxxxxxx 
├── fastboot_all.py 
├── fastboot_complete.py 
├── gpt_backup0.bin 
├── gpt_both0.bin 
├── gpt_main0.bin 
├── partition.xml 
├── patch0.xml 
├── rawprogram0.xml 
└── update_common_info.py

我们可以在partition.xml增加Partition或者改变他们的大小。 
├── gpt_backup0.bin 
├── gpt_both0.bin 
├── gpt_main0.bin 
├── patch0.xml 
├── rawprogram0.xml 
上面这几个文件在脚本运行时会自动更新。

打包的目标是根据partition.xml将需要的文件放到一起,以供烧录。 
update_common_info.py是打包的脚本,做以下事情: 
1)将modem, adsp, wcnss和一部分tz里编出来的文件打包成一个NON-HLOS.bin 
2)将大的Image分割成小的,比如system, userdata等等 
3)更新以下文件 
├── gpt_backup0.bin 
├── gpt_both0.bin 
├── gpt_main0.bin 
├── patch0.xml 
├── rawprogram0.xml

由于update_common_info.py不能最终提供给我们一个可供刷写的包,所以写了pack.sh来生成完整的包。 
1)加入Linux Image,创建目录LINUX//out/target/product/msm8974,创建system.img等文件的链接。链接到Linux Image。这个目录LINUX/android/out/target/product/msm8974可以从contents.xml里看到。 
2)执行update_common_info.py 
3)将刷写包需要的文件拷贝到一个目录,压缩打包。

#!/bin/bash# Link build imageROOT=`pwd`LNX_SRC_PATH=/workspace/bacon-kk-3.0/out/target/product/q1LNX_DEST_PATH=$ROOT/LINUX/android/out/target/product/msm8974# Get product namePRODUCT=${LNX_SRC_PATH##*/}IMG_LIST="boot.img cache.img emmc_appsboot.mbn persist.img recovery.img system.img userdata.img"# Delete previous filescd $LNX_DEST_PATHrm *for img in $IMG_LISTdo  echo $img  if [ ! -e $LNX_SRC_PATH/$img ]  then    echo "Linux image: $img not found in $LNX_SRC_PATH"    exit  fi  ln -s $LNX_SRC_PATH/$img $LNX_DEST_PATHdoneecho "Link finished!"# Delete the output file#rm -rf bin/# todo later# Generate NONHLOS.bin and spare imagecd $ROOT/common/build && python update_common_info.pyecho "Split finished!"# Check if bin/ is generatedif [ -d "bin" ]then  ls "bin"else  echo "Error, no bin generated!"  exit 0ficd $ROOT# Copy filescp_files="$ROOT/common/build/bin/asic/NON-HLOS.bin$ROOT/rpm_proc/build/ms/bin/AAAAANAAR/rpm.mbn$ROOT/boot_images/build/ms/bin/8974/MPRG8974.mbn$ROOT/boot_images/build/ms/bin/8974/prog_emmc_firehose_8974.mbn$ROOT/boot_images/build/ms/bin/8974/sbl1.mbn$ROOT/debug_image/build/ms/bin/AAAAANAZ/sdi.mbn$ROOT/trustzone_images/build/ms/bin/AAAAANAA/tz.mbn$ROOT/common/build/gpt_main0.bin$ROOT/common/build/gpt_backup0.bin$ROOT/common/build/patch0.xml$LNX_SRC_PATH/emmc_appsboot.mbn$LNX_SRC_PATH/boot.img$LNX_SRC_PATH/recovery.img"for file in $cp_filesdo  cp $file $ROOT/common/build/bin/asic/sparse_images/done# Rename the folderGEN_TIME=`date +%Y-%m-%d-%H%M%S`gen_file=FlashPackage_${PRODUCT}_${GEN_TIME}mv $ROOT/common/build/bin/asic/sparse_images/ $ROOT/common/build/bin/asic/$gen_file#zipcd $ROOT/common/build/bin/asiczip -r $gen_file.zip $gen_filecd $ROOTmv $ROOT/common/build/bin/asic/$gen_file.zip ./echo "Flash package:$ROOT/$gen_file.zip has created!"   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

转载地址:http://zingi.baihongyu.com/

你可能感兴趣的文章
uboot编译内容详解
查看>>
uboot Makefile 分析
查看>>
uboot网络验证
查看>>
烧写uboot
查看>>
QT安装
查看>>
QtCreator介绍
查看>>
QT工程实例
查看>>
pkg-config
查看>>
Linux内核分析-1/反汇编(堆栈)
查看>>
Linux内核分析-2/时间片轮转多道程序
查看>>
Linux内核分析-4/5/系统调用
查看>>
c/c++常见关键字
查看>>
C++内存地址分配和内存区划分简介
查看>>
C++数值交换
查看>>
指针数组、数组指针、函数指针、指针函数
查看>>
float,double在内存中的存储方式
查看>>
int main(int argc,char* argv[])详解
查看>>
C++打印地址
查看>>
ARM处理器比较:A8/A9
查看>>
ARM处理器工作模式
查看>>