Bootloader

Форк
0
/
SConscript 
96 строк · 3.0 Кб
1
# coding=utf-8
2
import os
3
import sys
4
from datetime import date
5
import copy
6
import binascii
7

8
Import('*')
9
if not 'MCUCPP_PATH' in globals():
10
    MCUCPP_PATH = '#/../Mcucpp'
11

12
if 'device' in ARGUMENTS:
13
    deviceName = ARGUMENTS['device']
14

15
if 'key' in ARGUMENTS:
16
    key = binascii.unhexlify(ARGUMENTS['key'])
17
    keyStr = ', '.join(['0x%x' % b for b in key ])
18
    print (keyStr)
19
else:
20
    raise Exception('No AES key was provided in command line')
21

22
sys.path.insert(1, Dir(MCUCPP_PATH + '/scons').srcnode().abspath)
23

24
import devices
25

26
device = copy.deepcopy(devices.SupportedDevices[deviceName])
27
deviceCopy = copy.deepcopy(device)
28

29
linkerScripts = {'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

35
device['linkerScript'] = linkerScripts[deviceName]
36

37
env = Environment(DEVICE=device,
38
                  toolpath=['%s/scons' % MCUCPP_PATH],
39
                  tools=['mcucpp'])
40

41
testEnv = Environment(DEVICE=deviceCopy,
42
                  toolpath=['%s/scons' % MCUCPP_PATH],
43
                  tools=['mcucpp'])
44

45
env['CUSTOM_HEX_PARAMS'] = '--only-section .isr_vectors_orig'
46

47
env.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

54
env.Append(CPPDEFINES={'_DEBUG': 0})
55

56
env.Append(CPPPATH=['./tiny-AES-c'])
57

58
#env.Append(LINKFLAGS = ["-nostdlib"])
59
env.Append(CCFLAGS=["-Os"])
60
testEnv.Append(CCFLAGS=["-Os"])
61

62
bootTargets = []
63

64

65
def BuildBootloader(envBoot, testEnv, suffix):
66

67
    bootloader = envBoot.Object('bootloader%s' % suffix, './bootloader.cpp')
68
    protocol = envBoot.Object('boot_protocol%s' % suffix, './boot_protocol.cpp')
69
    main = envBoot.Object('boot_main%s' % suffix, './boot_main.cpp')
70
    crypt = envBoot.Object('boot_crypt%s' % suffix, './Encryption.cpp')
71
    aes = envBoot.Object('boot_aes%s' % suffix, './tiny-AES-c/aes.c')
72

73
    bootloader_objects = [bootloader, protocol, main, crypt, aes]
74
    elfBootloader = envBoot.Program(
75
        'Bootloader%s' % suffix, bootloader_objects)
76
    bootLss = envBoot.Disassembly(elfBootloader)
77
    bootHex = envBoot.Hex(elfBootloader)
78

79
    #BootSize = envBoot.Size(elfBootloader, 'BootSize')
80
    testAppObj = testEnv.Object('test_app_%s' % suffix, './test_app.cpp')
81
    elfTestApp = testEnv.Program('test_app_%s' % suffix, testAppObj)
82
    testAppLss = testEnv.Disassembly(elfTestApp)
83
    testAppHex = testEnv.Hex(elfTestApp)
84

85
    bootTargets.extend([elfBootloader, bootLss, bootHex, elfTestApp, testAppLss, testAppHex])
86

87
    # if hasattr(envBoot.__class__, 'Flash') and callable(getattr(envBoot.__class__, 'Flash')):
88
    flash = envBoot.Flash(bootHex)
89
    protect = envBoot.Protect(bootHex)
90
    # flash = testEnv.Flash(elfTestApp)
91
    bootTargets.extend([flash, protect])
92
       
93

94
BuildBootloader(env, testEnv, deviceName)
95

96
env.Alias('Bootloader', bootTargets)
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.