Bootloader
/
SConscript
96 строк · 3.0 Кб
1# coding=utf-8
2import os
3import sys
4from datetime import date
5import copy
6import binascii
7
8Import('*')
9if not 'MCUCPP_PATH' in globals():
10MCUCPP_PATH = '#/../Mcucpp'
11
12if 'device' in ARGUMENTS:
13deviceName = ARGUMENTS['device']
14
15if 'key' in ARGUMENTS:
16key = binascii.unhexlify(ARGUMENTS['key'])
17keyStr = ', '.join(['0x%x' % b for b in key ])
18print (keyStr)
19else:
20raise Exception('No AES key was provided in command line')
21
22sys.path.insert(1, Dir(MCUCPP_PATH + '/scons').srcnode().abspath)
23
24import devices
25
26device = copy.deepcopy(devices.SupportedDevices[deviceName])
27deviceCopy = copy.deepcopy(device)
28
29linkerScripts = {'stm32f407': r'linker_scripts\stm32_40x.ld',
30'stm32f429': r'linker_scripts\stm32_40x.ld',
31'stm32f100': r'linker_scripts\stm32_100xB.ld',
32'stm32f103': r'linker_scripts\stm32_103xB.ld',
33'stm32l471': r'linker_scripts\stm32_471.ld'}
34
35device['linkerScript'] = linkerScripts[deviceName]
36
37env = Environment(DEVICE=device,
38toolpath=['%s/scons' % MCUCPP_PATH],
39tools=['mcucpp'])
40
41testEnv = Environment(DEVICE=deviceCopy,
42toolpath=['%s/scons' % MCUCPP_PATH],
43tools=['mcucpp'])
44
45env['CUSTOM_HEX_PARAMS'] = '--only-section .isr_vectors_orig'
46
47env.Append(CPPDEFINES={
48'BUILD_YEAR': date.today().year,
49'BUILD_MONTH': date.today().month,
50'BUILD_DAY': date.today().day,
51'AES_KEY' : keyStr},
52)
53
54env.Append(CPPDEFINES={'_DEBUG': 0})
55
56env.Append(CPPPATH=['./tiny-AES-c'])
57
58#env.Append(LINKFLAGS = ["-nostdlib"])
59env.Append(CCFLAGS=["-Os"])
60testEnv.Append(CCFLAGS=["-Os"])
61
62bootTargets = []
63
64
65def BuildBootloader(envBoot, testEnv, suffix):
66
67bootloader = envBoot.Object('bootloader%s' % suffix, './bootloader.cpp')
68protocol = envBoot.Object('boot_protocol%s' % suffix, './boot_protocol.cpp')
69main = envBoot.Object('boot_main%s' % suffix, './boot_main.cpp')
70crypt = envBoot.Object('boot_crypt%s' % suffix, './Encryption.cpp')
71aes = envBoot.Object('boot_aes%s' % suffix, './tiny-AES-c/aes.c')
72
73bootloader_objects = [bootloader, protocol, main, crypt, aes]
74elfBootloader = envBoot.Program(
75'Bootloader%s' % suffix, bootloader_objects)
76bootLss = envBoot.Disassembly(elfBootloader)
77bootHex = envBoot.Hex(elfBootloader)
78
79#BootSize = envBoot.Size(elfBootloader, 'BootSize')
80testAppObj = testEnv.Object('test_app_%s' % suffix, './test_app.cpp')
81elfTestApp = testEnv.Program('test_app_%s' % suffix, testAppObj)
82testAppLss = testEnv.Disassembly(elfTestApp)
83testAppHex = testEnv.Hex(elfTestApp)
84
85bootTargets.extend([elfBootloader, bootLss, bootHex, elfTestApp, testAppLss, testAppHex])
86
87# if hasattr(envBoot.__class__, 'Flash') and callable(getattr(envBoot.__class__, 'Flash')):
88flash = envBoot.Flash(bootHex)
89protect = envBoot.Protect(bootHex)
90# flash = testEnv.Flash(elfTestApp)
91bootTargets.extend([flash, protect])
92
93
94BuildBootloader(env, testEnv, deviceName)
95
96env.Alias('Bootloader', bootTargets)
97