Контрольная сумма считается не всей программы, а только области векторов (иначе стартовала бы очень медленно).
Постарайтесь изменить cstartup.s79 например так:
_int_vectors:
ldr pc, do_reset_addr
ldr pc, do_undefined_instruction_addr
ldr pc, do_software_interrupt_addr
ldr pc, do_prefetch_abort_addr
ldr pc, do_data_abort_addr
.long 0xB8A06F58 /* ARM-reserved vector */
ldr pc, do_irq_addr
ldr pc, do_fiq_addr
do_reset_addr: .long do_reset
do_undefined_instruction_addr: .long do_undefined_instruction
do_software_interrupt_addr: .long do_software_interrupt
do_prefetch_abort_addr: .long do_prefetch_abort
do_data_abort_addr: .long do_data_abort
.long 0x00
do_irq_addr: .long do_irq
do_fiq_addr: .long do_fiq
/****************************************************
* IRQ Handler *
Branch to a c function to handle the exception. *
****************************************************/
do_irq:
b ExternalInterrupt
и т. д.