Код прошивки или данные?

29

Когда кто-то говорит, что он "прошил" прошивку на устройство, мне интересно, что это на самом деле означает.

  1. Прошивка - это просто двоичный файл, который хранится в памяти и который может интерпретироваться процессором устройства (как любой другой EXE-файл на компьютере)? Или встроенное ПО - это просто данные, которые служат входом для неизменяемой программы, уже жестко запрограммированной / подключенной к устройству?
  2. Если последний пример не является прошивкой, как бы вы это назвали? Например, предположим, что на устройстве есть какой-то двоичный код ( someapp.exe), и вы не можете удалить или изменить этот двоичный файл. Бинарный файл при запуске получает данные от микросхемы памяти. Вы можете «прошить» данные на этот чип и, таким образом, повлиять на ввод / конфигурирование someapp.exe, которые вступят в силу при следующем запуске. Если бы не прошивка, как бы это называется?
HeineyBehinds
источник
12
Это действительно хороший вопрос. Это хороший перерыв в убийстве "Мой тостер не пьет. Могу я положить в него Arduino?" вопросов.
Jason_L_Bens
17
Что ж, этот вопрос был бы хорош, если бы не главный недостаток: код - это данные, а данные - это код, что касается архитектуры / модели фон Неймана. Таким образом, весь вопрос напрасно - так как код может быть (и, как правило , является ) рассматриваются как данные и наоборот; также, чтобы OP: почему бы не проверить en.wikipedia.org/wiki/Firmware ? он имеет ответ на этот самый вопрос, и ко многим другим вещам , касающейся прошивки - таким образом, в то время как это хороший перерыв «Могу ли я подключить 1 лампочку в 230 гнездовых» вопросы, она по - прежнему подпаритет в моей книге .. .
vaxquis
2
Я уверен, что ответ здесь "да".
Коннор Вольф
7
Машинный код - это просто ввод данных в неизменную проводку процессора.
user253751 15.07.14
2
Это книга слова или буквы?
Ник Т

Ответы:

27

Как часто с такими определениями, мы согласны в большинстве случаев, но нет действительно твердой границы между тем, что является прошивкой, а что нет. Прошивка есть

  • хранится постоянно (за исключением некоторого знающего человека, который может изменить его ...)
  • не предназначен для изменения (кроме ...)
  • работает на процессоре без помощи другого программного обеспечения (кроме ... ты понял?)

Что касается данных, которые интерпретируются интерпретатором (встроенного программного обеспечения): это не часто делается в профессиональных условиях, потому что это делает продукт более дорогим: для достижения той же конечной цели требуется больше памяти, ресурсов процессора и т. Д. Это будет , однако иногда используется в любительском обстановке, часто с основным переводчиком в вспышке, и (Разбивается на лексемы) Основное применение в ЭСППЗУ (или в Flash , тоже). Проверьте, например, PICAXE и различные основные марки.

При такой настройке IMO и Базовый интерпретатор, и Базовое приложение должны называться прошивкой.


Интересным использованием интерпретатора встроенного программного обеспечения, который интерпретирует хранимый код (который также следует считать IMO встроенным ПО), является запуск XBOX 360. Этот отличный разговор описывает это в некоторых деталях.


Ниже MSalters задается вопросом, следует ли считать код FPGA / данные конфигурации микропрограммой.

В наиболее важных аспектах (это информация, которая может изменяться в конце производственного процесса, но не предназначена для изменения конечным пользователем по желанию) Биты FPGA ведут себя как встроенное ПО. Это делает вопрос, является ли это прошивка согласно любому определению спорным. Важным моментом является то, что он может (и должен) записываться, обрабатываться и управляться как прошивка. (Если он ходит и крякает как утка, это утка?)

Не беспокойтесь о определениях, когда они бесполезны. Это микрокод прошивки? Имеет ли значение представительство? Имеет ли значение контекст? Биты ROM для прошивки IWM?


Комментарий Vaxquis к вопросу OP побудил меня прочитать вики-статью, на которую он ссылается. ИМО определение данного встроенного программного обеспечения (постоянная память и программный код и данные, хранящиеся в нем) является проблематичным. ИМО карты, хранящиеся в автомобильной навигационной системе, являются данными, а не прошивками, независимо от того, как они хранятся (согласно вики они должны быть прошивками). И приложения в вашем iPhone или Android-телефоне - это приложения, а не прошивки (согласно вики они тоже должны быть прошивками).

Воутер ван Оойен
источник
Теперь мне интересно, считается ли программа FPGA прошивкой. Интуитивно, да, но он не работает на процессоре. И все же это классический случай битов, которые находятся на полпути между кодом и данными.
MSalters
Компьютер TI 99/4 (1979) включал в ПЗУ переводчик для языка, называемого GPL, и BASIC-переводчик, написанный на GPL. Важной особенностью GPL было то, что он мог запускать код, хранящийся в микросхемах GROM (которые были разработаны для первично-последовательного доступа и могли быть физически меньше и дешевле, чем ПЗУ с произвольным доступом), поэтому TI 99/4 можно рассматривать как массовую - персональный компьютер, чей дизайн аналогичен марке BASIC.
суперкат
14

Прошивка - это программный код, который хранится в энергонезависимой памяти, такой как флэш-память. Этот термин чаще всего используется в связи со встроенными системами. Он может быть на том же чипе, что и процессор, или на отдельном устройстве.

Леон Хеллер
источник
Спасибо @Leon Heller (+1) - есть ли название для 2-го примера выше, где по сути "мигает" входные данные в фиксированный двоичный файл на чипе? Или это вообще не практикуется? Еще раз спасибо!
HeineyBehinds
Это просто данные. Это может быть сохранено в энергозависимой или энергонезависимой памяти.
Леон Хеллер
Термин, который я бы использовал для вашего # 2, будет «справочной таблицей». В качестве примера я могу привести значения синусоидальной функции, используемые для численно управляемого генератора.
kjgregory
1
@KGregory Это может быть таблица поиска, это может быть интерпретируемая программа, это могут быть данные изображения ...
glglgl
@glglgl согласился. Я могу утверждать, что это можно считать формами справочной таблицы, но я думаю, что мы сейчас не в этом.
kjgregory
9

Я думаю, что оба варианта являются правильными, просто глядя на микропроцессор на разных уровнях абстракции. То, что вы называете своим неизменным двоичным файлом, - это само оборудование, которое довольно ограничено в своих возможностях. Извлечь адрес инструкции 0x0000, инструкцию декодирования, извлечь предоставленный адрес / регистр, выполнить, счетчик инструкции приращения. Это микропроцессорный конвейер, и вы не можете его изменить. Вы управляете тем, что делает микроконтроллер, сохраняя инструкции в памяти, которые затем последовательно считываются. В общем, да, прошивка - это просто входные данные для неизменяемой программы на низком уровне абстракции. Однако обычно проще представить прошивку как специальную программу, которая управляет микропроцессором, потому что концептуально это проще.

Jason_L_Bens
источник
Любите этот ответ, +1, хорошо сделанный для того, чтобы подчеркнуть данные и код - то же самое в конце.
Vality
По крайней мере, они одинаковы для архитектуры фон Неймана. Когда у вас есть отдельные автобусы, вы можете начать утверждать, что это разные вещи, хотя в конце концов это всего лишь кусочки.
Jason_L_Bens
8

Это на самом деле оба.

Одним из примеров микропрограммного обеспечения является BIOS для ПК, один из разделов BIOS является исполняемым, но другие части самого BIOS фактически являются данными, в частности, в таблицах для отображения для перечисления различных функций ПЗУ BIOS, независимо от типа технологии, на которой он основан на. Часто данные хранятся либо в другой флэш-памяти, либо в ОЗУ с резервным питанием от батареи или конденсатора, либо в CMOS SRAM, либо в другой совместимой технологии микросхем памяти.

Прошивка, это общий термин, используемый для обозначения неизменяемой / энергонезависимой памяти, она существует и доступна в соответствии с циклом питания до тех пор, пока в схеме нет ничего плохого с электрической цепью или в случае застрявшего цикла программирования, для EEPROM или Flash ромы.

Прошивка по определению - это самый низкий уровень доступа, который инициализирует, тестирует оборудование, установленное в вашей системе или встроенных компонентах, и предоставляет процедуры низкого уровня (иногда называемые вызовами функций BIOS), которые ваша операционная система должна иметь возможность использовать компоненты в вашей системе. В прежние времена BIOS или Basic Input Output System также включали в себя язык программирования под названием «BASIC», такой как Commodore 64 и другие персональные компьютеры 1970-х годов, конечно, были более старые компьютеры, в которых в них был встроен BASIC для использования. профессиональными компьютерными учеными. Если вы когда-либо слышали о символьном или символьном ПЗУ, это форма чистых данных для ПЗУ руководителя или программы, чтобы заставить систему перейти на этот символьный ПЗУ и искать символы в последовательности или выгрузить весь чип в ОЗУ для работы с ним. там.

Программисты по умолчанию PROM, EPROM, EEPROM, Flash записывают микропрограмму на микросхему, например, с суффиксом .hex или .bin, которые имеют одинаковый формат, и зависит от приложения, которое вы используете для отправки на микросхему, от микропрограммы.

Кроме того, существуют файлы BLOB-файлов прошивки, это исполняемые файлы в виде библиотек и подпрограмм, которые загружаются во время выполнения, хорошим примером этого являются драйверы беспроводного оборудования, они содержат достаточно кода для запуска всего оборудования этих карт через ваш компьютерная система. Единственная разница заключается в том, что карта и прошивка на основе USB хранятся не на них, а на жестком диске и загружаются в память. По сути, он работает как слой и фильтр службы перевода. Это и данные, и код тоже.

Моя основа заключается в том, что я на самом деле пишу BIOS для других компьютеров и встроенных систем (например, беспроводное встроенное ПО, которое фактически загружается при запуске операционной системы, а затем начинает загружать аппаратные драйверы низкого уровня, которые также включают встроенное ПО во время выполнения). ). Он называется прошивкой, потому что он никогда не меняет свои процедуры, если вы не получите обновление от производителя, а затем обновление перезаписывает старое. Действует как новая прошивка в этом случае до тех пор, пока не будет найдено, что обновляется новый материал, если нет, то это именно та прошивка, которую вы используете при загрузке операционной системы.

Я согласен, это не следует называть прошивкой, потому что технически он не встроен в чип как постоянное решение и нуждается в специальном инструменте и приложении для обновления прошивки (в случае старых BIOS или флэш-памяти).

Есть еще вопросы, я был бы рад ответить на них для вас.


источник
6

Прошивка - это код, созданный в некоторой среде разработки, точно так же, как программный код, но затем он сводится к машинному коду, чтобы процессор мог его понять. Если вы сбросите память микроконтроллера или какого-либо другого чипа, вы заметите, что он не похож на код C или то, для чего мы его программируем.

Таким образом, вы не программируете .EXE для него, так как это скомпилированная программа для запуска в какой-то среде ОС. Вы будете программировать, как правило, на .hex или, может быть, .elf, это действительно зависит от устройства, которое вы программируете, но это не имеет значения, потому что вас не интересуют типы файлов, поскольку ваш компилятор вместо этого скомпилирует запишите код в машинный код и поместите его во встроенную микросхему флэш-памяти или в любую схему хранения.

Прошивка, как правило, является неизменяемой в том смысле, что в нее должны быть запрограммированы условия среды. Вы не можете изменить код прошивки и оставить его, вы должны внести изменение, скомпилировать его и заново прошить устройство.

  • Обычно программный код - это код, который должен выполняться поверх операционной системы.
  • Код прошивки - это информация, которая запускается на голом металле чипа. Микропрограмма может быть как самой прикладной программой, так и простой операционной системой, в которую затем можно загружать программное обеспечение с помощью съемных носителей или перепрограммирования ОЗУ во встроенном мире. Этот уровень может опуститься до двоичного кода, потому что это все еще код.
  • Как только вы начинаете работать напрямую с напряжением, вы достигли аппаратного уровня.
Funkyguy
источник
2
«но потом все сводится к машинному коду, чтобы процессор мог его понять». Так же, как и программный код, если он написан на C или что-то подобное.
glglgl
1
Процессоры понимают, да, двоичные файлы, но у них есть нечто, называемое мнемомическими кодами операций (операционными кодами, как это принято в промышленности) для тех из нас, кто все еще программирует на ассемблере, что на один шаг выше машинного языка [двоичный ]).
0

Прошивка - это общий термин, который обычно используется для обозначения того, что находится на полпути между миром программного обеспечения и миром аппаратного обеспечения.

Оборудование сложно изменить. Программное обеспечение легко изменить. Менять прошивку не так сложно, как аппаратную, но сложнее, чем программную.

Его можно использовать для обсуждения исполняемого кода, данных или информации о конфигурации (как в FPGA / PLD / etc), которую можно изменить.

Адам Дэвис
источник
В широком смысле слова и определения это правда. Хотя эти чипы на самом деле не являются ни кодом, ни данными. После завершения компилятор создает логические проекты, либо как законченные решения, либо как склеивающая логика для объединения различных частей системы. Вместо использования физических логических вентилей и регистров серии 74 и 54 для решения проблемы. Я на самом деле рад, что ты поднял этот вопрос, Адам.
0

Чтобы объяснить больше, что такое прошивка из внутреннего смысла.

Прошивка - это код, который выполняется на очень специфическом оборудовании, то есть его операционные коды специфичны для оборудования, для которого оно написано, это может быть семейство микросхем или интерфейсов или предназначенный только для одного элемента.

По сути, что делает прошивка это;

  1. Имеет встроенные инструкции для данного процессора для выполнения и выполнения, это называется «начальной загрузкой». Какие самые загружаемые компьютеры имеют это в своем BIOS.

  2. Инициализируйте указанное оборудование через инструкцию в прошивке.

  3. Загрузите в / вверх таблицу прыжков.

  4. Сделать доступ к регистрам на данном устройстве доступным.

  5. Передавайте управление на выход из процедуры, как только BIOS будет использован после холодного (состояние выключено) или горячего старта (был использован обычный сброс или вывод сброса).

  6. Большинство BIOS (микропрограммное обеспечение) предназначены для конкретного набора микросхем, исключают все их функции и уточняют любые данные, которые могут быть подключены к определенной шине в компьютере или встроенном устройстве.

  7. Жесткие диски являются хорошим примером решения для хранения данных, которое само по себе является встроенным устройством, в котором также есть BIOS и микропрограммное обеспечение на чипе.

По сути, все прошивки представляют собой набор инструкций, которые другой процессор выполняет для получения функциональных возможностей указанного устройства. Это программное обеспечение, которое загружается в физическое устройство, после потери питания оно будет там, когда устройство восстанавливает питание.

Технически, вы можете использовать любой язык программирования или сценариев для создания бинарных файлов. Вам просто нужно знать, как работает процессор, на который вы собираетесь ориентироваться, действительные коды операций, внутренний регистр (не говоря уже о том, для чего они предназначены), чтобы изучить двоичные и шестнадцатеричные системы счисления и как создать ассемблер, который может сохранять Ваш код на ассемблере. После этого вы можете поручить другой программе преобразовать ее в двоичный файл, а затем сохранить в виде файла .bin или .hex.

Если вы хотите узнать, как Ada, C, C ++, D и другие языки программирования преобразуют свои «токены», которые являются их собственным кодом, который преобразуется в псевдо-коды для машинного языка. Есть несколько книг, которые я рекомендую вам прочитать, некоторые из них довольно элементарны и сосредоточены вокруг очень специфических процессоров, но это полезно для изучения. Я покажу вам одну книгу, потому что я не хочу утопить вас или кого-либо еще, кто читает это в информации.

  1. Создание компилятора с 'C' Чарльзом Н. Фишером и Ричардом Дж. ЛеБланком-младшим
  2. Посетите этот сайт, он основан на наборе микросхем x86, найденных в IBM PC; http://www.laynetworks.com/assembly%20tutorials.htm

Это введение в программирование на ассемблере на ПК в самом начале. В нем рассказывается об обработке прерываний (аппаратных и программных прерываний) и о многих других темах, более подробно объясняется, что на самом деле делает BIOS и как с ним работать.

В отличие от ассемблера и машинного языка, в Ada, C, C ++, D вы можете получить гораздо больше, если не знаете особенностей своего оборудования. В ассемблере и машинном языке, если вы не знаете, что делаете, либо произойдет что-то плохое, либо код не будет работать. Я предпочитаю последний случай, а не работать против чего-то плохого.

Примечание: о ответе выше, о флэш-ОЗУ, такого нет, есть флэш-ПЗУ, но нет флэш-ОЗУ. Флэш-ПЗУ содержит встроенное программное обеспечение, ОЗУ с батарейным или конденсаторным питанием или другое флэш-ПЗУ, содержащее параметры для установленных вами параметров BIOS.

В прошивке есть код о том, как хранить или очищать память данных (в сравнении с памятью программы / самой прошивкой), если это флэш-ПЗУ или чип ОЗУ. На ПК, если ваш пароль BIOS искажен или вы его не помните (или кто-то связывается с вами), вы можете открыть корпус и найти два контакта, которые называются «CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST», Сочетание этих двух контактов вместе также очищает память, все, что вам нужно будет сделать после этого, это нажать кнопку сброса, когда два контакта все еще закорочены. Это удаляет пароль и дает вам полный доступ к BIOS вашего компьютера (при условии, что у вас более новый компьютер с 1990-х годов).

На новых ПК у вас есть флэш-память для прошивки и SRAM с резервным питанием от батареи (не нужно постоянно обновляться, как микросхемы DRAM, он основан на более старой технологии).


источник
0

Что касается встроенных систем, прошивка прошивки означает, что вы удалили ПЗУ микроконтроллера с помощью перепрошивки и переписали его с новым кодом. Прошивка для прошивки находится в шестнадцатеричной форме.

С точки зрения терминологии, связанной с ОС, она также мигает в ПЗУ, но на этот раз ОС несет ответственность за ее прошивку при появлении обновления.

Фахад Наим
источник
0

Я считаю, что использование «исторической» перспективы может дать более общее представление о том, что такое прошивка .
Сначала начинается с «аппаратных средств». Чтобы обеспечить / создать данную функцию, можно использовать трубки, реле, транзисторы и ИС. Вы бы использовали ряд этих компонентов и создали бы устройство, которое выполняло бы требуемую функцию. Это считалось «аппаратным обеспечением», потому что, если вы хотите (или нуждаетесь) изменить функцию, вам потребуется распаять провода, розетки и т. Д., И это было «сложно» сделать. Таким образом, этот метод реализации функции стал известен как использование аппаратного обеспечения. Использование процессора, оперативной памяти и кода стало еще одним методом создания функции и стало называться «программным обеспечением».вносить изменения в конструкцию ». Однако была также необходимость (в основном от производителей) завершить проектирование как можно раньше, но при этом иметь возможность вносить изменения в конструкцию« в последнюю минуту »как можно проще и с меньшими затратами. Использование ПЗУ обеспечивало такую ​​гибкость вплоть до момента «первого отгрузки». ЭСППЗУ позволяют вносить изменения даже после «первого отгрузки» (в полевых условиях). Код, необходимый / используемый для ПЗУ и ППЗУ, был назван «микропрограммой». «.

Guill
источник