1. 解压编译工具链
~/Qualcomm$ ls -l
总用量 20
drwxr-xr-x 10 zpx zpx 4096 8月 1 2017 ARM501bld94_old
drwxr-xr-x 9 zpx zpx 4096 8月 1 2017 gcc-linaro-4.9-2014.11-x86_64_aarch64-elf
drwxr-xr-x 4 zpx zpx 4096 8月 1 2017 gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux
drwxr-xr-x 7 zpx zpx 4096 8月 1 2017 HEXAGON_Tools
drwxr-xr-x 3 zpx zpx 4096 8月 1 2017 LLVM
~/ARM$ ls -l
总用量 4
drwxr-xr-x 10 zpx zpx 4096 6月 27 2017 ARM501bld94
2. 准备TZ 4.0.5 源代码
~/Android/TZ.BF.4.0.5$ ls -l
总用量 12
-rwxr-xr-x 1 zpx zpx 768 1月 13 15:41 BuildProducts.txt
drwxr-xr-x 15 zpx zpx 4096 10月 28 2016 static_analysis
drwxr-xr-x 6 zpx zpx 4096 10月 28 2016 trustzone_images
3. 设置环境变量
vim ~/.bashrc
119 ######zpx add#################################
120 export ARMROOT=/home/zpx/ARM/ARM501bld94
121 export ARMINC=$ARMROOT/include
122 export ARMLIB=$ARMROOT/lib
123 export ARMBIN=$ARMROOT/bin
124 export ARMPATH=$ARMROOT/bin64
125 export ARMINCLUDE=$ARMROOT/include
126 export ARMTOOLS=ARMCT5.01
127 export PATH=$ARMINC:$ARMLIB:$ARMBIN:$ARMPATH:$ARMINCLUDE:$PATH
128
129 export LLVMTOOLS=LLVM
130 export LLVMROOT=/home/zpx/Qualcomm/LLVM/Snapdragon-llvm-3.5.2.4-compiler-linux64
131 export LLVMBIN=$LLVMROOT/bin
132 export LLVMLIB=$LLVMROOT/lib/clang/3.5.2/lib/linux
133 export MUSLPATH=$LLVMROOT/tools/lib64
134 export MUSL32PATH=$LLVMROOT/tools/lib32
135 export LLVMINC=$MUSLPATH/include
136 export LLVM32INC=$MUSL32PATH/include
137 export LLVMTOOLPATH=$LLVMROOT/tools/bin
138 export GNUROOT=/root/Qualcomm/gcc-linaro-4.9-2014.11-x86_64_aarch64-elf
139 export GNUARM7=/root/Qualcomm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux
140 export PATH=$MUSLPATH:$MUSL32PATH:$LLVMTOOLPATH:$LLVMBIN:$LLVMLIB:$PATH
141
142 ############################################
4.修改编译脚本
vim trustzone_images/tools/build/scons/scripts/llvm.py
修改如下两处代码
@@ -234,9 +234,9 @@ def generate(env):
#exit(1)
if os.environ.has_key('GNUROOT'):
- env.Replace(GNUROOT = os.environ['GNUROOT'])
+ env.Replace(GNUROOT = os.environ['HOME']+'/Qualcomm/gcc-linaro-4.9-2014.11-x86_64_aarch64-elf/')
if os.environ.has_key('GNUARM7'):
- env.Replace(GNUARM7 = os.environ['GNUARM7'])
+ env.Replace(GNUARM7 = os.environ['HOME']+'/Qualcomm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/')
if os.environ.has_key('MUSLPATH'):
env.Replace(MUSLPATH = os.environ['MUSLPATH'])
if os.environ.has_key('MUSL32PATH'):
@@ -333,7 +333,7 @@ def generate(env):
else:
env.Replace(LINK = GNUROOT + "/bin/aarch64-none-elf-ld")
else:
- env.Replace(LINK = GNUARM7 + "/bin/arm-linux-gnueabihf-ld")
+ env.Replace(LINK = GNUARM7 + "/arm-linux-gnueabihf/bin/ld")
env.Replace(NM_FILE = env.RealPath("${BUILD_SCRIPTS_ROOT}/nm.py"))
env.Replace(NM = "${PYTHONCMD} ${NM_FILE}")
env.Append(BUILDERS = {'GetSymbol' : Builder(action='${LLVMTOOLPATH}/arm-nm $SOURCE > ${BUILD_ROOT}/build/ms/aaa.tmp && $NM -f ${BUILD_ROOT}/build/ms/aaa.tmp -o $TARGET ', suffix='.sym', src_suffix='.elf')})
5 编译
cd trustzone_images/build/ms/
./build.sh CHIPSET=msm8937 devcfg sampleapp
6编译结果:
ELF Properties:
Elf Header:
| Magic | ELF |
| Class | ELF64 |
| Data | 2's complement, little endian |
| Version | 1 (Current) |
| OS/ABI | No extensions or unspecified |
| ABI Version | 0 |
| Type | DYN (Shared object file) |
| Machine | 183 |
| Version | 0x1 |
| Entry address | 0x00000000 |
| Program headers offset | 0x00000040 |
| Section headers offset | 0x00000000 |
| Flags | 0x00000000 |
| ELF header size | 64 |
| Program headers size | 56 |
| Number of program headers | 5 |
| Section headers size | 64 |
| Number of section headers | 0 |
| String table section index | 0 |
Elf Program Headers:
| S.No | Type | Offset | VirtAddr | PhysAddr | FileSize | MemSize | Flags | Align |
|------|------|--------|----------|----------|----------|---------|-------|-------|
| 1 | LOAD |0x03000 | 0x00000 | 0x00000 | 0x45d6d | 0x45d6d | 0x5 | 0x100 |
| 2 | LOAD |0x48d80 | 0x46000 | 0x46000 | 0x327a8 | 0x427a8 | 0x6 | 0x80 |
| 3 | LOAD |0x7be00 | 0x89000 | 0x89000 | 0x00270 | 0x00270 | 0x6 | 0x1000|
| 4 | LOAD |0x7ce00 | 0x8a000 | 0x8a000 | 0x000b0 | 0x000b0 | 0x6 | 0x1000|
| 5 | LOAD |0x7de00 | 0x8b000 | 0x8b000 | 0x031e0 | 0x031e0 | 0x4 | 0x1000|
Hash Segment Properties:
| Header Size | 40B |
Header:
| cert_chain_ptr | 0xffffffff |
| cert_chain_size | 0x00001800 |
| code_size | 0x000000e0 |
| data_is_none | 0x00000000 |
| flash_parti_ver | 0x00000003 |
| image_dest_ptr | 0xffffffff |
| image_id | 0x00000004 |
| image_size | 0x000019e0 |
| image_src | 0x00000000 |
| sig_ptr | 0xffffffff |
| sig_size | 0x00000100 |
SecElf Properties:
| image_type | 0 |
| max_elf_segments | 100 |
| testsig_serialnum | None |
------------------------------------------------------
SUMMARY:
Following actions were performed: "sign, encrypt, validate"
Output is saved at: /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/core/bsp/trustzone/qsapps/smplap64/build/ZALAANAA/sign_and_encrypt
| Idx | SignId | Parse | Integrity | Sign | Encrypt | Validate |
| | | | | | | Parse | Integrity | Sign | Encrypt |
|-----|--------|-------|-----------|------|---------|-------|-----------|------|---------|
| 1. |smplap64| T | NA | T | T | T | T | T | T |
Install file: "/home/zpx/Android/TZ.BF.4.0.5/trustzone_images/core/bsp/trustzone/qsapps/smplap64/build/ZALAANAA/sign_and_encrypt/default/smplap64/smplap64.mbn" as "bin/ZALAANAA/signed_encrypted/smplap64.mbn"...
=== Generating sampleapp/A53_64/ZALAANAA/smplap64.mdt...
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.mdt
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b00
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b01
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b02
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b03
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b04
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b05
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/signed_encrypted/smplap64.b06
=== Generating sampleapp/A53_64/ZALAANAA/smplap64.mdt...
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.mdt
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b00
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b01
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b02
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b03
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b04
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b05
BIN /home/zpx/Android/TZ.BF.4.0.5/trustzone_images/build/ms/bin/PIL_IMAGES/SPLITBINS_ZALAANAA/unsigned/smplap64.b06