Прошивка микросхем для начинающих
Самую свежую с лекарством. Программирование AVR на Бэйсике — это просто! Соблюдайте технику безопасности! Используйте средства защиты. Думайте и только потом делайте. Всегда защищайте глаза!
Поиск данных по Вашему запросу:
Прошивка микросхем для начинающих
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам.
Содержание:
- программатор PONY-PROG
- 3D печать для новичков. От А до Я. Платы и прошивка.
- Программатор Minipro TL866II + 24 адаптера на все случаи жизни
- Микроконтроллеры AVR для начинающих — 2
- Программирование микроконтроллеров AVR
- Как прошить микроконтроллер AVR?
ПЕРЕПРОШИВКА FLASH И EEPROM
ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Программатор Ch441A и прищепка для пере прошивки AliExpress !!! Тест программатора !!!
youtube.com/embed/NFehmvdKPhA» frameborder=»0″ allowfullscreen=»»/>программатор PONY-PROG
Кстати забыл отметить Для того что бы прошить микроконтроллер, необходимо специальное устройство называемое программатором. Их достаточно много.
Для комфортной работы лучше использовать внутрисхемный программатор, поддерживающий в том числе и отладку. В идеале это ICD3, он нравится многим программистам. Правда это достаточно дорогое устройство, тем более для начинающих. Он может работать как внутрисхемный программатор то есть программировать микросхемы. При появлении новых микроконтроллеров с сайта www. Кроме этого программатор PICkit2 под управлением среды разработки MPLAB IDE может выполнять функции внутрисхемного отладчика, то есть позволяет выполнять запуск программы, пошаговое выполнение команд, устанавливать точки останова микроконтроллера, а так же просматривать и изменять состояние регистров специального назначения и ОЗУ отлаживаемого PIC микроконтроллера.
Так что в дальнейшем будем ориентироваться на него. Но вернемся к нашей прошивке На этом можно считать процесс программирования законченным. Мы «прошили» нашу программу в микроконтроллер и теперь можно попробовать его в работе. Для этого можно собрать на макетной плате наше устройство согласно ниже приведенной схеме. Очень удобно для целей отладки использовать специальные отладочные платы для PicKit2.
Есть еще вариант, делать это прямо в готовом устройстве режим внутрисхемного программирования и отладки , при этом предпринять необходимые меры защиты. Ну и на конец можно собрать отладочную плату, с поправкой на «практиков», то есть тех людей , которые достаточно долго занимаются программированием и делают отладочные платы с учетом разносторонних задач.
Соответственно необходимо делать поправку на МК 18 серии. Если у Вас нет возможности проверить в «железе», то для этих целей есть специальное программы, которые рассмотрим в следующей главе.
Все права принадлежат ChipMK. При копировании материала ссылка обязательна. Программаторы и инструменты Категория: 1. Самоучитель PIC18 асм 1 часть.
3D печать для новичков. От А до Я. Платы и прошивка.
Этот программатор также очень важная вещь в арсенале электронщика. Пригодиться и ремонтникам для перепрошивки микросхем BIOS биос. Скорость работы этого программатора гораздо выше чем у любых подобных программаторов на базе COM-порта. Это преимущество особенно актуально при программировании микросхем с объемами памяти более 1 Мб.
Как я микросхему программировал Не судите строго) Всего лишь хотел .. откуда прошивку качал? мне надо на S22AN =).
Программатор Minipro TL866II + 24 адаптера на все случаи жизни
Итак, после первой части статьи микроконтроллер у нас есть, теперь нам нужен программатор. Программатор советую собирать так называемый STK, состоит он всего лишь из одной микросхемы, данный программатор будет лучше чем PonyProg. Если случайно запрограммировать такой опасный фьюз, то вы отключите возможность пользоваться ISP программатором, МК заблокируется, для восстановления МК нужен будет параллельный программатор высоковольтный. Пользоваться программаторами типа «5 проводков» не рекомендую, есть облегченный вариант программатора STK, который так-же построен на нескольких проводках, собирать его я так же не рекомендую, по той причине, что таким программатором очень легко спалить LPT порт, для сравнения — COM порт спалить в разы труднее. Да и потом, программируя «5ти проводками» можно случайно замкнуть эти провода между собой, спалить МК или опять же порт. Использование буферного повторителя в микросхеме улучшает крутизну фронтов сигнала, а так же бережет LPT порт, от случайных КЗ и перенапряжений. Как видите, схема очень простая, построена всего лишь на 1 микросхеме, отечественный аналог этой микросхемы КРАП5.
Микроконтроллеры AVR для начинающих — 2
Кстати забыл отметить Для того что бы прошить микроконтроллер, необходимо специальное устройство называемое программатором. Их достаточно много. Для комфортной работы лучше использовать внутрисхемный программатор, поддерживающий в том числе и отладку. В идеале это ICD3, он нравится многим программистам.
Большое пополнение прошивок Hyundai Bosch ME
Программирование микроконтроллеров AVR
Одной из распространённых неисправностей современных ЖК-телевизоров является «слёт» прошивки. При этом телевизор не выходит из дежурного режима в рабочий. Не реагирует на нажатие кнопок и команды с пульта. В большинстве случаев устранить такую неисправность можно перепрошивкой микросхемы SPI-Flash памяти. Телевизор не включается, хотя индикация дежурного режима имеется. Индикатор светится.
Как прошить микроконтроллер AVR?
Правила раздела Технотрепалка. Очень рекомендуем ознакомиться. Обзоры игр. Показать шапку. Скрыть шапку. CHA Programmer версия: 1.
Курс по микроконтроллерам AVR и PIC для начинающих с нуля. . Прошивка ЛЮБЫХ прошиваемых микросхем программатором ChipProg48 всего
ПЕРЕПРОШИВКА FLASH И EEPROM
Прошивка микросхем для начинающих
Меня зовут Ceливaнoв Мaкcим. И если Вас интересует электроника, программирование и микроконтроллеры, и Вы хотите пополнить свой багаж знаний в этих областях, то, Вы попали на нужную страницу! Вот уже почти 7 лет, я занимаюсь разработкой электронных устройств на микроконтроллерах.
Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл или файл формата intel HEX и заливается в микроконтроллер посредством программатора. Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния. Что же представляет из себя это устройство? В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя с компа залить файл прошивки в память контроллера.
Сам я пользуюсь USB программатором для Algorithm Builder, но он довольно дорог и сложен в исполнении.
Программирование микроконтроллеров для начинающих. Материал добавил: ivan11z , Ключевой транзистор в Блоках питания телевизоров F Восстановление процессоров управления и других циф Ремонт УМЗЧ для начинающих. Acer Extensa G — история апгрейда.
В последнее время, снова как и раньше, мне пришлось частично вернуться к самозанятости по ремонтам электроники. Сотрудничаю параллельно с маленькой мастерской по ремонту электроники, находящейся в проходном месте, как совместитель, плюс выкупаю технику на Авито и Юле , привожу в норму и реализую там же. Значительная часть современной техники является цифровой, а следовательно, содержит в своем составе микроконтроллер или процессор управляющий работой устройства. Но все эти устройства должны где-то хранить управляющую программу и настройки техники, выставленные пользователем в меню.
Микроконтроллеры AVR для начинающих – 2 « схемопедия
Собираем программатор
Итак, после первой части статьи микроконтроллер у нас есть, теперь нам нужен программатор. Программатор советую собирать так называемый STK-200, состоит он всего лишь из одной микросхемы, данный программатор будет лучше чем PonyProg. У пони прога есть единственный плюс (а может быть и минус), он не дает запрограммировать некоторые фьюзы, которые иногда еще называют опасными (например RSTDSBL, DWEN, SPIEN). Если случайно запрограммировать такой опасный фьюз, то вы отключите возможность пользоваться ISP программатором, МК заблокируется, для восстановления МК нужен будет параллельный программатор (высоковольтный).
Пользоваться программаторами типа “5 проводков” не рекомендую, есть облегченный вариант программатора STK-200, который так-же построен на нескольких проводках, собирать его я так же не рекомендую, по той причине, что таким программатором очень легко спалить LPT порт, для сравнения – COM порт спалить в разы труднее. Да и потом, программируя “5ти проводками” можно случайно замкнуть эти провода между собой, спалить МК или опять же порт. Использование буферного повторителя в микросхеме улучшает крутизну фронтов сигнала, а так же бережет LPT порт, от случайных КЗ и перенапряжений.
Ниже представлена схема программатора STK200
Как видите, схема очень простая, построена всего лишь на 1 микросхеме, отечественный аналог этой микросхемы КР1533АП5. В схеме присутствуют 3 светодиода: питание, чтение, запись. Длина соединяющих проводов должна быть как можно короче.
На фото, на плате программатора присутствует кварц и конденсаторы. Кварц нужно ставить на 4 мГц, конденсаторы на 15-15 пФ, два штырька рядом со светодиодами на плате, используются для подачи питания, 5 вольт. Если вы будете собирать переходник, то питание подается с платы переходника, т.к. там стоит «кренка» на 5 вольт, она защитит микроконтроллер и схему от переполюсовки или превышения напряжения.
Собранный программатор выглядит вот так:
К программатору дополнительно нужно будет изготовить плату, на которой будут размещаться панельки под разные МК, в принципе, можно просто запаивать проводки к нужными выводам МК, как вам удобнее.
Ниже в архиве прикреплены все файлы для изготовления программатора, схема, печатная плата программатора и переходника для ATmega8/48/168, ATtiny2313, фотографии.
Для того чтобы проверить работает ли наш программатор, подключаем его в порт LPT, кликаем правой кнопкой мыши на значке “Мой компьютер”, в появившемся списке выбираем “диспетчере устройств”, откроется окошко, кликаем обновить конфигурацию оборудования и на программаторе моргнут светодиоды чтения/записи. Кстати, питание берется от внешнего источника, а не с LPT порта, будьте внимательны.
Главным преимуществом параллельного программатора является способность восстанавливать некоторые неправильно установленные биты. После этого интерфейс ISP отключается, и при программировании последовательным программатором в таких случаях выдается сообщение об ошибке.
Выбор программы и прошивка микроконтроллера
Популярными программами для записи программы в МК являются PonyProg и CodeVision AVR. Я пользуюсь Code Vision AVR (далее CVAVR), но рассмотрим мы обе программы. В принципе, можете пользоваться любыми другими программами, только запомните одно очень важное замечание, в разных программах фьюзы могут выставляться по разному, т.е. зеркально.
В первую очередь подключаем программатор в нужный нам порт, только сначала ставим микроконтроллер в панельку. Питание подавайте после того, как программатор будет подключен к порту. Для того, чтобы запрограммировать микроконтроллер нам нужны файлы прошивки, файл с расширением .hex, в некоторых проектах используется еще файл EEPROM .eep. (электрически изменяемая память данных, в нем хранятся различного рода константы).
И не забываем про фьюзы, если они выставляются, обычно в статьях всегда прикрепляют картинку или пишут какие фьюзы выставлять.
Прошивка микроконтроллера с помощью PonyProg
1) Скачиваем и запускаем программу PonyProg, появится окошко (возможно проиграется звук), нажимаем ОК.
2) Далее в списке микроконтроллеров нужно выбрать наш МК, кликаем меню “Устройство”, затем выбираем AVRmicro -> ATmega8.
3) Далее, нам нужно выбрать файлы прошивки, для этого кликаем Файл -> Открыть файл программы (FLASH)… Откроется окошко, где нам нужно выбрать наш файл прошивки с расширением .hex.
4) В окошке не забываем в списке выбрать нужное нам расширение файла, иначе файл прошивки не обнаружится.
После того как откроем файл, окошко будет заполнено непонятными цифрами и буквами. Это шестнадцатеричное представление прошивки.
5) Теперь точно также нужно выбрать файл прошивки EEPROM с расширением .eep, если конечно он нужен и прилагается.
Если вы еще не подключили программатор и не подали на него питание, сделайте это. Не забудьте вставить МК в панельку, не перепутайте положение в панельке, обратите внимание на насечку или кружок на корпусе МК, оттуда и начинается отсчет ножек.
6) Кликаем Установки -> Настройка оборудования. Все настройки выставляем как на рисунке ниже, затем нажимаем кнопку “Проверка” – должно выйти окошко “Тест ОК”
Если этого не произошло и вышла окошко с надписью “Тест ОШИБКА”
Кликаем правой кнопкой мыши на значке “Мой компьютер” и выбираем “Диспетчер устройств” или можно зайти в Панель управления -> Система -> Оборудование -> Диспетчер устройств.
Появится такое окошко, в списке находим Порты (COM и LPT ), кликаем правой кнопкой мыши на нем и нажимаем “Обновить конфигурацию оборудования”
Затем закрываем окно, и возвращаемся к PonyProg, повторяем пункт 6, нажимаем “Проверка”, должно выйти окошко с надписью “Тест ОК”.
7) Нажимаем “ОК”, далее переходим в меню Установки -> Калибровка, нажимаем Yes.
Выйдет сообщение об успешно проведенной калибровке, нажимаем ОК
8) Сейчас нам нужно будет выставить фьюзы, если в вашей конструкции фьюзы не выставляются, переходите к следующему пункту. Кликаем Команды -> Security and Configuration Bits… откроется окошко для установки фьюзов
Ставим строго те галочки, которые нам нужно, для моего проекта нужно выставлять следующие фьюзы: BOOTSZ1, BOOTSZ0, BODEN, CKSEL3, CKSEL2. Затем нажимаем ОК. Фьюзы при программировании нужно выставлять только те, что указано, если запрограммируете ненужные вам фьюзы, МК может залочиться, разблокировать его потом будет очень сложно, нужен будет более сложный программатор чем наш, будьте внимательны! Записывать программу в МК можно без выставления фьюзов – заработает затем устройство или нет, это другой вопрос, если даже и заработает, может очень сильно тормозить, или будет работать частично, это ничем не грозит, МК лочится только после неправильно выставленных фьюзов. В некоторых проектах могут использоваться фьюзы, которых может не оказаться в PonyProg, например SPIEN, этот фьюз отключает возможность внутрисхемного программирования, поэтому во многих программах не показывается специально, чтобы вы случайно его не установили.
9) Теперь все готово, и можно прошить микроконтроллер, нажимаем Команды -> Записать все. Если вы еще не передумали, то в окошке которое вышло, нажимаем “Yes”, и начнется процесс записи и проверки.
После чего выйдет сообщение об успешном завершении операции
Все, теперь можно вынимать МК из программатора и проверить наше устройство, если вы все сделали все как я расписал, все будет работать, Если по какой то причине устройство не заработало, возможно допущены ошибки при сборке программатора, перепроверьте все и попробуйте еще раз перепрошить МК.
10) Если спустя какое то время вам захочется сменить прошивку, или использовать МК для другого проекта, то снова вставляем его в программатор, подключаем тот к ПК, открываем программу, кликаем Команды -> Стереть, программа сотрет все данные с МК.
Стирать данные совсем не обязательно, при записи новой программы, старая программа сотрется автоматически, и только потом запишется новая.
Что касается программы PonyProg, в разных версиях свой список устройств, если в вашей версии программы вы не можете найти в списке МК скажем ATmega32, скачайте другую версию.
В следующей статье рассмотрим прошивку МК с помощью программы CodeVision AVR а так-же рассмотрим часто возникающие ошибки и проблемы связанные с МК, постараемся их решить Скачать печатные платы для программатора
Автор: Романов А.С (г. Чебоксары)
Введение в программное обеспечение для встраиваемых систем и среды разработки
Об этом курсе
69 118 недавних просмотров
Добро пожаловать на курс Введение в программное обеспечение для встраиваемых систем и среды разработки. Этот курс направлен на то, чтобы дать вам реальный опыт кодирования и практическую работу над проектами с микроконтроллерами на базе ARM. Вы узнаете, как осуществлять управление конфигурацией программного обеспечения и разрабатывать встроенные программные приложения. Задания курса включают создание системы сборки с помощью GNU Toolchain GCC, использование контроля версий Git и разработку программного обеспечения в Linux на виртуальной машине. Курс завершается проектом, в котором вы создадите собственную систему сборки и прошивку, которая может манипулировать памятью.
Гибкие срокиГибкие сроки
Сброс сроков в соответствии с вашим графиком.
Общий сертификатСовместно используемый сертификат
Получите сертификат по завершении
100 % онлайн100 % онлайн
Начните сразу и учитесь по собственному графику.
Coursera LabsCoursera Labs
Включает практические учебные проекты.
Узнайте больше о Coursera Labs Внешняя ссылкаПромежуточный уровеньПромежуточный уровень
Часов для завершенияПрибл. 9 часов на прохождение
Доступные языкиАнглийский
Субтитры: арабский, французский, португальский (европейский), итальянский, вьетнамский, немецкий, русский, английский, испанский
Навыки, которые вы приобретете
- Makefile
- Программирование на C
- Встроенный C
Гибкие сроки
Сброс сроков в соответствии с вашим графиком.
Общий сертификатОбщий сертификат
Получите сертификат по завершении
100% онлайн100% онлайн
Начните сразу и учитесь по собственному графику.
Coursera LabsCoursera Labs
Включает практические учебные проекты.
Узнайте больше о Coursera Labs Внешняя ссылкаПромежуточный уровеньПромежуточный уровень
Часов для прохожденияПрибл. 9 часов на выполнение
Доступные языкиАнглийский
Субтитры: арабский, французский, португальский (европейский), итальянский, вьетнамский, немецкий, русский, английский, испанский
Инструктор
Алекс Фосдик
Инструктор по электрике
5, 90 и энергетика
115 360 Учащиеся
2 Курсы
Предлагает
Университет Колорадо в Боулдере
CU-Boulder — это динамичное сообщество ученых и учащихся в одном из самых живописных университетских городков страны. Являясь одним из 34 государственных учреждений США, входящих в престижную Ассоциацию американских университетов (AAU), мы гордимся традициями академического превосходства, в котором пять лауреатов Нобелевской премии и более 50 членов престижных академических академий.
Отзывы
4.5
Filled StarFilled StarFilled StarFilled StarHalf Filled Star165 reviews
5 stars
70. 27%
4 stars
19.40%
3 stars
4.54%
2 stars
2,27%
1 Звезда
3,49%
Лучшие обзоры от введения в программное обеспечение для встроенных систем и среды разработки
Заполненные звезды StarFiled Starfiled Starfiled Starот VDJul 25, 2021
Это так потрясающе. Это помогло мне понять вещи, которые меня беспокоили давным-давно. Спасибо Университету Колорадо в Боулдере и г-ну Алексу Фосдику.
Наполненная звездаНаполненная звездаНаполненная звездаНаполненная звездаНаполненная звездаот VRD 31 декабря 2020 г.
Отличный курс профессора Алекса. Благодаря этому курсу вы обязательно изучите основы встраиваемых систем. Его объяснения кристально ясны. Стоит потраченного времени.
Заполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаby MFJun 22, 2018
Это был превосходный и очень информативный курс, хотя было бы намного лучше, если бы мы дольше останавливались на темах с большим количеством практических примеров.
Filled StarFilled StarFilled StarFilled StarFilled Starот CS 2 июля 2018 г.
Отличная курсовая работа. Это заставляет вас исследовать C , цепочку инструментов GNU и сегменты памяти, которые необходимы для встраиваемых систем. Я очень взволнован и взволнован, чтобы поделиться своим опытом с другими.
Посмотреть все отзывы
Часто задаваемые вопросы
Еще вопросы? Посетите Справочный центр для учащихся.
Вставка микропрограммы в вашу микропрограмму
Выполнение беспроводных обновлений устройств в полевых условиях может оказаться сложной задачей. Надежность и восстановление, конечно, являются ключевыми, но даже размещение нужных битов в нужных секторах хранения может быть проблемой. Недавно я работал над проектом, который требовал разработки нового пути для обновления некоторых небольших микроконтроллеров, которые были явно неудобны.
Подобный проект состоит из многих частей; загрузчик для выполнения фактического обновления, надежный протокол связи, пути восстановления, механизм передачи файлов и многое другое. Что делало эти микроконтроллеры особенно неудобными, так это то, что они сами не были подключены к сети, а требовали перехода через другой промежуточный контроллер, который сам был и , не подключенным к сети. Как и ожидалось, в остальном простой шаг «передача файлов» быстро превратился в сложную луковицу задач, которые необходимо выполнить, прежде чем можно будет продолжить остальную часть проекта. Как говорится, все дело в микро.
Система de jourРассматриваемая система не особенно экзотична. Соответствующая часть состоит из подключенного к сети компьютера Linux, подключенного к большому микроконтроллеру, подключенного к множеству более мелких контроллеров для управления различными задачами. Мне нужно было иметь возможность обновить это разветвление меньших контроллеров. Чтобы не усложнять, я решил, что промежуточный микроконтроллер будет отвечать за процесс обновления его дочерних элементов. Но это представляло новую проблему; как нам получить образ прошивки в промежуточный контроллер?
Micro, о котором идет речь, довольно мощный, с изрядной долей внешней флэш-памяти (естественно, отформатированной с помощью littleFS), но размещение файлов на этой флэш-памяти заставило бы меня разработать интерфейс файловой системы для компьютера с Linux. Не проблема, а большой объем работы и существенное отклонение от текущей задачи: загрузка этих проклятых контроллеров! Затем кто-то предложил отличный способ упростить процесс почти до нуля; что, если я объединил целевые образы прошивки с прошивкой для самого промежуточного контроллера? Тогда перепрошивка промежуточного звена также бесплатно передаст прошивку полезной нагрузки! Определенно оперативная стратегия, но как это сделать? Это оказалось более интересной проблемой, чем я ожидал. Посмотрим, как вставить образы в прошивку.
Я изучил четыре метода объединения образа встроенного ПО: компиляция полезной нагрузки встроенного ПО в качестве заголовка, связывание его в качестве объектного файла или изменение скомпилированного вывода для его внедрения и непосредственное редактирование окончательного двоичного файла. Помимо прочих различий, каждая из этих стратегий подходит для использования на разных этапах процесса разработки. Связывание имеет смысл только при компиляции прошивки, приемы компоновщика работают сразу после компиляции, а редактирование бинарника может произойти в любой момент после завершения бинарника.
Поскольку это был компонент более крупного проекта, ориентированного на стабильность, отслеживание точной версии каждого отдельного образа прошивки было чрезвычайно важно для поиска ошибок и отслеживания. В идеале каждое изображение должно быть несколько развязано, чтобы их можно было менять по отдельности без перекомпиляции всего. Еще больше усложняла проблему потребность в трех образах — каждый контроллер запускает отдельное приложение — и двух наборах инструментов, поскольку промежуточный и целевой микроконтроллеры имели разные архитектуры. Хотя один из четырех вариантов лучше всего подходил для моих нужд, все четыре заслуживают обсуждения.
The Classic: файл заголовка
Пример экспорта исходного кода GIMP C, от пользователя Twitter [@whisperity]Если вы прочитали заголовок этого поста и подумали про себя: «Это просто, просто скомпилируйте его в заголовок!» ты не один. Это, безусловно, классический подход к проблеме, и если все ресурсы доступны во время компиляции, это может быть лучшим вариантом.
В этом методе нет хитрости, он так же прост, как кажется. Вы используете инструмент для эффективной «печати» двоичного файла полезной нагрузки в виде набора отдельных байтовых констант, затем выгружаете их в исходный файл в виде массива и компилируете. Доступ — это просто, это просто массив фиксированного размера! Вы даже можете использовать
, чтобы выяснить, сколько данных доступно.
Существует множество инструментов, облегчающих этот рабочий процесс, самым удивительным из которых является образец утилиты GIMP, который может экспортировать напрямую в исходный код C. Более дружественный к CLI вариант (и тот, который появится снова) — xxd
. xxd
номинально используется для преобразования между необработанными двоичными файлами и различными форматами шестнадцатеричных файлов, но также может быть настроен для экспорта исходного файла C напрямую с помощью -i
флаг. Вывод должен выглядеть довольно знакомо, если вы уже видели константный массив C:
borgel$ xxd -i somefile. bin беззнаковый символ somefile_bin[] = { 0x22, 0x22, 0x22, 0x47, 0x75, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, ... 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x29, 0x0a }; беззнаковое целое somefile_bin_len = 10568;
Довольно удобно, правда? Направьте этот вывод в исходный файл и скомпилируйте. К сожалению, это не очень хорошо подходило для моего приложения. Я не мог гарантировать, что микропрограмма полезной нагрузки всегда будет доступна во время компиляции, и даже если бы это было так, было бы несколько сложнее отследить точную версию, из которой она была собрана, без чтения ее из самого финального двоичного файла или создания отдельного файла. файл версии. Таким образом, заголовок C отсутствовал.
Slick Linker Magic
Для скомпилированного языка программирования, такого как C, компилятор, вероятно, создает промежуточные объектные файлы. Вы видели их как .o
, болтающиеся в вашем дереве каталогов. Они содержат скомпилированные сегменты рассматриваемой программы, а также метаданные о том, где этот код в конечном итоге попадет в окончательный исполняемый файл, а также другую информацию, используемую компоновщиком или отладчиком. Что ж, оказывается, в объектный файл можно превратить что угодно, обернув его в нужные байты, в том числе и в другой бинарник.
С помощью инструментов, совместимых с gcc
и gcc
, это обертывание объектных файлов можно выполнить с помощью самого ld
(компоновщика) с флагами -r
и -b
. -r
запрашивает у ld
создание объектного файла в качестве выходных данных, а -b
позволяет указать входной формат (в данном случае двоичный). Примечание: на некоторых платформах -b
кажется устаревшим и может не понадобиться. Полная команда выглядит примерно так:
borgel$ ld -r -b binary somefile.bin -o somefile.o
somefile.o
может быть связан с остальными объектными файлами, чтобы составить законченную программу. Использование встроенного двоичного файла с запущенным исполняемым файлом сложнее, чем чтение константного массива, но не более того. Компоновщик автоматически добавляет в объектный файл несколько магических символов, описывающих начальный адрес, конечный адрес и размер полезной нагрузки (в данном случае двоичной). На машине для разработки их можно проверить несколькими способами, наиболее удобным из которых является 9.0177 nm (для перечисления символов в объектном файле) и objdump
(дампер объектного файла) — оба являются частью обычной установки GNU binutils. Каждый из них очень мощный, но давайте возьмем objdump
в качестве образца:
borgel$ objdump -x somefile.o somefile.o: формат файла ELF32-рука-маленький Разделы: Имя IDX Размер Адрес Тип 0 00000000 0000000000000000 1 .data 00002948 00000000000000000 ДАННЫЕ 2 .symtab 00000050 0000000000000000 3 .strtab 0000004f 0000000000000000 4 .shstrtab 00000021 0000000000000000 ТАБЛИЦА СИМВОЛОВ: 00000000 *UND* 00000000 00000000 л д .данные 00000000 .данные 00000000 .данные 00000000 _binary_somefile_bin_start 00002948 . data 00000000 _binary_somefile_bin_end 00002948 *ABS* 00000000 _binary_somefile_bin_size
Большинство из этого нас не интересует, хотя интересно поковыряться в скомпилированных двоичных файлах, чтобы увидеть, что они содержат (для этого также попробуйте инструмент strings
). Для наших целей нам нужны три символа __binary_somefile_bin_*
. Обратите внимание на их отсутствие в приведенном выше однострочнике ld
, они автоматически именуются и размещаются компоновщиком. Колонка цифр слева от ТАБЛИЦА СИМВОЛОВ Раздел
представляет собой смещения в объектном файле, где расположен каждый символ, в шестнадцатеричном формате. Мы можем получить размер нашего двоичного файла (в данном случае с помощью простого ls
)
borgel$ ls -l somefile.bin somefile.bin -rw-r--r--@ 1 borgel staff 10568 Aug 15 14:22 somefile.bin
, чтобы увидеть, что символы _binary_somefile_bin_size
и _binary_somefile_bin_end
правильно размещены после блока того же размера, что и наш входной файл ( 10568 = 0x2948). Чтобы получить доступ к этим символам в C, мы добавляем их как extern
в любой файл, который в них нуждается, например так:
extern const char _binary_somefile_bin_start; extern const char _binary_somefile_bin_end; extern const int _binary_somefile_bin_size;
Затем на них можно ссылаться в коде, как на любую переменную. Помните, что они предназначены для указателей на данные на диске. То есть их адрес имеет смысл, и данные, хранящиеся в этом месте, — это данные на диске по этому адресу.
Этот метод прекрасно работает и лучше инкапсулирован, чем прямое преобразование всего в исходный файл. Но он страдает теми же проблемами, что и предыдущий подход; что отслеживание происхождения результирующего двоичного файла может быть сложным без встраивания дополнительных символов.
В моем случае большая проблема заключалась в том, что для работы с объектными файлами у вас должны быть инструменты, поддерживающие эту конкретную архитектуру процессора.