На моей визитке работает Linux

Автор оригинала: George Hilliard
  • Перевод
Перевод статьи из блога инженера Джорджа Хиллиарда


Кликабельно

Я инженер встроенных систем. В свободное время я часто ищу то, что можно будет использовать в проектировании будущих систем, или что-то из разряда моих интересов.

Одна из таких областей – дешёвые компьютеры, способные поддерживать 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
PCB $0.80
8MB flash $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: вывод различных пафосных изречений. Я решил не включать сюда всю базу цитат, чтобы осталось место для других функций;
  • micropython: очень маленький интерпретатор Python.


Эмуляция Flash Drive


Во время компиляции инструменты сборки генерируют небольшой образ FAT32 и добавляют его в качестве одного из разделов UBI. Подсистема гаджетов Linux представляет его ПК как устройство-накопитель.

Если вам интересно посмотреть, что появляется на флэшке, то проще всего это сделать, ознакомившись с исходниками. Там лежит также несколько фотографий и моё резюме.

Ресурсы


Исходники


Моё дерево Buildroot выложено на GitHub — thirtythreeforty/businesscard-linux. Там есть код генерации флэш-образа NOR, который устанавливается при помощи режима скачивания по USB у процессора. Там также есть все определения пакета для игр и других программ, которые я запихнул в Buildroot после того, как всё заработало. Если вы хотите использовать F1C100s в своём проекте, это станет отличной отправной точкой (не стесняйтесь задавать мне вопросы).
Я использовал прекрасно исполненный проект Linux v4.9 для F1C100s за авторством Icenowy, немного его переделав. На моей карточке работает почти стандартная v5.2. Она лежит на GitHub — thirtythreeforty/linux.
Думаю, у меня на сегодня самый лучший порт U-Boot для F1C100s в мире, и он частично также основан на работе Icenowy (неожиданно, заставить U-Boot работать как надо оказалось весьма неприятной задачей). Также можно взять на GitHub — thirtythreeforty/u-boot.

Документация на F1C100s


Нашёл довольно скудную документацию F1C100s, и выкладываю её здесь:
  • Allwinner F1C100s Datasheet – общая информация и распиновка.
  • Allwinner F1C600 Reference Manual – определения регистров для F1C600, который на самом деле является тем же F1C100s, но переименованным с заявленной поддержкой Linux (ха!).
  • Я активно заимствовал информацию из схемы от Sipeed's Lichee Nano – платы разработки, которую я использовал для настройки софта.


Для любопытных загружаю схему моего проекта.



Заключение


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

Я пользовался имевшимся у меня опытом работы со встроенным Linux и опытом разработки плат. Проект не без изъянов, однако неплохо показывает все мои умения.

Интересующимся подробностями работы со встроенным Linux предлагаю прочесть мою серию статей об этом: Mastering Embedded Linux. Там я подробно рассказываю о том, как создавать ПО и железо с нуля для крохотных и дешёвых Linux-систем, похожих на эту мою визитную карточку.

Комментарии 86

    +5
    Кто первый сделает стартап в России (в мире)?
      0
      Флэшку-визитку делали еще на attiny85, да и с одноплатниками напряженки давно нет, поэтому, не очень ясно в чем стартап и откуда взяться притоку пользователей.
      –10
      С одной стороны — шикарная вещь, с другой — достаточно бессмысленная. А ведь давно просится устранить самый главный недостаток банковских карт — нет информации о балансе карты на настоящий момент. То есть, никогда не знаешь точный объем средств, имеющихся на карточке. Хотя возможности технического решения этой проблемы давно имеются.
      Представьте, рассчитываетесь карточкой за покупку в магазине и показания оставшихся средств высвечиваются на ЖК экране. Далее, вынимаете карточку, ЖК экран гаснет, но имеется возможность в любой момент на короткое время его включить и «вспомнить» сколько осталось денег.
        +35

        Так ведь банк вообще не посылает обратно на терминал ваш баланс. Более того, я бы и не хотел, чтобы такая информация передавалась.


        Вопрос баланса карты решается приходом СМСки на телефон в Вашем кармане по факту оплаты

          +4

          большинство банков уходят от смс в сторону push, а это не всегда удобно.

            +1

            К счастью я пока с таким не сталкивался. Во всяком случае в банках с которыми я имел дело есть отдельный пакет СМС оповещений

              0
              У меня, если за 2 минуты пуш не дошел, то приходит смс.
              А если пуш дошёл, то есть интернет и можно зайти в приложение и посмотреть.
                +1

                Бывает что надо посмотреть последний баланс при отсутствии нормального покрытия сети.

                  +1
                  ну это не возможно в принципе по той-же самой проблеме
                  1) вы купили чтото в магазине
                  2) вы купили чтото в интернет-магазине
                  3) у вас списалась годовая комиссия по карте
                  4) вам начислили кешбек
                  — какой баланс вам карта покажет?
                    +1

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

                      0
                      Если мети нету — то и СМС может не быть. Доставка СМС, как бы, не гарантируется, вообще.
                        0

                        Я имел ввиду последний баланс который был:)

                          0
                          Был, в момент T, а СМС о транзакциях T+x не пришли/пришли через день.
                        0
                        Точно в последнем? Пару раз сталкивался со случаями, когда СМС перемешивались по дороге и _актуальный_ баланс был в предпоследнем. Что очень сильно наводило панику на пользователя.
                          0
                          Не только последовательность прихода СМС не гарантируется, но и то, что транзакция уже пересчитала баланс. Например, операции по погашению задолженности на кредитках Сбера часто выполняются не один час.

                          И на самом деле в МП может быть смотреть даже лучше. Во всяком случае, этот баланс будет запрошен из банка вот прямо сейчас, а что там с СМС творилось никогда толком нельзя знать. Тем более, что при недоступности ТА получателя СМСЦ ставит сообщение в отдельную очередь и может повторить попытку доставки неизвестно когда.
                          0

                          Добавьте ещё в список покупку по оффлайн транзакции.

                          0
                          Если очень нужно, в большинстве банков можно сделать звонок и узнать баланс
                          +1
                          Бывает, что не хочешь ставить приложение.
                            0
                            Если это сбер — то там можно обратно включить нормлаьное уведомление об изменениях на СМС.
                          0
                          Может посылать в отдельных случаях. Например снятие наличных в банкомате своего банка.
                            0
                            Разница, все-таки, большая, между своим банкоматом в своей сети и непонятным терминалом «in the wild».
                              0
                              и вообще запрос баланса, как операция — стоит денег
                                0
                                Для клиента — нет
                                  0
                                  для клиента банка — когда он делает запрос в банкомате своего банка.
                                  А если вы запросите баланс в банкомате чужого банка, с вас запросто сдерут комиссию

                                  Собственно эквайринговый терминал в магазине с большой вероятностью (ну за исключением случая если у вас не сбер, со сбером вероятность пониже), это устройство 'не вашего банка' и за запрос баланса его силами с вас сдерут комиссию
                                  ===
                                  Тут есть некая скрытая хитрость, во времена существования ОРС некоторые вещи выполнялись 'без комиссии' если их делать в банкоматах этой сети если ваш банк туда входит… что создавало впечатление что комиссий нет… и сейчас есть некоторые межбанковские договоры с похожими плюшками
                                  Чтобы понять реалии жизни, попробуйте за бугром узнать баланс карты своей российской
                                    0
                                    Расслабился я после поездки по Вьетнаму — там как-то попроще с комиссиями (видимо, мало кто в мире жаднее наших банкиров)
                                0
                                да, что не отменяет такой возможности.
                              +1
                              А на чеке?
                                0
                                можно шифровать эту информацию и расшифровывать уже на карте, как вариант
                                0
                                Хотя возможности технического решения этой проблемы давно имеются.

                                Это каким образом?

                                Все чиповые карты 'умеют' помнить последний свой баланс, однако как решить проблему его изменения при оплате в интернете например?
                                  –2

                                  Ну когда у вас смартфон вместо карточки, вот тогда проблема прекрасно решается.

                                  0
                                  А мне наоборот отлично, что всякий Вася из ночного магазина не имеет никакой информации о количестве денег на моей карте.
                                  И я против передачи такой информации.
                                    +1
                                    Терминал выступает лишь передатчиком сообщений и не может в них заглянуть. Карта обменивается шифрованными сообщениями с банковским ПО. Так что в теории это все можно сделать секьюрно
                                    +4
                                    хранить баланс на «фронте», как то не секюрно)
                                      +1
                                      а карточка это не фронт. Это полноценный токен для хранения ключей с криптопроцессором который умеет проверять пинкод в оффлайн режиме например
                                      p.s. и баланс у себя она хранит кстати, хотя и редко обновляет
                                        0
                                        что прям хранит-хранит? баланс? типичная EMV-карта при определенных условиях может хранить всякую фигню вроде сумму оффлайн транзакций. Баланс тоже можно прикрутить технически, но зачем?
                                          +1
                                          например чтобы оффлайн операцию провести с большим доверием (типа последний остаток $100500 а у вас операция на $2, в РФ оффлайн не делают конечно практически нигде и никогда, но карта то всеравно все это поддерживает
                                            0
                                            Нету больше или меньшего доверия. Карта может провести операцию в оффлайн или не провести, в зависимости от своих ограничений и ограничений терминала после выполнения ряда связанных с этим проверок. В набирающем обороты бесконтакте карта вообще не ждёт ответа от хоста и не знает как завершилась транзакция.

                                            Оффлайн операции есть на прогулочных кораблях на Волге (это на вскидку то что вспомнил)
                                              +1

                                              Самый массовый оф-лайн это
                                              же городской транспорт.
                                              Метро и валидаторы в автобусах пытаются относительно быстро.
                                              В СПб у меня карта как-то попадала в черный список из-за аварии процессинга-эмитента еще до конца поездки.
                                              А в ЕКБ кондуктор с ручным терминалом выгружает транзакции только в конце смены.

                                        0
                                        Для реализации этой идеи напрашивается e-ink экран, встроенный в карточку.
                                        Вместо usb сделать питание по nfc, правда очень не уверен в том, что его будет достаточно для обновления e-ink… но помечтать можно (в конце концов мощность nfc можно увеличить).
                                        Ну и кстати, в рамках nfc вполне можно представить расширения mass storage class и virtual com port. Будут бесконтактные флэшки:)
                                        UPD: не знаю чего вас минусуют, идея-то в целом неплохая, хотя конечно все аспекты не раскрыты.
                                          –4
                                          Не обращайте внимания, это Хабр. Здесь все по Оруэллу — «все животные равны, но некоторые равнее».
                                            –3
                                            Прекрасно!)

                                            p.s. Плюсов, для вас, у меня к сожалению нет.
                                          +2
                                          Для банковской карты отображение баланса на ней самой совсем не нужно, даже нежелательно, а вот для пополняемого проездного e-ink экранчик был бы очень полезной фишкой. Типа как электронный ценник в магазине.
                                            0
                                            Можно еще Алису в карточку встроить, чтобы не вынимая карту из кармана баланс узнать. Ваш. Вон тем ребятам.
                                              0
                                              Так и представил:
                                              — Слыш, баланс есть? Нет? А если посмотрю?
                                            +1

                                            Выглядит, конечно, круто. Впечатление точно произведет :)

                                              +4
                                              Все новое — это хорошо забытое старое? USB-визитка Фрэнка Чжао habr.com/ru/post/107357 Там, конечно, не «runs Linux», но 2010 год.
                                                +9

                                                Да ну, для простого rubber duck-а много ума не надо, а в статье человек сам засунул целый рабочий Линукс в 3$ карточку. Не принижая Чжао, эти проекты даже рядом не сорят.

                                                  +5
                                                  Я всегда лоялен к чужому мнению. Но не в этом случае. И вот почему.

                                                  Во-первых, это было 10 лет тому назад. Тогда и близко не было подобных возможностей (Гугл сразу показывает что тот же F1C100s 2015 года).

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

                                                  Иными словами, Хиллард лишь развил идею. Да, круто развил, без вопросов. Мне даже эстетический вид и сама концепция понравились больше технической сути. Но в моем понимании, развитие технологии и создание инновации — принципиально разные вещи.
                                                    0

                                                    Ну, разница между двумя проектами огромная, и объединяет их только USB и то, что там где-то в глубине есть кусочек кремния. Так что всё-таки "создание инновации".

                                                      0
                                                      Конечно Хиллард «лишь развил идею» — в его статье четыре (!) ссылки на чужие электронные проекты. Вы статью-то читали?
                                                    +1
                                                    Насчёт линукса и габаритов — в типоразмере SD-карт с 2008 года в лице Eye-Fi, а потом и разными другими фирмами выпускались как карты памяти, так и адаптеры на MicroSD, и там помещался аналогичный компьютер в гораздо меньшем корпусе, зато с WiFi (в т.ч. с Linux habr.com/ru/post/191742 ). Но да, цены не минимальные, задачи другие, и в любительском варианте повторить сложнее.
                                                    +2
                                                    Ух ты, какой интересный процессор. Неплохо было бы освоить для разных окололинуксовых самоделок. Хотя это и Allwinner с его легендарными граблями.
                                                    Спасибо за перевод
                                                      +5
                                                      Полуда и гуртовщики мыши
                                                        0
                                                        Точно! Я-то думал, чего ещё не хватает :)
                                                        +1
                                                        «Полуда» всё-таки в данном случае припой.
                                                          +2
                                                          Паяльная паста
                                                          +16
                                                          для пайки расплавлением полуды

                                                          У меня течет кровь из глаз.
                                                            –6
                                                            «Наймите меня и я потрачу 100$ на то, что делается за 20 центов!»
                                                              +1
                                                              Я не понял, а зачем флэшке операционная система?
                                                                +11
                                                                для понтов. автор прямо пишет, что хочет произвести впечатление.
                                                                +3

                                                                Идеальная визитка для пентестера )

                                                                  0
                                                                  Глянул в chipdip — проц стоит 600+ рублей
                                                                  Глянул на алихе — $3.50+
                                                                  Digikey — $7+
                                                                  Где он его за бакс нашел?
                                                                    0
                                                                    Али — 2,3$
                                                                    Taobao — 92/61,95 = 1.4 (как в статье)
                                                                      0
                                                                      я имел в виду aliexpress. мне почему-то цены меньше 3, 3.5 не показало. Но это не отвечает на вопрос где чувак небольшую партию взял за 1.4? я тоже хочу таких поставщиков )
                                                                        0

                                                                        Али это вообще-то дорогой магазин ;)
                                                                        Или вы сравеивали с местными барыгами?

                                                                        0
                                                                        Вы нашли на Taobao английскую версию или прямо на китайской смотрите? Как у них с доставкой за пределы Китая?
                                                                      0
                                                                      На алибабе есть по 1.8$
                                                                        +1
                                                                        I found it at $1.20 or so on Taobao, and recently I've seen listings for $0.90 apiece
                                                                        +1

                                                                        отличная идея для раздачи троянов)

                                                                          –5
                                                                          засылайте на бизнес-линч лебедеву
                                                                            +1
                                                                            Нет, спасибо. Не оскверняйте честь визитки.
                                                                              0

                                                                              Бизнес-линч уже всё. Август визиток прошёл.

                                                                              +4
                                                                              Скоро тараканы будут бегать с чипами на спине под управлением линукс )))
                                                                              0
                                                                              толи дело Тони Старк — на его «дизайне» работало собственное сердце…
                                                                                +8
                                                                                Тони Старка не существует
                                                                                  0
                                                                                  мои работодатели уверены в обратном;)
                                                                                    +2
                                                                                    О, это да, это проблема. «У нас есть 5 человек, как заставить их выполнить работу десятерых? Очень просто — попросить каждого работать вдвое эффективнее!»
                                                                                    +1

                                                                                    Зате есть Тэл Голсуорси https://www.ted.com/talks/tal_golesworthy_how_i_repaired_my_own_heart/up-next который починил себе сердце 8)

                                                                                  0
                                                                                  Как быстро она умрёт в одежде от статики в таком — открытом исполнении?
                                                                                    0
                                                                                    От статики скорее всего не успеет, SMD-блохи быстрее поотваливаются.
                                                                                    0

                                                                                    Мог бы туда ОС Колибри впихнуть.

                                                                                      0
                                                                                      Обидно что столько пинов идут вникуда, сделать бы хотябы под провода отверстия, хорошая бы девборда получилась бы.
                                                                                        0
                                                                                        Было бы круто сделать это в форм факторе EMV.

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