Переклад статті з блогу інженера Джорджа Хілліарда
Клікований
Я інженер вбудованих систем. У вільний час я часто шукаю те, що можна буде використовувати у проектуванні майбутніх систем, або щось із розряду моїх інтересів.
Одна з таких областей – дешеві комп'ютери, здатні підтримувати Linux, і що дешевше, то краще. Тому я закопався в глибоку кролячу нору маловідомих процесорів.
Я подумав: «Ці процесори настільки дешеві, що їх практично можна роздавати задарма». І через деякий час до мене прийшла ідея зробити голу картку для Linux у форм-факторі візитної картки.
Як я подумав про це, я вирішив, що це було б дуже круто зробити. Я вже бачивелектроннівізитки до цього, і вони мали різні цікаві можливості, типу емулювання флеш-карт, миготіння лампочок і навіть бездротової передачі. Однак візитки з підтримкою Linux я не зустрічав.
Тож я зробив собі таку.
Це закінчена версія товару. Повноцінний мінімальний комп'ютер на ARM, на якому працює моя версія Linux, створена за допомогою Buildroot.
У кутку вона має USB-порт. Якщо підключити її до комп'ютера, вона вантажиться приблизно за 6 секунд і її видно, як флеш-карту та віртуальний послідовний порт, яким можна увійти в оболонку карти. На флешці лежить файл README, копія мого резюме та кілька моїх фотографій. В оболонці є кілька ігор, класика з Unix типу fortune та rogue, невелика версія гри 2048 та інтерпретатор MicroPython.
Все це зроблено за допомогою дуже маленького флеш-чіпа на 8 Мб. Завантажувач міститься в 256 Кб, ядро займає 1,6 Мб, а вся файлова система root - 2,4 Мб. Тому для віртуальної флешки залишається багато місця. Там також є домашня директорія, доступна для запису – якщо хтось зробить щось, що захоче зберегти. Це теж зберігається на флеш-чіп.
Весь пристрій коштує менше $3. Воно досить дешеве, щоб його можна було роздавати. Якщо ви отримали від мене такий пристрій, це означає, що, швидше за все, я намагаюся справити на вас враження.
Проектування та складання
Спроектував і зібрав я сам. Це моя робота, і вона мені подобається, і більшість труднощів полягала в пошуку досить дешевих запчастин для такого хобі.
Вибір процесора був найважливішим рішенням, що впливало на вартість та реалізованість проекту. Після активних досліджень я вибрав F1C100s, відносно маловідомий процесор виробництва Allwinner, оптимізований за вартістю (тобто біса дешевий). В одному корпусі знаходяться і RAM, і CPU. Я купив процесори на Taobao. Решта комплектуючих придбано на LCSC.
Плати я замовив у JLC. За $8 мені зробили 10 копій. Якість їх вражає, особливо за таку ціну; не такі акуратні, як у OSHPark, але все одно виглядають добре.
Першу партію я зробив матово-чорними. Виглядали вони красиво, але були дуже маркими.
З першою партією була кілька проблем. По-перше, USB конектор був недостатньо довгим, щоб надійно вставати в будь-які USB-порти. По-друге, доріжки для флеш були зроблені неправильно, але я обійшов це, загнувши контакти.
Перевіривши все у роботі, я замовив нову партію плат; фото однієї з них ви можете побачити на початку статті.
Через невеликий розмір всіх цих маленьких комплектуючих я вирішив вдатися до паяння оплавленням припою [reflow solder] з використанням дешевої грубки. У мене є доступ до лазерного різака, тому я вирізав на ньому трафарет для паяння з плівки для ламінатора. Вийшов трафарет досить непогано. Отвори для контактів процесора діаметром 0,2 мм вимагали особливої ретельності для якісного виготовлення – важливо було правильно сфокусувати лазер і підібрати його потужність.
Для утримання плати при нанесенні пасти добре підходять інші плати
Я наніс паяльну пасту і розташував компоненти вручну. Я подбав, щоб ніде в процесі не використовувався свинець – усі плати, комплектуючі та паста відповідають стандарту RoHS – щоб мене не мучила совість, коли я роздаватиму їх людям.
З цією партією я трохи промахнувся, проте паяльна паста вибачає помилки, і все зібралося нормально
На розташування кожного компонента йшло приблизно по 10 секунд, тому я спробував зробити їхню кількість мінімальною. Більше подробиць про проектування картки можна почитати в іншій моїй докладній статті.
Список матеріалів та вартість
Я дотримувався суворого бюджету. І візитівка вийшла такою, як задумано – мені не шкода її віддавати! Звичайно, всім і кожному я її роздавати не буду, оскільки на виготовлення кожного екземпляра витрачається час, а мій час у вартості візитки не враховується (вона як би безкоштовна).
Компонент
Ціна
F1C100s
$1.42
Друкована плата
$0.80
8 МБ флеш
$0.17
Всі інші компоненти
$0.49
Разом
$2.88
Звичайно, є ще витрати, які складно розрахувати, типу доставки (оскільки вона розподілилася між компонентами, призначеними для кількох проектів). Однак для плати з підтримкою Linux це дуже дешево. Також ця розбивка дає непогане уявлення про те, чому обходиться компаніям виготовлення пристроїв нижнього цінового сегмента: можете бути впевнені в тому, що компаніям це обходиться ще дешевше, ніж мені!
можливості
Що сказати? Карта завантажує дуже обрізаний Linux за 6 секунд. Через форм-фактор і вартість карти немає I/O, мережевої підтримки, якогось серйозного обсягу сховища для запуску важких програм. Тим не менш, я зумів впхнути в образ прошивки купу всього цікавого.
USB
З USB можна було вигадати багато чого цікавого, але я вибрав найпростіший варіант, щоб у людей з великою ймовірністю все запрацювало, якщо вони вирішать спробувати мою візитку. Linux дозволяє карті поводитися як «пристрій» з підтримкою Gadget Framework. Деякі драйвера я брав з попередніх проектів, що включали цей процесор, тому у мене є доступ до всієї функціональності платформи USB gadget framework. Я вирішив емулювати заздалегідь згенерований флеш-диск і дати доступ до оболонки по віртуальному послідовному порту.
оболонка
Після логіна під користувачем root на послідовну консоль можна запускати такі програми:
rogue: класична для Unix пригодницька гра про підземелля;
2048: проста гра в 2048 у консольному режимі;
fortune: виведення різних пафосних висловів. Я вирішив не включати сюди всю базу цитат, щоб залишилося місце для інших функцій;
Під час компіляції інструменти складання генерують невеликий образ FAT32 і додають його як один із розділів UBI. Підсистема гаджетів Linux представляє його ПК як пристрій-накопичувач.
Якщо вам цікаво подивитися, що з'являється на флешці, то найпростіше це зробити, ознайомившись з вихідниками. Там лежить також кілька фотографій та моє резюме.
ресурси
Вихідники
Моє дерево Buildroot викладено на GitHub третійтрейфорт/businesscard-linux. Там є код генерації флеш-образу NOR, який встановлюється за допомогою режиму скачування USB у процесора. Там також є всі визначення пакета для ігор та інших програм, які я запхав у Buildroot після того, як все запрацювало. Якщо ви хочете використовувати F1C100s у своєму проекті, це стане чудовою відправною точкою (не соромтеся ставити мені запитання).
Я використовував чудово виконаний проект Linux v4.9 для F1C100s за авторством Icenowy, трохи його переробивши. На моїй картці працює майже стандартна v5.2. Вона лежить на GitHub. третійтрейфорт/лінукс.
Думаю, у мене на сьогодні найкращий порт U-Boot для F1C100s у світі, і він частково також заснований на роботі Icenowy (несподівано, змусити U-Boot працювати як слід виявилося дуже неприємним завданням). Також можна взяти на GitHub. thirtythreeforty/u-boot.
Документація на F1C100s
Знайшов досить мізерну документацію F1C100s, і викладаю її тут:
Allwinner F1C600 Reference Manual – визначення регістрів для F1C600, який насправді є тим самим F1C100s, але перейменованим із заявленою підтримкою Linux (ха!).
Я активно запозичив інформацію зі схеми від Sipeed's Lichee Nano – плати розробки, яку я використав для налаштування софту.
Я багато чого навчився у процесі розробки цього проекту – це мій перший проект, де я використав піч для паяння оплавленням припою. Також я навчився знаходити ресурси для компонентів із поганою документацією.
Я користувався досвідом роботи з вбудованим Linux і досвідом розробки плат. Проект не без вад, проте непогано показує всі мої вміння.
Подробиці роботи з вбудованим Linux пропоную прочитати мою серію статей про це: Mastering Embedded Linux. Там я докладно розповідаю про те, як створювати ПЗ та залізо з нуля для крихітних та дешевих Linux-систем, схожих на цю мою візитну картку.