Как происходит выполнение программы в прошивке?


9

Я слышал от людей, работающих в домене прошивки, что нет операционной системы, управляющей прошивкой (например, прошивка на USB-накопителе). В цикле while работает только один поток, ожидающий внешней команды, и это отправная точка для возникновения прерывания, за которым следует ISR и управление, проходящее до аппаратного обеспечения. Но по сути, что это за аппаратная часть, которая выполняет код прошивки? Есть ли процессор или код на основе ASIC, который срабатывает, пока устройство включено. Я не понимаю смещения парадигмы с обычной системы на базе CPU на прошивку.


Если это возможно, может кто-нибудь взять пример прошивки с указанием марки процессора и любых других аппаратных и программных деталей. Примерами могут быть прошивки на SD-карты, USB, контроллеры жестких дисков и т. Д.
Abhijit K Rao

Ответы:


13

Нет смены парадигмы; в обоих случаях процессор выполняет программное обеспечение / прошивку.

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

Прошивка обычно хранится в энергонезависимой памяти (например, FLASH), более или менее подключенной непосредственно к ЦП. Его сложнее модифицировать (следовательно, «фирма»), и он может или не может быть перенесен в другую память для выполнения.

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


9

Даже «обычный» процессор с ОС должен выполнять прошивку ... обычно это называется BIOS на обычном ПК. Микропрограмма для любого ЦП - это просто программное обеспечение, которое всегда доступно при включении питания, независимо от того, подключен ЦП к каким-либо периферийным устройствам (дискам, USB и т. Д.) Или нет. Если у вас полнофункциональная ОС, то микропрограмма просто определяет, какое устройство (диск, USB-накопитель и т. Д.) Содержит код для ОС, копирует код в ОЗУ и запускает его. Для небольших встроенных устройств нет необходимости в полной ОС, потому что вы не собираетесь загружать разные приложения или подключать различные устройства, поэтому небольшие процессоры просто используют очень простую ОС или, возможно, «планировщик задач». Различные задачи могут состоять в считывании показаний датчиков, ожидании нажатия кнопок и обновлении дисплея. Для очень простых приложений у центрального процессора достаточно времени для выполнения всех задач, поэтому он выполняет каждую из них последовательно, что также называется подходом «циклического перебора». Более сложные планировщики считают приоритетность задач.

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


6

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

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

Приложение может работать под управлением ОС или без ОС. Последнюю ситуацию часто называют «голым металлом»: приложение работает без каких-либо ограничений между ним и аппаратным «металлом». Функции, которые находятся в ситуации с ОС и выполняемые ОС, например, обработка файловой системы и обеспечение многопоточности, могут все еще присутствовать в «голой железной» системе, но в форме библиотек, связанных с приложением. ,

Программное обеспечение может иметь много разных архитектур. Очень простой формой является цикл «получить ввод, выполнить обработку, записать вывод». Более сложные формы могут включать опрос, прерывания или многопоточность. Как приложения, зависящие от ОС, так и приложения с открытым железом могут использовать все эти архитектуры.

Эти три проблемы являются независимыми: например, микропрограммное обеспечение может работать без использования ресурсов и использовать многопоточную архитектуру. Или микропрограмма представляет собой операционную систему, которая загружает приложение с дискеты (извините, флэш-карты ...), которая использует простую архитектуру цикла get-do-write.


5

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

Прошивка - это программное обеспечение, которое хранится в энергонезависимой (или, возможно, даже для чтения) памяти. Поскольку он находится в такой памяти, встроенное ПО доступно при включении аппарата. Машина может почти сразу начать выполнять прошивку, когда она включена, или небольшая загрузочная программа (сама прошивка) может извлечь большую прошивку из какого-либо электронного хранилища, такого как флэш-память, и поместить ее в ОЗУ, а затем выполнить ее. Современное использование флэш-памяти в наши дни является причиной того, что иногда вы можете услышать фразу «прошивка новой прошивки», относящаяся к процедуре обновления. Прошивка не должна быть легко обновляемой, как эта. Он может быть установлен на микросхеме интегральной микросхемы, поэтому обновление устройства до новой микропрограммы может включать в себя извлечение интегральной схемы («микросхема СППЗУ») из разъема и подключение новой. ПК BIOS ' Раньше обновлялись таким образом и мириады других устройств. Это действительно откуда слово. Некоторым людям было неудобно называть программу «программным обеспечением», если им приходилось менять чип или печатную плату, чтобы заменить ее, что больше похоже на обновление аппаратного обеспечения. Поэтому была придумана «прошивка»: что-то «сложнее» изменить, чем программное обеспечение.

Прошивка может быть «полноценной» операционной системой. Например, Tomato - это прошивка на основе Linux для беспроводных маршрутизаторов:

http://www.polarcloud.com/tomato

Мы можем войти в Tomato через ssh и получить приглашение Linux. Так что это продвинутая операционная система, и это прошивка. Но если в маршрутизаторе установлен жесткий диск и если при запуске необходимо загрузить ту же операционную систему с этого диска, его уже нельзя будет называть встроенным программным обеспечением. Прошивка должна быть в электронном хранилище, которое доступно процессору сразу после включения питания, например, флэш-память или микросхемы EPROM.

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

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

Поскольку вам любопытно, вам могут понравиться некоторые учебники по компьютерным архитектурам, например, Уильям Сталлингс или Хеннеси и Паттерсон.


4

На самом фундаментальном уровне ЦП - это просто конечный автомат, выполняющий последовательность инструкций, которые изменяют свое собственное внутреннее состояние и / или выдают некоторый результат. Абстрагируйте и доработайте эту концепцию до очень высокого уровня, и вы получите новейшие предложения для настольных и мобильных процессоров Intel. Но основной принцип довольно прост - вы можете построить очень простой процессор с примерно дюжиной интегральных микросхем TTL, а микропроцессоры с начала до середины 1970-х годов, разработанные для использования в настольных калькуляторах и контроллерах светофора, не были намного сложнее, чем эта , Очевидно, закон Мура поднял это на совершенно другой уровень, и современные высокопроизводительные процессоры мало похожи на своих предков 35 лет назад.

Несмотря на это, все еще существует огромный рынок для процессоров (обычно называемых микроконтроллерами), которые значительно менее сложны, чем самые современные; это, например, типы процессоров, которые вы можете найти на вашем USB-накопителе. Чтобы ответить на ваш вопрос - возможно, что некоторые функции устройств, о которых вы упомянули, могут обрабатываться ASIC, но если ваши коллеги говорят о потоках и прерываниях, это обычно указывает на то, что некоторое время задействован ЦП, возможно, на микроконтроллере. , Это действительно полноценные компьютеры в том смысле, что они имеют ALU, регистры, счетчик программ, стек и т. Д., Но они очень маломощные и очень недорогие и могут иметь всего несколько десятков инструкций, а не сотни архитектуры x86.

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


1

За исключением некоторых разрешений, процессор не будет знать, выполняет ли он код из ОС или любой другой программы. Для процессора это просто выполнение инструкций, извлеченных из памяти.

Давайте не будем забывать, что такое операционная система: программа, которая всегда находится в памяти и отвечает за безопасную обработку и планирование нескольких задач. Терминология, которую мы используем для описания независимой задачи, является «процессом». Операционные системы позволяют процессам совместно использовать ресурсы (аппаратное обеспечение, память и т. Д.) Безопасно, а также планировать и определять приоритеты их выполнения, а также предоставляют такие функции, как межпроцессное взаимодействие. Все это вытекает из необходимости поддержки нескольких одновременных задач. За исключением некоторых уровней разрешений, для процессора это просто выполнение инструкций ОС или без ОС - он не знает разницы.

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

Больше не нужно заботиться о том, чтобы один процесс занимал и занимал пространство памяти другого процесса или один процесс занимал все процессорное время. Это потому, что мы пишем одну программу, которая имеет доступ ко всем ресурсам в любое время, так как это единственная программа, работающая в системе, и поэтому нам не нужна другая программа, такая как ОС, для управления ею. Опять же, для процессора, он просто выполняет инструкции, извлеченные из памяти, он не может отличить ни ОС, ни ОС.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.