- PVSM.RU - https://www.pvsm.ru -

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

Перевод статьи из блога [1] инженера Джорджа Хилларда

На моей визитке работает Linux - 1 [2]
Кликабельно

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

Одна из таких областей – дешёвые компьютеры, способные поддерживать Linux, и чем дешевле, тем лучше. Поэтому я зарылся в глубокую кроличью нору малоизвестных процессоров.

Я подумал: «Эти процессоры настолько дешёвые, что их практически можно раздавать даром». И через некоторое время ко мне пришла идея сделать голую карточку для Linux в форм-факторе визитной карточки.

Как только я подумал об этом, я решил, что это было бы очень круто сделать. Я уже видел [3] электронные [4] визитки [5] до этого [4], и у них были различные интересные возможности, типа эмулирования флэш-карт, мигания лампочек или даже беспроводной передачи данных. Однако визитки с поддержкой Linux я не встречал.

Так что я сделал себе такую.

Это законченная версия продукта. Полноценный минимальный компьютер на ARM, на котором работает моя особая версия Linux, созданная при помощи Buildroot.

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

В углу у неё есть 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, но всё равно выглядят хорошо.

Первую партию я сделал матово-чёрными. Смотрелись они красиво, но были очень маркими.

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

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

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

Проверив всё в работе, я заказал новую партию плат; фото одной из них вы можете видеть в начале статьи.

Из-за небольшого размера всех этих маленьких комплектующих я решил прибегнуть к пайке расплавлением полуды [reflow solder] с использованием дешёвой печки [6]. У меня есть доступ к лазерному резаку, поэтому я вырезал на нём трафарет для пайки из плёнки для ламинатора. Получился трафарет достаточно неплохо. Отверстия для контактов процессора диаметром 0,2 мм требовали особой тщательности для качественного изготовления – критически важно было правильно сфокусировать лазер и подобрать его мощность.

На моей визитке работает Linux - 5
Для удержания платы при нанесении пасты хорошо подходят другие платы

Я нанёс паяльную пасту и расположил компоненты вручную. Я озаботился, чтобы нигде в процессе не использовался свинец – все платы, комплектующие и паста соответствуют стандарту RoHS [7] – чтобы меня не мучила совесть, когда я буду раздавать их людям.

На моей визитке работает Linux - 6
С этой партией я немного промахнулся, однако паяльная паста прощает ошибки, и всё собралось нормально

На расположение каждого компонента уходило примерно по 10 секунд, поэтому я попытался сделать их количество минимальным. Больше подробностей о проектировании карты можно почитать в другой моей подробной статье [8].

Список материалов и стоимость

Я придерживался строгого бюджета. И визитка получилась такой, как задумано – мне не жалко её отдавать! Конечно, всем и каждому я её раздавать не буду, поскольку на изготовление каждого экземпляра тратится время, а моё время в стоимости визитки не учитывается (оно как бы бесплатное).

Компонент Цена
F1C100s $1.42
PCB $0.80
8MB flash $0.17
Все остальные компоненты $0.49
Итого $2.88

Естественно, есть ещё расходы, которые сложно рассчитать, типа доставки (поскольку она распределилась между компонентами, предназначенными для нескольких проектов). Однако для платы с поддержкой Linux это определённо весьма дёшево. Также эта разбивка даёт неплохое представление о том, почём обходится компаниям изготовление устройств самого нижнего ценового сегмента: можете быть уверены в том, что компаниям это обходится ещё дешевле, чем мне!

Возможности

Что сказать? Карта загружает очень сильно обрезанный Linux за 6 секунд. Из-за форм-фактора и стоимости у карты нет I/O, сетевой поддержки, какого-то серьёзного объёма хранилища для запуска тяжёлых программ. Тем не менее, я сумел впихнуть в образ прошивки кучу всего интересного.

USB

С USB можно было придумать много чего интересного, но я выбрал самый простой вариант, чтобы у людей с большой вероятностью всё заработало, если они решат попробовать мою визитку. Linux позволяет карте вести себя как «устройство» с поддержкой Gadget Framework [9]. Некоторые драйвера я брал из предыдущих проектов, включавших в себя этот процессор, поэтому у меня есть доступ ко всей функциональности платформы USB gadget framework. Я решил эмулировать заранее сгенерированный флэш-диск и дать доступ к оболочке по виртуальному последовательному порту.

Оболочка

После логина под пользователем root на последовательную консоль можно запускать следующие программы:

  • rogue: классическая для Unix приключенческая игра по подземелья;
  • 2048: простая игра в 2048 в консольном режиме;
  • fortune: вывод различных пафосных изречений. Я решил не включать сюда всю базу цитат, чтобы осталось место для других функций;
  • micropython [10]: очень маленький интерпретатор Python.

Эмуляция Flash Drive

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

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

Ресурсы

Исходники

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

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

Нашёл довольно скудную документацию F1C100s, и выкладываю её здесь:

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

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

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

Заключение

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

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

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

Автор: Вячеслав Голованов

Источник [22]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/341375

Ссылки в тексте:

[1] блога: https://www.thirtythreeforty.net

[2] Image: https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/businesscard-top.jpg

[3] видел: https://hackaday.com/2017/10/04/literally-flashy-business-cards/

[4] электронные: https://hackaday.com/2018/05/11/stylish-business-card-with-a-stylophone-built-in/

[5] визитки: https://hackaday.com/2014/06/17/designing-the-second-version-of-my-business-card/

[6] дешёвой печки: https://www.thirtythreeforty.net/posts/2019/08/t962-reflow-profile-calculator/

[7] RoHS: https://ru.wikipedia.org/wiki/Restriction_of_Hazardous_Substances_Directive

[8] моей подробной статье: https://www.thirtythreeforty.net/posts/2019/12/designing-my-linux-business-card/

[9] Gadget Framework: https://linux-sunxi.org/USB_Gadget

[10] micropython: https://micropython.org/

[11] исходниками: https://github.com/thirtythreeforty/businesscard-linux/tree/master/package/businesscard-flashdrive/files

[12] thirtythreeforty/businesscard-linux: https://github.com/thirtythreeforty/businesscard-linux

[13] задавать мне вопросы: https://www.thirtythreeforty.net/about/

[14] прекрасно исполненный проект: https://github.com/Icenowy/linux/tree/f1c100s

[15] thirtythreeforty/linux: https://github.com/thirtythreeforty/linux/tree/f1c100s-v5.2.4

[16] thirtythreeforty/u-boot: https://github.com/thirtythreeforty/u-boot/tree/f1c100s-v2019.04

[17] Allwinner F1C100s Datasheet: https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf

[18] Allwinner F1C600 Reference Manual: https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf

[19] Sipeed's Lichee Nano: http://dl.sipeed.com/LICHEE/Nano/

[20] схему моего проекта: https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/businesscard.pdf

[21] Mastering Embedded Linux: https://www.thirtythreeforty.net/posts/2019/08/mastering-embedded-linux-part-1-concepts/

[22] Источник: https://habr.com/ru/post/482110/?utm_source=habrahabr&utm_medium=rss&utm_campaign=482110