É o código ou dados do firmware?

29

Quando alguém diz que "atualizou" o firmware para um dispositivo, estou curioso para saber o que isso realmente implica.

  1. O firmware é apenas um binário nativo armazenado na memória e que pode ser interpretado pela CPU do dispositivo (como qualquer outro EXE do computador)? Ou o firmware é apenas um dado que atua como entrada para um programa imutável já codificado / conectado ao dispositivo?
  2. Se o último exemplo não for firmware, como você o chamaria? Por exemplo, digamos que um dispositivo tenha algum binário ( someapp.exe) e você não pode remover ou modificar esse binário. O binário, quando executado, recebe entrada de um chip de memória. Você pode "piscar" os dados para esse chip e, assim, afetar a entrada / configuração someapp.exeque terá efeito na próxima vez em que for executado. Se não for firmware, como isso seria chamado?
HeineyBehinds
fonte
12
Esta é realmente uma boa pergunta. É uma boa pausa da série "Minha torradeira não brinda. Posso colocar um arduino nela?" questões.
Jason_L_Bens
17
Bem, essa pergunta seria boa, se não a principal falha: código é dados e dados podem ser código - no que diz respeito à arquitetura / modelo de Von Neumann. Assim, toda a questão é em vão - já que o código pode ser (e, geralmente é ) tratado como dados e vice-versa; também para OP: por que não verificar en.wikipedia.org/wiki/Firmware ? ele tem a resposta para esta pergunta muito, e muitas outras coisas a respeito firmware - Assim, enquanto ele é uma agradável pausa "Posso ligar uma lâmpada de 12V para 230V socket" perguntas, ainda é sub-par no meu livro .. .
vaxquis
2
Tenho certeza de que a resposta aqui é "sim".
Connor Wolf
7
O código da máquina é apenas uma entrada de dados para a fiação imutável da CPU.
user253751
2
Um livro é de palavras ou letras?
Nick T

Respostas:

27

Como muitas vezes com essas definições, concordamos na maioria dos casos, mas não existe um limite muito firme entre o que é firmware e o que não é. O firmware é

  • armazenado permanentemente (exceto para alguém com conhecimento que possa alterá-lo ...)
  • não pretende ser alterado (exceto ...)
  • opera no processador sem a ajuda de outro software (exceto ... você entendeu?)

Quanto aos dados interpretados por um intérprete (firmware): isso geralmente não é feito em um ambiente profissional, porque torna o produto mais caro: são necessárias mais memória, energia da CPU, etc. para atingir o mesmo objetivo final. Ele é no entanto, por vezes, utilizado na definição de amadores, muitas vezes com um interpretador Basic em flash, e uma (tokenized) Básico aplicação armazenada na EEPROM (ou in Flash também). Verifique, por exemplo, o PICAXE e os vários carimbos básicos.

O IMO nessa configuração, tanto o interpretador básico quanto o aplicativo básico, deve ser chamado de firmware.


Um uso interessante de um intérprete de firmware que interpreta o código armazenado (que também deve ser considerado IMO como firmware) é a inicialização do XBOX 360. Essa excelente palestra descreve em detalhes.


Abaixo, o MSalters questiona se o código FPGA / dados de configuração deve ser considerado firmware.

Nos aspectos mais importantes (são as informações que podem ser alteradas no final do processo de produção, mas não devem ser alteradas à vontade pelo usuário final), os bits FPGA se comportam como firmware. Isso questiona se é firmware de acordo com qualquer definição discutível. O ponto importante é que ele pode (e deve) ser escrito, manipulado e gerenciado como firmware. (Se anda e grasna como um pato, é um pato?)

Não se preocupe com as definições quando elas não forem úteis. O firmware do microcódigo? A representação importa? O contexto importa? Os bits de ROM para um firmware IWM?


O comentário de Vaxquis à pergunta do OP me levou a ler o artigo do wiki ao qual ele se vincula. Na IMO, a definição de firmware fornecida (memória persistente, código do programa e dados armazenados nele) é problemática. Na IMO, os mapas armazenados em um sistema de navegação veicular são dados, não firmware, não importa como sejam armazenados (de acordo com o wiki, eles devem ser firmware). E os aplicativos do seu telefone iPhone ou Android são aplicativos, não firmware (de acordo com o wiki, eles também devem ser firmware).

Wouter van Ooijen
fonte
Agora estou me perguntando se um programa FPGA conta como firmware. Intuitivamente, sim, mas não opera em um processador. E, no entanto, é um caso clássico de bits que estão no meio do caminho entre código e dados.
MSalters
O computador TI 99/4 (1979) incluiu um intérprete na ROM para um idioma chamado GPL, e um intérprete BASIC escrito em GPL. Uma característica essencial da GPL era que ele podia executar o código armazenado nos chips GROM (projetados para acesso principalmente seqüencial e poderia ser fisicamente menor e mais barato que a ROM de acesso aleatório), para que a TI 99/4 pudesse ser vista como uma massa computador pessoal de mercado cujo design é análogo ao do carimbo BASIC.
supercat
14

Firmware é o código do programa que é armazenado na memória não volátil, como a memória flash. O termo é mais frequentemente usado em conexão com sistemas embarcados. Pode estar no mesmo chip que o processador ou em um dispositivo separado.

Leon Heller
fonte
Obrigado @Leon Heller (+1) - existe um nome para o segundo exemplo acima, em que um está essencialmente "piscando" os dados de entrada para um binário fixo em um chip? Ou isso geralmente não é praticado? Obrigado novamente!
HeineyBehinds
São apenas dados. Pode ser armazenado em memória volátil ou não volátil.
21714 Leon Heller
O termo que eu usaria para o seu número 2 seria uma "tabela de consulta". Um exemplo em que posso pensar seria nos valores da função seno usados ​​para um oscilador controlado numericamente.
kjgregory
1
@KGregory Pode ser uma tabela de pesquisa, pode ser um programa interpretado, pode ser dados de imagem ...
glglgl
@glglgl concordou. Eu poderia argumentar que essas podem ser consideradas formas de consulta, mas acho que estamos fora de questão agora.
kjgregory
9

Eu acho que as duas opções estão meio corretas, apenas olhando para o microprocessador em diferentes níveis de abstração. O que você chama de binário imutável seria o próprio hardware, que é bastante limitado no que ele pode fazer. Busca o endereço da instrução 0x0000, decodifica a instrução, busca o endereço / registro fornecido, executa, incrementa o contador de instruções. Esse é o pipeline do microprocessador, e você não pode mudá-lo. Você controla o que o microcontrolador faz armazenando instruções na memória, que são lidas sequencialmente. Então, basicamente, sim, o firmware é apenas dados de entrada para um programa imutável, com um baixo nível de abstração. Normalmente, porém, é mais fácil imaginar o firmware como um programa especial que controla o microprocessador, porque conceitualmente é mais fácil assim.

Jason_L_Bens
fonte
Adoro esta resposta, +1, bem feito para enfatizar dados e código, são a mesma coisa no final.
Validade 16/07
Eles são os mesmos para a arquitetura Von Neumann, pelo menos. Depois de ter ônibus separados, você pode começar a argumentar que são coisas diferentes, embora tudo seja apenas um pouco no final.
21977 JasonJ_Bens
8

Na verdade, são ambos.

Um exemplo de firmware é o BIOS do PC, uma seção do BIOS é executável, mas outras partes do próprio BIOS são na verdade dados, especificamente em tabelas para exibição para enumerar as diferentes funções de uma ROM do BIOS, independentemente do tipo de tecnologia em que se baseia em. Muitas vezes, os dados são armazenados em outra RAM flash suportada por memória flash, bateria ou capacitor, CMOS SRAM ou outra tecnologia de chip de memória compatível.

Firmware, é um termo genérico usado para memória imutável / não volátil, está presente e acessível de acordo com o ciclo de energia, desde que não haja nada eletricamente errado com o circuito ou, no caso de um ciclo de programação bloqueado, para EEPROMs ou Flash ROMs.

O firmware, por definição, é o nível mais baixo de acesso, que inicializa, testa o hardware que você instalou no sistema ou nos componentes incorporados e fornece rotinas de baixo nível (às vezes vistas como chamadas de função do BIOS) que o sistema operacional precisa para poder usar os componentes no seu sistema. Antigamente, o BIOS ou o Basic Input Output System também incluía uma linguagem de programação chamada "BASIC", como o Commodore 64 e outros computadores pessoais da década de 1970, é claro que havia computadores mais antigos que tinham o BASIC embutido para uso por cientistas da computação profissionais também. Se você já ouviu falar de uma ROM de caractere ou símbolo, é uma forma de dados puros para a ROM executiva ou de programa fazer com que o sistema acesse a ROM de caractere e procure caracteres em uma sequência ou despeje o chip inteiro na RAM para trabalhar com ele. há.

Os programadores padrão de PROM, EPROM, EEPROM, Flash queimam firmware em um chip, como no sufixo .hex ou .bin, que são formatos semelhantes, depende do aplicativo que você está usando para enviar para o chip, o firmware.

Além disso, existem arquivos de blob de firmware, executáveis ​​na forma de bibliotecas e rotinas carregadas em tempo de execução, um bom exemplo disso são os drivers de hardware sem fio, eles contêm código suficiente para executar todo o hardware nessas placas através do seu sistema de computador. A única diferença é que o firmware do cartão e do USB não está armazenado neles, mas no disco rígido e carregado na memória. Funciona essencialmente como uma camada e filtro de serviço de tradução. São dados e código também.

Minha base é que, na verdade, eu escrevo BIOSs para outros computadores e sistemas incorporados (por exemplo, firmware sem fio, que é realmente carregado quando o sistema operacional é iniciado, começa a carregar os drivers de hardware de baixo nível, que também incluem firmware em tempo de execução ) Chama-se firmware porque nunca muda suas rotinas, a menos que você receba uma atualização do fabricante e, em seguida, a atualização substitua a antiga. Atua como o novo firmware nesse caso, até que novas coisas sejam atualizadas; caso contrário, esse é o firmware que você usa quando o sistema operacional é carregado.

Concordo que não deve ser chamado de firmware, porque não está tecnicamente no chip como uma solução permanente e precisa de uma ferramenta e um aplicativo especiais para atualizar o firmware (no caso dos BIOS antigos versus os das memórias flash).

Se tiver mais perguntas, ficarei feliz em responder a você.


fonte
6

O firmware é um código que foi criado em algum tipo de ambiente de desenvolvimento, assim como o código do software, mas depois se resume ao código da máquina para que a CPU possa entendê-lo. Se você descarregar a memória de um microcontrolador ou outro chip, notará que ele não se parece em nada com o código C ou com o que o programamos.

Portanto, você não programa um .EXE para ele, pois esse é um programa compilado para ser executado em algum tipo de ambiente de sistema operacional. Você estará programando geralmente um .hex, ou talvez um .elf, isso realmente depende do dispositivo que está programando, mas isso não importa, porque você não está preocupado com os tipos de arquivo, pois seu compilador compilará o codifique no código da máquina e coloque-o no flash no chip ou em qualquer esquema de armazenamento que ele possua.

O firmware é geralmente imutável, pois é necessário programar condicionais ambientais. Você não pode alterar o código do firmware e deixá-lo em repouso, é necessário fazer a alteração, compilá-lo e atualizar novamente o dispositivo.

  • Geralmente, o código do software é aquele que deve ser executado no topo de um sistema operacional.
  • Código de firmware é a informação que é executada no metal puro do chip. O firmware pode ser o programa aplicativo real ou um sistema operacional simples, no qual você pode carregar o software por meio de armazenamento removível ou RAM piscante no mundo incorporado. Esse nível pode descer até o código binário, porque ainda é o código.
  • Depois de começar a trabalhar diretamente com a tensão, você atingiu o nível de hardware.
Funkyguy
fonte
2
"mas então se resume ao código de máquina para que a CPU possa entendê-lo". Assim como o código do software, desde que seja escrito em C ou algo parecido.
glglgl
1
O que os processadores entendem é, sim, binário, mas eles têm algo chamado códigos de operação mnemômicos (códigos op, como é visto na indústria) para aqueles de nós que ainda programam em Assembly Assembly, que passa a estar um passo acima do Machine Language [Binary ]).
0

Firmware é um termo genérico que geralmente é usado para especificar algo que vive no meio do caminho entre o mundo do software e o mundo do hardware.

É difícil mudar o hardware. É fácil mudar o software. O firmware não é tão difícil de mudar quanto o hardware, mas é mais difícil de mudar do que o software.

Pode ser usado para discutir código executável, dados ou informações de configuração (como em FPGA / PLD / etc) que podem ser alterados.

Adam Davis
fonte
Em um sentido amplo da palavra e definição, isso é verdade. Embora, esses chips não sejam realmente código nem dados. O compilador, quando concluído, cria projetos lógicos, como soluções completas ou lógica de cola, para reunir diferentes partes de um sistema. Em vez de usar portas e registros lógicos físicos das séries 74 e 54 para fazer uma solução. Estou realmente feliz que você tenha trazido isso à tona, Adam.
0

Para explicar mais sobre o que é o firmware por dentro.

O firmware é um código que é executado em um hardware muito específico, o que significa que os códigos operacionais são específicos para o hardware para o qual foram escritos, pode ser uma família de chips ou interfaces ou para apenas um item.

Essencialmente, o que o firmware faz é isso;

  1. Possui instruções para um determinado processador executar e executar, isso é chamado de "inicialização". Quais os computadores mais inicializáveis ​​têm isso no BIOS.

  2. Inicialize o referido hardware através das instruções no firmware.

  3. Carregar / subir a mesa de salto.

  4. Torne acessível o acesso aos registros em um determinado dispositivo.

  5. Entregue o controle à rotina de saída assim que o BIOS for usado após um início frio (estado desligado) ou quente (reinicialização normal ou pino de redefinição).

  6. A maioria dos BIOSs (firmware) é projetada para um chipset específico e elimina todas as funções desses itens e detalha todos os dados que possam ser anexados a uma determinada linha de ônibus em um computador ou dispositivo incorporado.

  7. Os discos rígidos são um bom exemplo de uma solução de armazenamento que, por si só, é um dispositivo incorporado, que também possui um BIOS e uma forma de firmware em um chip.

Essencialmente, todo o firmware é um conjunto de instruções que outro processador faz para obter a funcionalidade do referido dispositivo. É um software carregado em um dispositivo físico, ao perder energia, ele estará presente quando o dispositivo recuperar a energia.

Tecnicamente, você pode usar qualquer linguagem de programação ou de script para criar arquivos binários. Você só precisa saber como o processador que você irá direcionar funciona, os códigos operacionais reais, o registro interno (sem falar no que eles servem), para aprender sistemas de números binários e hexadecimais e como criar um assembler que pode salvar seu código na linguagem assembly. Após a conclusão, você pode executar outro programa para convertê-lo em binário e salvá-lo como um arquivo .bin ou .hex.

Se você quiser saber como o Ada, C, C ++, D e outras linguagens de programação convertem seus "tokens", que são o código nativo que é dividido em pseudo-códigos op em linguagem de máquina. Existem vários livros que eu recomendo que você leia, alguns são bastante elementares e estão centrados em processadores muito específicos, mas é bom aprender sobre isso. Por enquanto, darei a você um livro, porque não quero afogar você ou qualquer outra pessoa que estiver lendo isso em informações.

  1. Crafting A Compiler with 'C' de Charles N. Fischer e Richard J. LeBlanc, Jr.
  2. Visite este site, ele é baseado no chipset x86 encontrado no IBM PC; http://www.laynetworks.com/assembly%20tutorials.htm

Essa é a introdução à programação em linguagem assembly em PCs desde o início. Ele fala sobre como lidar com interrupções (interrupções de hardware e software) e muitos outros tópicos, explica mais detalhadamente o que um BIOS realmente faz e como trabalhar com ele.

Diferente da linguagem assembly e da linguagem de máquina, você pode se dar muito bem em Ada, C, C ++, D, se não souber suas especificações de hardware. Em linguagem assembly e de máquina, se você não sabe o que está fazendo, algo ruim acontecerá ou o código não funcionará. Eu prefiro o último caso, não trabalhando contra algo ruim.

Nota: Sobre a resposta acima, sobre RAM flash, não existe, existem ROMs flash, mas não RAMs flash. As ROMs flash possuem o firmware, as RAMs suportadas por bateria ou capacitor ou outra ROM flash que contém parâmetros para as opções do BIOS que você definiu.

Existe um código no firmware sobre como armazenar ou limpar a memória de dados (versus a própria memória / firmware do programa), se for uma ROM flash ou um chip de RAM. Nos PCs, se a senha do BIOS for distorcida ou você não se lembrar dela (ou alguém estiver mexendo com você), você pode abrir o gabinete e encontrar os dois pinos chamados "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", colocar um curto-circuito nesses dois pinos também limpa a memória; tudo o que você precisa fazer depois é pressionar o botão de reset, quando os dois pinos ainda estão em curto. Isso limpa a senha e permite acesso total ao BIOS do seu PC (supondo que você tenha um computador mais novo a partir dos anos 90).

Nos novos PCs, você tem memória flash para o firmware e SRAM com bateria (não precisa ser constantemente atualizado como chips DRAM, é baseado em uma tecnologia mais antiga).


fonte
0

Em termos de sistemas incorporados, o Flashing Firmware significa que você apagou a ROM de um microcontrolador usando um dispositivo piscante e a reescreveu com um novo código. Este firmware a ser piscado está no formato HEX.

Em termos de terminologia relacionada ao sistema operacional, ele também aparece na ROM, mas desta vez é de responsabilidade de um sistema operacional atualizá-lo quando uma atualização ocorrer.

Fahad Naeem
fonte
0

Acredito que o uso da perspectiva "histórica" possa fornecer uma compreensão mais básica do que é firmware .
Começa pela primeira vez com "hardware". Para fornecer / criar uma determinada função, pode-se usar tubos, relés, transistores e CIs. Você usaria vários desses componentes e criaria um dispositivo que executasse a função necessária. Isso foi considerado "hardware" porque, se você quisesse (ou precisasse) alterar a função, seria necessário dessoldar os fios, soquetes etc., e isso era "difícil" . Assim, esse método de implementação de uma função ficou conhecido como o uso de hardware. O uso de CPU, RAM e código tornou-se outro método de criação de uma função e ficou conhecido como "software"para fazer alterações no projeto. "No entanto, havia também a necessidade (principalmente dos fabricantes) de concluir o máximo de um projeto o mais cedo possível, mas ser capaz de fazer alterações de" último minuto "no projeto o mais fácil e econômico possível O uso de ROMs permitiu essa flexibilidade até o ponto da "primeira remessa". As EEPROMS permitem alterações mesmo após a "primeira remessa" (no campo). O código necessário / usado para as ROMs e PROMs recebeu o nome de "firmware" . "

Guill
fonte