Danilo Perdigao
Londrina, PR
2012
Danilo Perdigao
Area: Telecomunicacoes
Orientador:
Prof. MSc. Decio Luiz Gazzoni Filho
Londrina, PR
2012
Ficha Catalografica
Perdigao, Danilo
Bootloader para atualizacao remota de firmware via tecnologia
GSM. Londrina, PR, 2012. 53 p.
Area: Telecomunicacoes
Comissao Examinadora
Agradeco primeiramente a minha mae Sueli Barboza Perdigao e meu pai Se-
bastiao Perdigao por toda dedicacao, incentivo e compreensao ao longo de todos
esses anos da minha graduacao.
Agradeco tambem a todos meus parentes e amigos que de uma forma ou outra
me ajudaram durante os anos de minha graduacao.
Resumo
The design of electronic devices includes, with increasing frequency, the use of em-
bedded systems. Many of these devices, such as vehicle tracking modules, teleme-
try modules and residential safety equipment, use cellular modules to transmit
information to corporate servers. An issue faced by companies that provide this
type of service is that of maintenance. Many problems can arise depending on
the area where the product is used and also depending on the cellular carrier used
by the costumer.
This work seeks to provide a solution to this problem, by developing a remote
firmware update system using the cellular module embedded in the product.
This type of remote update is known as FOTA (Firmware Over The Air). The
update is done through a Bootloader, which is a section of code inserted into a
reserved space of a microcontroller. The Bootloader is responsible for receiving
data from the cell module using the FTP protocol and updating the firmware of
the microcontroller itself, thereby making it unnecessary to remove the equipment
from the operating site to connect it to a computer, or even transport it to the
manufacturer.
Sumario
Lista de Figuras
Lista de Tabelas
Lista de Abreviaturas
1 Introducao 1
2 Revisao de literatura 4
2.1 Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Comunicacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Seguranca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.1 Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Desenvolvimento 27
3.3 Bootloader que faz uma escrita na memoria sem comunicacao externa 29
3.4.1 S19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4 Resultado 47
5 Conclusao 50
Referencias 52
Lista de Figuras
IP Internet Protocol
1 Introducao
A imagem do firmware e recebida pela placa via internet, utilizando uma co-
nexao com um servidor FTP, usando o modulo celular embarcado no produto
para prover conexao atraves da tecnologia GSM, conectado ao microcontrolador
1 Introducao 2
o tempo de gravacao em relacao a gravacao byte a byte, pois a alta tensao que
e aplicada a flash nao precisa ser desabilitada apos a gravacao de cada byte.
Ja o apagamento da memoria nao pode ser feito byte a byte. Sempre que um
comando de apagamento e utilizado, este apaga a pagina inteira em que esta
situado o endereco que se deseja apagar.
2 Revisao de literatura
2.1 Bootloader
2.1.1 Firmware
O firmware deve ser gravado em uma memoria que seja capaz de reter as
informacoes mesmo quando a alimentacao seja desligada. E essa a funcao da
memoria nao volatil do microcontrolador. Existem varios tipos de memoria
nao volatil, como as memorias ROM, PROM, EPROM, EEPROM e Flash. As
memorias EEPROM e Flash sao as mais utilizadas hoje em dia nos microcontro-
ladores. Cada uma tem suas caractersticas e vantagens, sendo que a memoria
Flash e uma variacao da EEPROM e vem ganhando um espaco muito grande e
sendo utilizada em quase todos os equipamentos atuais.
A memoria Flash pode ser lida um numero infinito de vezes, porem possui
um numero finito de apagamento e gravacao. Isso se deve ao desgaste que ocorre
no processo de apagamento e gravacao da memoria Flash. Para realizar o apa-
gamento ou a gravacao da memoria Flash, ela exige um nvel de tensao maior
do que o necessario para a leitura e varia entre 10V e 13V. A Flash e dividida
em blocos e para ser feito o apagamento de algum byte da memoria e preciso
que seja apagado todo o bloco em que aquele byte esta inserido. Ja o processo
de escrita pode ser feito byte a byte ou por bloco, desde que este ja tenha sido
apagado. Escrever um byte na memoria Flash sem que este tenha sido apagado
pode corromper o valor que sera gravado.
O fato da memoria Flash precisar de um nvel de tensao mais alto para execu-
tar o apagamento/gravacao em relacao ao nvel de tensao para a leitura, dificulta
2.2 Comunicacao 8
2.2 Comunicacao
Comunicacao pode ser definido como o processo pelo qual uma informacao
gerada em um ponto no espaco e no tempo chamado fonte e transferida a outro
ponto no espaco e no tempo chamado destino. Com outras palavras podemos
dizer que Comunicacao e a troca de informacao entre sujeitos ou objetos.
Alem de definir o Baud Rate, e preciso escolher qual sera o modo de sincro-
nismo que sera utilizado. E preciso definir alguma maneira de fazer com que o
equipamento que vai receber a informacao consiga ler os bits nos momentos em
que eles estao sendo enviados. Existem dois modos de se fazer a transmissao, a
Transmissao Assncrona e a Transmissao Sncrona(CANZIAN, 2011).
Dentro de cada celular existe um modulo GSM. Esse modulo tem a funcao de
codificar as informacoes e transmit-las para a operadora em que esta registrado.
O avanco da tecnologia vem fazendo com que esses modulos fiquem cada
vez mais robustos, incluindo opcoes de seguranca como o anti-jamming e algu-
mas outras caractersticas que facilitam a utilizacao, podendo ser incorporados a
qualquer equipamento eletronico.
2.3 Seguranca
2.3.1 Criptografia
informacoes. Alice e Beto sao entidades na Figura 2.1. Uma entidade pode
ser uma pessoa, um terminal de computador, etc.
2.3.1.2 Autenticacao
1. Alice e Beto podem se comunicar sem delay. Ou seja, ambos sao ativos na
comunicacao em tempo real.
2. Alice ou Beto podem estar trocando mensagens com algum atraso. Ou seja,
as mensagens podem ser encaminhadas atraves de varias redes, armazena-
das e transmitidas em algum momento posterior.
Ee (M ) = C
Dd (C) = M
2.3.2.1 AES
Ee (M ) = C
Dd (C) = M
Na figura 2.4 a chave e transmitida para Alice por um canal nao seguro.
Como a chave nesse caso nao e secreta, qualquer um pode pegar a chave e enviar
2.3 Seguranca 19
uma mensagem cifrada para Beto, mas so Beto tem a chave privada para decifrar
a mensagem recebida.
Existem algoritmos de chave publica que podem ser utilizados para as assi-
naturas digitais(SCHNEIER, 1996). Em alguns algoritmos a chave publica ou a
chave privada podem ser usadas para a cifragem. Cifrar um documento com sua
chave privada garante uma assinatura digital segura. Em outros casos existe um
algoritmo diferente para assinaturas digitais que nao podem ser utilizados para
cifragem.
O protocolo e simples:
Figura 2.5: Ataque em uma comunicacao de chave publica entre duas partes.
2.3 Seguranca 22
2.3.5.1 SHA-1
Secure Hash Algorithm(SHA-1), foi proposto pelo National Institute for Stan-
dards and Technology (NIST) dos Estados Unidos para certas aplicacoes do go-
verno federal(MENEZES; OORSCHOT; VANSTONE, 1996). As principais diferencas
de SHA-1 a partir de MD4 sao os seguintes:
MACs podem ser usados para autenticar os arquivos entre usuarios. Eles
tambem podem ser usados por uma unica pessoa para determinar se os proprios
arquivos foram alterados, talvez por um vrus. Um usuario pode calcular o MAC
de seus arquivos e armazenar esse valor em uma tabela. Se o usuario tivesse
usado um funcao de resumo criptografico de mao unica, o vrus poderia calcular
o novo valor de hash apos a infeccao e substituir a entrada da tabela. Um vrus
nao poderia fazer isso com um MAC, porque o vrus nao conhece a chave.
2.3.6.1 HMAC-SHA1
Um HMAC pode ser usado para determinar se uma mensagem enviada por um
canal inseguro foi violada. O remetente calcula o resumo criptografico dos dados
originais e envia os dados originais e de valor hash como uma unica mensagem.
O receptor recalcula o resumo criptografico na mensagem recebida e verifica se o
HMAC calculad coincide com o HMAC transmitido.
3 Desenvolvimento
Code Warrior
Interface de Debug
Microcontrolador
3.2 Programa com comunicacao serial simples 28
Isso tudo foi estudado e testado, porem nao utilizou-se o Processor Expert
por este limitar o desenvolvedor em alguns pontos. Um dos pontos principais era
a geracao de codigos de inicializacao do microcontrolador que nao podiam ser
alterados com a utilizacao do Processor Expert.
Para fazer com que uma rotina seja executada direto da memoria RAM, e
necessario fazer uma copia dessa rotina, que fica originalmente na Flash, para a
3.3 Bootloader que faz uma escrita na memoria sem comunicacao externa 30
RAM antes de executa-la. Para isso e necessario desenvolver uma rotina que faca
essa copia para a RAM.
Existem duas flags no registrador FSTAT que indicam erros durante o pro-
cesso de escrita da Flash. A flag FPVIOL indica um erro de violacao a uma
area protegida. Qualquer outra violacao da sequencia exigida ou outro erro de
condicoes vai setar a flag FACCERR.
3.4.1 S19
Apos cada uma dessas marcacoes, o bloco apresenta outros dgitos em hexa-
decimal, chamados de Byte Count. O Byte Count indica a quantidade de bytes,
par de dgitos em hexa, que vem a seguir no bloco, includo o endereco, dados e
checksum.
A figura 3.2 mostra um arquivo destacando cada setor dos blocos do arquivo.
A ultima pagina da memoria Flash porem, possui alguns enderecos que sao
utilizados pelo microcontrolador. O Vetor de Interupcoes e um deles e com o
sistema de protecao habilitado, por menor que seja a quantidade de memoria pro-
tegida certamente esses enderecos estarao protegidos tambem. Como o usuario
precisara utilizar o vetor de interrupcoes no programa em que estiver desenvol-
vendo, e preciso liberar o vetor de interrupcoes para que o usuario possa altera-
lo da maneira que quiser. Para isso o microcontrolador possui uma funcao de
redirecionamento do vetor de interrupcoes. Esse redirecionamento so pode ser
utilizado quando alguma parte da memoria Flash esta protegida. Dessa maneira,
o microcontrolador redireciona o vetor de interrupcoes para as ultimas posicoes
da memoria que nao estejam protegidas.
O arquivo S19 utiliza a codificacao ASCII para ser mais legvel para o usuario
na identificacao dos dados. Para gravar os dados do arquivo S19 no microcontro-
lador e necessario fazer a conversao de ASCII para Hexadecimal. Um endereco
do microcontrolador que precise ser gravado com o byte A6, sera visualizado
no arquivo S19 como A6 utilizando um editor de texto comum. Porem os edi-
tores de texto comuns utilizam tambem a codificacao ASCII para visualizacao
dos arquivos. Se for utilizado um editor que mostre bit a bit como esta dividido
o arquivo, e possvel ver que na verdade o que era visto como A6 sao dois
bytes na verdade, 01000001 e 00110110. O que realmente deve ser gravado
na memoria do microcontrolador e apenas o byte 10100110.
Assim e necessario fazer uma conversao dos dados no momento em que esse
e transmitido para o microcontrolador e antes de ser gravado na memoria. Para
3.4 Bootloader atraves de comunicacao serial com o computador 35
isso foi desenvolvida uma funcao que identifica o dado que esta chegando na
codificacao ASCII e converte-lo para Hexadecimal.
Mas so isso nao e suficiente para que a conversao funcione. Ainda e necessario
concatenar os valores de dois bytes em apenas 1 byte. Por exemplo, o byte
A6 em ASCII que e na verdade 01000001 e 00110110 em Hexadecimal.
Aplicando as regras citadas acima, continuaria ainda sendo formado por dois byte
00001010 e 00000110, que representam em Hexa os valores 0A e 06. E
preciso entao deslocar o primeiro byte em 4 casas binarias para a esquerda e soma-
lo ao segundo apos realizadas as operacoes de conversao. Assim o byte 0A que
em binario e 00001010, quando deslocado de 4 casas para a esquerda ficaria
A0 em Hexa e 10100000 em binario. Assim somando o byte 10100000
com o byte 00000110 e obtido o valor correto que e 10100110 ou A6 em
Hexadecimal.
Com a memoria totalmente apagada era necessario realizar a escrita dos dados
3.4 Bootloader atraves de comunicacao serial com o computador 36
do firmware na memoria. A rotina que foi criada para fazer essa funcao utilizava-
se das rotinas de comunicacao serial e tambem da rotina de conversao de dados.
Apos isso a rotina aguardava ate o momento em que recebece o marcador S1,
o que indica que a linha possui dados de programa que devem ser gravados na
memoria. Logo apos receber o S1, a rotina guardava o valor do Byte Count em
uma variavel para utilizar no momento da escrita. Apos isso era detectado o
endereco onde deveriam ser guardados os bytes que viriam a seguir. Assim era
possvel realizar a escrita na memoria a partir do endereco recebido e a quantidade
de bytes que deveriam ser gravados. Apos isso a rotina voltava a esperar pelo
marcador S1. A rotina era finalizada no momento em que recebia um marcador
S9, que indicava que todos os dados de programa ja haviam sido transmitidos e
gravados na memoria.
Antes de pular para o codigo do usuario, varias precaucoes devem ser toma-
das. Como por exemplo a pilha, que pode estar cheia por ter sido utilizada pelo
bootloader, ou entao as flags de status do microcontrolador devem ser zeradas
entre outras pequenas coisas. A melhor maneira de se prevenir qualquer problema
e executando um reset no microcontrolador e criando uma rotina de verificacao
logo no inicio do codigo do bootloader, antes mesmo de fazer qualquer chamada
de funcao ou outra operacao. Esse rotina de verificacao deve ser capaz de iden-
tificar se ha firmware programado no microcontrolador, ou seja, se o codigo do
usuario ja foi inserido. Caso haja codigo do usuario essa rotina deve pular para
o incio do codigo do usuario, caso contrario deve entrar no bootloader. A figura
3.3 mostra um fluxograma da rotina de verificacao.
Para garantir a protecao necessaria do firmware que sera gravado pelo bootlo-
ader foi utilizado o algoritmo de criptografia simetrica AES(Advanced Encryption
Standard). Para garantir a autenticidade e integridade do codigo que o bootloa-
der ira receber, foi utilizado um codigo de autenticacao de mensagem baseado na
funcao de resumo criptografico SHA1, chamado de HMAC-SHA1.
Alem dos arquivos de dados, foi criado tambem um arquivo de controle, com
o objetivo de informar o bootloader caractersticas do firmware que sera envi-
ado. Essas caractersticas sao: Cabecalho, Tamanho do Arquivo, ID do Produto,
Versao do Firmware, Menor Endereco dos Dados, Maior Endereco dos Dados,
Quantidade de Blocos em que o firmware foi dividido.
Menor e o Maior Endereco dos Dados sao utilizados pelo bootloader para
garantir que esses enderecos estejam na area livre da memoria Flash. Como
o bootloader fica no final da memoria e a memoria Flash tem como o primeiro
endereco o 0x8000, e necessario que o firmware que sera programado esteja a patir
do endereco 0x8000 e nao ultrapasse o endereco de onde e o incio do bootloader.
3.5 Adicao de criptografia e sistemas de seguranca contra copia de informacoes 39
Quantidade de Blocos e utilizado pelo bootloader para que ele tenha conheci-
mento de quantos blocos ele vai atualizar e, portanto, quando terminar o processo
de atualizacao. Quantidade de Blocos ocupa 1 byte.
Alem disso, o arquivo de controle conta com dois vetores de 20 bytes cor-
respondentes ao HMAC-SHA1. O primeiro vetor corresponde ao HMAC-SHA1
do firmware por inteiro, que sera utilizado para verificacao da integridade do
firmware que esta gravado no microcontrolador durante o processo de iniciacao
do programa. O segundo vetor e o HMAC-SHA1 do arquivo de controle e e cal-
culado a partir das seguintes informacoes: ID do Produto, Versao do Firmware,
Menor Endereco dos Dados, Maior Endereco dos Dados, Quantidade de Blocos e
HMAC-SHA1 geral do firmware.
Com posse das rotinas que geram o HMAC-SHA1, teve-se a ideia de utiliza-las
para fazer a verificacao da integridade do firmware no momento da inicializacao
do microcontrolador, mais exatamente no momento em que verifica se deve ou
nao entrar no modo bootloader.
Apos esse setor vem o firmware do usuario, que vai de X+1 ate 0xCFFF que
e o ultimo byte antes do incio do bootloader.
3.5 Adicao de criptografia e sistemas de seguranca contra copia de informacoes 41
Apos isso o bootloader ira requisitar o arquivo com o primeiro bloco de dados
do firmware. Da mesma maneira que faz com o arquivo de controle, o bootloader
faz todas as verificacoes tambem nos blocos de dados. Apos todas as verificacoes
serem feitas, o bootloader vai gravar os dados do bloco na memoria do microcon-
trolador. Antes de gravar os dados, o bootloader executa a funcao para decifrar
os dados.
Apos finalizar a escrita dos dados, o bootloader verifica se aquele bloco era o
ultimo bloco do firmware. Caso nao seja ela requisita o proximo bloco. Quando
termina de atualizar o ultimo bloco, o bootloader executa um Opcode Ilegal para
gerar um reset forcado no microcontrolador, fazendo assim com que ele comece a
executar o codigo desde o incio, passando pela rotina de verificacao de integridade
do firmware.
O modulo celular utilizado possui ajuste automatico de baud rate, ou seja, nao
e preciso configura-lo com um baud rate especfico. Uma pratica interessante e
enviar alguns comandos basicos no incio da comunicacao para que o modulo tenha
um tempo mnimo para detectar qual e o baud rate que esta sendo utilizado pelo
outro lado e se auto ajustar. Para garantir o auto ajuste, no incio da comunicacao
entre microcontrolador e modulo celular, sao enviados pelo microcontrolador 3
comandos AT simples. O comando AT so faz com que o modulo responda OK e
tem como objetivo, na maioria das vezes, verificar se o modulo esta respondendo
corretamente.
O modulo celular vem de fabrica configurado com ECO. Quando o ECO esta
habilitado no modulo celular, ele envia de volta para o microcontrolador o co-
mando que recebeu quase que instantaneamente e so depois envia a resposta. A
vantagem de se usar o ECO e ter a certeza que o modulo celular recebeu o co-
mando que foi enviado, pois como algumas respostas podem demorar para serem
dadas, pode-se reenviar o comando em um tempo bem menor se for verificado
que o modulo nao recebeu o comando. Como a rotina que foi desenvolvida nao
leva em consideracao o ECO, desabilitou-se o ECO com o comando ATE0.
No servidor FTP, foi criada uma pasta onde os arquivos do firmware seriam
colocados. Apos o modulo celular se conectar no servidor FTP, ele deveria acessar
a pasta onde os arquivos estavam. Para acessar uma pasta dentro do servidor de
FTP existe o comando AT+UFTPC=8,NomeDaPasta. Apos acessar a pasta
era possvel fazer o download de qualquer arquivo que estivesse dentro da pasta.
Ate esse momento, nao havia sido feita nenhuma alteracao no codigo do
bootloader desenvolvido na etapa anterior, apenas os comandos iniciais de co-
municacao com o modulo GSM tinham sido adicionados. Porem a partir desse
momento, a maneira como o bootloader requisita os arquivos deveria ser alte-
rada. O modulo celular fornece todo o apoio necessario para a comunicacao com
um servidor FTP. Fornece tambem comandos para fazer o download de arqui-
vos do servidor. Os arquivos baixados do servidor FTP sao armazenados em uma
memoria nao volatil do modulo celular. Um outro comando deve ser utilizado para
fazer com que o modulo celular envie o arquivo para o microcontrolador. Existe
tambem um comando utilizado para deletar o arquivo de dentro da memoria do
modulo celular.
Dessa forma, foram feitas as alteracoes necessarias para fazer com que o boo-
tloader requisitasse o arquivo atraves do modulo celular. Onde o bootloader sim-
plesmente enviava uma frase na porta seria requisitando o arquivo, foram adicio-
nados alguns passos. Primeiramente utilizou-se o comando AT+UDELFILE=arquivo
para deletar um arquivo da memoria do modulo celular. Esse foi o primeiro passo
utilizado pois nao e possvel baixar um arquivo do servidor se ja existir algum ar-
3.6 Bootloader com comunicacao via internet 45
quivo com o mesmo nome dentro do modulo celular. Depois utilizou-se o comando
AT+UFTPC=4,arquivo para realizar o download do arquivo e armazena-lo na
memoria interna do modulo celular. Apos o download ser finalizado, utilizou-se o
comando AT+URDFILE=arquivo para receber o arquivo que esta no modulo
celular. Feito isso, o restante da rotina permaneceu a mesma da etapa anterior,
onde todas as verificacoes necessarias eram feitas e as devidas acoes eram toma-
das. Um outro comando para deletar o arquivo foi adicionado, apos o termino
das verificacoes e devidas acoes, para liberar o espaco na memoria do modulo
celular.
3.6 Bootloader com comunicacao via internet 46
47
4 Resultado
5 Conclusao
A utilizacao de outro modulo celular pode ser um dos pontos mais complica-
dos de se adequar, pois caso o modulo celular nao possua suporte aos protocolos
FTP e TCP/IP, seria necessario o desenvolvimento desses protocolos no micro-
controlador, criando assim um novo requisito, que nao foi implementado nesse
projeto.
Referencias
KRENEK, P. Flash Programming Routines for the HCS08 and the ColdFire
(V1) Devices. Dezembro 2009. Internet. Disponvel em: <http://cache.
freescale.com/files/microcontrollers/doc/app_note/AN3942.pdf>.