Умели химикалки за кодиране и шиене Учене за работа с архитектури, различни от x86 от Linux

Съдържанието на статията

Джаджите бързо проникват в живота ни. Малко по-малко от всички те имат на борда контролер, различен от архитектурата на x86 на Intel, който дори консерваторите започнаха да наричат ​​умиращ. И ако по-рано само истинските гурута на техния бизнес са могли да програмират такива устройства, сега квалификационната лента е намаляла, а възможностите на самите контролери са се увеличили многократно.

Нека докажем, че разработването на вграден (т.е. вграден) софтуер под GNU/Linux е не само възможно, но дори по-удобно, отколкото под Windows.

Зоологическата градина с архитектури и устройства върху тях е огромна и в началото е много лесно да се объркате в цялото това разнообразие. За да не покриете всичко едновременно, можете да поемете по пътя на най-малкото съпротивление: започнете да учите едно нещо. Да предположим, че имате в ръцете си устройство, което в миналото е било някакъв рутер или контролер за събиране на данни. След това можете да си поставите задачата да научите как да програмирате точно това устройство: компилирайте софтуер за него и го мигайте. Ако тренирате с него, хакът на всички други устройства ще последва нарязаното, защото на определено ниво на абстракция всичко става същото. Системата GNU/Linux обикновено е в състояние да отделя модули за различни архитектури сама по себе си и често пренасянето на програма от едно устройство на друго се свежда до замяна на един ред в Make-файла.

Сега за това, което трябва да знаете, преди да се впуснете в програмирането и фърмуера на това или онова устройство. Разбира се, имате нужда от известен опит в писането и съставянето на поне някои C програми. Би било полезно да знаете как да пишете Makefiles и да знаете кои части библиотеки са свързани с изпълними файлове в Unix системи. Също така, моралната готовност се приветства след следващото мигане на устройството, за да се получи голо парче желязо вместо Linux кутия, която диша живот.

В допълнение към добавянето на софтуер към вече работещо устройство на Linux, не по-малко интересно е да работите и с „гол“ контролер (така нареченият гол метал), когато във вътрешната памет на устройството няма нищо освен буутлоудъра. Ще разгледаме и този сценарий.

Състезание

В наше време, когато хардуерните програмисти вече не кодират на машинно ниво и не използват примитивни програмисти, а възможностите на самите микроконтролери са скочили, нашата светла кауза на строителите на комунизма ни помага да се борим за свободата на вградения софтуер отпред! Ура, другари!

Сериозно обаче, съвременните производители започнаха да доставят със своите продукти някакъв неясен софтуер за изпомпване с бутон на Windows, който позволява на индийците да не свалят ръката си от мишката от програмиране. Изглежда, че небето е дошло, удобно ли е? Но, колкото и да е странно, програмирането на контролери от под Linux се оказва в пъти по-удобно! Или миналото на хакерите на тази операционна система оказва влияние, или нейната междуплатформена платформа, но факт е, че е по-удобно да се работи тук. На черния екран на конзолата работата е изключително автоматизирана и освобождава програмиста от търсене на „същия бутон“ в следващия интерфейс на GUI за следващия MK.

Понякога нещата не са толкова добри с такъв софтуер, но знаещите хора го пускат през Wine или просто го обръщат (пример: обратен USB програмист за Silabs C8051: http://ec2drv.sourceforge.net). С една дума, въпреки известната ориентация на производителите към потребители на Windows, можете да живеете в света на GNU.

И така, какъв софтуер трябва да има под ръка вграден програмист за начинаещи?

Редактори и среди

Както при програмирането за „голям брат”, най-важното е удобството на работното място. За да бъдат сортирани файловете в проекта и компилаторът да бъде извикан с необходимите параметри, има програмни среди (или IDE - интегрирана работна среда). В общ смисъл всяка програмна среда, която може основно да разбира поне езика C и да извика външен компилатор, е подходяща за нас. Но ще наблегна на някои от тях.

Eclipse (www.eclipse.org). Чудовище, написано на Java, което поддържа всичко на света и това, което не поддържа, може лесно да бъде допълнено с приставки. Ако вече програмирате на тази платформа, тогава не е необходимо да се преквалифицирате - контролерите също са кодирани тук.

Съставители

Нека да разгледаме софтуера, който превръща човешкия език C в машинни кодове. В крайна сметка няма компилатор - няма програма.
GNU GCC. Първо, разбира се, е компилаторът GCC, който се използва навсякъде в света на Linux. Без значение за каква архитектура той изгражда кода, можете да сте сигурни, че синтаксисът ще бъде съвместим, кодът ще бъде преносим и кравите ще бъдат скучни. Силно препоръчвам да го използвате във вашата работа, въпреки че някои търговски и трети компилатори може да са по-ефективни.

SDCC или Small Devices C Compiler. Проектиран за изграждане на фърмуер за прости процесори като Intel MCS51, AVR, HC08, PIC и Z80. В паралелен свят той може да се конкурира с 8051 инструментариум от Keil.

Патентовани компилатори. Същият Кийл например. Много майстори го използват чрез Wine и не се оплакват. Е, също вариант.
Други. Ясно е, че изборът на горния софтуер не е ограничен. Търсенето в мрежата ще покаже много компилатори за малко известни или забравени архитектури и използването им е въпрос на вкус или необходимост.

Компилация

Имаме компилатор, сега трябва да изградим нещо за тях, например за ARM архитектурата. GCC предлага две цели за тази цел: arm-linux и arm-gcc. Накратко, те се различават помежду си по това, че първият е необходим за изграждане на софтуер за Linux, а вторият - за гол метал. Това не е напълно правилно обяснение, но за първи път ще се оправи.

Първо, нека разберем дали устройството, за което кодирате, вече има собствен Linux на борда и просто трябва да напишете своя софтуер за него.

Както знаете, всички Unixes са много приятелски настроени, просто много придирчиви към приятели. Това, което искам да кажа, е, че с Linux на основната машина, писането на софтуер става истинска тръпка. Ако вашата програма не използва библиотеки на трети страни, тогава компилацията се свежда до просто заместване на компилатора. Нека напишем програма: