惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
罗磊的独立博客
F
Future of Privacy Forum
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
T
Tenable Blog
F
Fortinet All Blogs
D
Docker
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
T
Threat Research - Cisco Blogs
I
Intezer
T
Tor Project blog
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
GRAHAM CLULEY
T
Threatpost
美团技术团队
K
Kaspersky official blog
F
Fox-IT International blog
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
P
Palo Alto Networks Blog
Google DeepMind News
Google DeepMind News
T
The Blog of Author Tim Ferriss
S
Schneier on Security
腾讯CDC
Cisco Talos Blog
Cisco Talos Blog
C
Check Point Blog
博客园 - 叶小钗
I
InfoQ
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
T
True Tiger Recordings
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
J
Java Code Geeks
C
CERT Recently Published Vulnerability Notes

Все публикации подряд на Хабре

Как 100+ авторов пишут 100+ процессов в 3 версиях и не путаются. Или как мы переехали с Wiki на Git Прошла AnalystDays – хорошие выступления и нетворкинг VSCode как IDE для embedded разработки Моделирование широкополосной антенны с двойной круговой поляризацией и высокой изоляцией Ваше прошлое физически существует прямо сейчас. И вы заморожены там навсегда От списка инструментов к technical output: как security engineer’у описывать hands-on опыт в CV и на интервью I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс Вайбкодинг спас меня от подрядчиков. А потом я поняла, что сама стала подрядчиком для своих агентов Святой Августин и GAN: почему борьба добра и зла — это генеративная состязательная сеть В каждом QR-коде зашита половина лишней информации. Намеренно Я открываю автомат ключом, меняю рулон бумаги и зарабатываю 180 тысяч в месяц с точки Мастер восстановления. Культура достиженства и выгорание Недельный геймдев: #279 — 24 мая, 2026 Защита от дублирования кода агентами: семантические концепции Frontend Status: свежий дайджест фронтенда и AI — 25.05.2026 Где искать IT-работу кроме HH: подборка платформ 2026 Почему простые числа собираются в спирали? OCR для Data Lakehouse: от Apache Tika к собственному решению на базе Docling Jira — Тьюринг-полная Kubernetes-аудит после Wiz и Prisma: как живут без CNAPP в 2026 «Тестируем MVP в 4 раза быстрее»: как нейросети изменили жизнь предпринимателей На каком стеке и железе работает умное наблюдение в вашем городе: обзор технологий от разработчиков видеоаналитики Как мы ускорили согласования на двух заводах в 24 раза Heartbeat-мониторинг cron-job'ов: dead-man-switch на FastAPI [Перевод] Сегодня нет джуниоров, а в 2031 году не станет и синьоров Профайлер для PostgreSQL: от идеи до работающего MVP за сутки [Перевод] Ограничения размера cookie в ASP.NET Core в продакшене: причины и способы решения Проблема «божественного» Obsidian: почему я отказался от централизованного подхода в работе Лицензии GNU GPL: как пройти проверку Минцифры и заказчика для госзакупок и КИИ Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере MTProxy jumper — делаем автоматическое переключение прокси-серверов Telegram Ты уже используешь агента. Просто не заметил Книжный салон. Послевкусие и благодарности Как отлаживать мини‑приложения в MAX и почему без DevTools это боль Cбор биометрических данных. Как защищается наша биометрия на практике Как запустить учет активов без цифровой свалки: первые 90 дней CGE: визуализация кравлера и скрытых связей между поддоменами Зачем банки тратят миллиарды на науку (спойлер: не благотворительности ради) Книга: «Современный Java Concurrency. Глубокое погружение в Virtual Threads, Structured Concurrency и Scoped Values» Как использовать подписку ChatGPT и Claude в Cursor без оплаты за API токены Специализированная ИСУП или модуль в универсальной платформе: вот в чем вопрос Обход белых списков через WebRTC на стероидах (с поддержкой iOS и десктопа) Регата INFOSTART CIO CAMP: когда команда проверяется не в переговорной, а на воде Пет-проект, который не умер: система бронирования устройств как полигон для AI-разработки Не надо встраивать ИИ в каждую корпоративную систему, это архитектурная ошибка Нейросети для дизайна интерьера: Выбираем лучший ИИ для генерации концептов и планировок квартиры Что там с Ил-114-300 Что такое DAS: как и зачем продукт-менеджеры саботируют запуск новых продуктов 8% компаний измеряют критическое мышление руководителей. Что делают остальные 92% CVE, Shell и побег из контейнера: испытываем возможности PT Cloud Application Firewall Как я научил Алису петь: генерация музыки по голосовой команде Восстановление данных с помощью бесплатной утилиты Easy Disk Checker Как мы построили сквозную аналитику в Power BI Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал Ты прокрастинируешь потому, что избегаешь напрасных усилий, а не чрезмерных нагрузок Я построила диагностику «стоит ли это автоматизировать» — и она трижды говорила глупости. Разбор ошибок Как устроены world models, что показал Google на прошлой неделе и где это меняет gamedev и робототехнику Двухдневная рабочая неделя — будущий стандарт CPU не умер, он просто ждал. Китай строит двухэксафлопсный суперкомпьютер без единого GPU — прорыв, необходимость, фейк? 3Sound: поиск бесплатных звуков для игр больше не боль? 3 Тбит/с по-русски: почему DDoS в 2026 году стал угрозой для любого бизнеса 10 Гбит/с — зачем вам такая скорость передачи данных в облаке Ремонтируем аналоговый XY-самописец Endim 622 [Перевод] IPO компании SpaceX: хорошая попытка, но нет «Ща будет шрифт»: история одного русского embedded‑шрифта Как аквариум на подоконнике превратился в full-stack платформу с AI GiftsHub — из чат-бота в полноценный backend-продукт Пиратство, копирайт и DMCA: как Napster, The Pirate Bay и YouTube изменили закон. Часть II Как найти внутренние резервы для развития предприятия Как один французский чиновник от безысходности начал платил зарплаты картами и практически изобрёл банкноты RAG в энтерпрайзе: почему демо работает, а прод нет AI-агент для финансовых процессов: как мы научили ИИ считать числа из базе данных без галлюцинаций Автопостинг на 8 платформах: архитектура waterfall, custom publisher'ы и API-ловушки Кинетика против бронзы: Почему Голиаф был обречен в дуэли с Давидом [Перевод] Масштабирование LLM: от одного чипа до ЦОДа. Глава 2. Шардинг LLM не работает за вас. Она работает с вами Чем лучше защищает минеральный SPF, тем страшнее он выглядит Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 1 Гастарбайтеры ворвались в IT и зарабатывают на рекламе: тут вам не снег лопатой кидать Новые методы и инструменты: как мы обновили курсы по тестированию в Яндекс Практикуме Java 21 в стиле «клятый энтерпрайз» на одноплатном компьютере возрастом 13 лет Ваши секреты внутри LLM. Куда уходят промпты и чего стоит опасаться? 10× труда. 10% к бонусу. Главный риск AI-эпохи — это сениор AI-инженер, который умеет считать Сапожник с сапогами Минимум, который удержит тебя на плаву в период дедлайнов Как без проблем переносить курсы между платформами? Обзор формата SCORM Когда Claude Code ошибается не по своей вине: документационный долг в соло-проектах 70% кода с AI — и ни на день быстрее qrrot — база данных со встроенным ИИ Шахматные программы V. Оценочная функция Восстание масс в обществе спектакля и отчуждение труда в царстве количества: что делать во времена всеобщего упадка? Не умеешь работать с ИИ? Тебя заменит тот, кто умеет Как интеллект становится уязвимостью под давлением Не надо так: три типичные ошибки, которые приводят ко взлому Заметки про код-стайл в C++ Забытый мультиколор (часть 1) Культура ест стратегию на завтрак: почему не работает долгосрочное планирование Советское ИИ: Забытые гении
Самодельный ARM ноутбук, реально ли?
HOMPAIN · 2026-05-25 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение8 мин

Охват и читатели84

Кейс

Мне всегда хотелось разработать свой ноутбук. Сейчас, благодаря развитию систем на базе ARM-процессоров, эта задача сильно упростилась и стала вполне реальной.

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

Введение

В отличие от процессоров x86, ARM-чипы содержат на борту ряд периферии, что сильно упрощает конструкцию материнской платы. Так, например, существуют даже процессоры RV1106G3, в которых сразу встроена оперативная память. Для разработки простейшего компьютера на базе такого процессора достаточно развести плату - это не сложнее, чем сделать плату для Arduino на базе микроконтроллера. Одним из примеров таких плат являются одноплатники Luckfox Pico, о которых я как-то рассказывал в статье.

Также процессоры ARM по большей части рассчитаны на небольшое энергопотребление (до 5 Вт), что сильно упрощает схему питания и охлаждения.

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

Варианты материнских плат

На данный момент есть несколько вариантов реализации материнской платы для вашего портативного устройства:

Своя плата с процессором

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

В такой компоновке можно реализовать один из самых простых вариантов. Так, например, можно взять процессор RV1106G3, добавить к нему микроконтроллер с подключением по UART и простейшую схему питания, а на микроконтроллере реализовать управление клавиатурой и вывод изображения на экран. Собственно, всё! В результате получится простейший портативный компьютер с Linux для работы через консоль. Не нужно никаких сложных схем и драйверов. Однако недостатков у такого подхода тоже много. Низкая производительность и консольный интерфейс делают такое устройство специфическим и не особо интересным для широкого круга задач.

Я не знаю примеров подобной реализации в виде единой платы, но есть устройства, схожие по функционалу: Beepberry и PicoCalc.

Также при таком подходе можно реализовать и наоборот - продвинутое устройство со сложной платой и богатой периферией. Эта задача достаточно сложная и дорогая для хобби-проекта. Я знаю только один пример подобной реализации - OpenPandora.

Core-модуль

Второй вариант реализации - использование core-модулей. Такой модуль содержит основные компоненты: процессор, оперативную память, eMMC, Wi-Fi и Bluetooth. Он берет на себя самую сложную часть разводки материнской платы и целиком напаивается на вашу основную плату с периферией. Такой подход позволяет значительно упростить задачу, сохранив при этом все преимущества собственной разработки платы.

К сожалению, данный вариант хорош только в теории: на практике с ним связан ряд проблем. Подобных модулей очень мало в продаже. У более-менее популярных китайских производителей есть только пара слабых моделей, а на доступные мощные модели отсутствует какая-либо документация.

Я встречал реализацию с подобным модулем только в одном китайском устройстве.

Compute-модуль

Следующий вариант - использование compute-модуля. Он, так же как и core-модуль, содержит основные компоненты: процессор, память... Но, в отличие от core-модуля, compute-модуль устанавливается на материнскую плату через разъём, что делает возможным его замену или апгрейд. За свой функционал и универсальность подобная компоновка «расплачивается» габаритами: материнская плата с compute-модулем получается заметно толще.

Compute-модули присутствуют в линейке плат Raspberry Pi. Такие модули обладают хорошей поддержкой и совместимостью с различным ПО. Благодаря этому подобная компоновка достаточно популярна в данный момент. На базе подобных модулей существует несколько портативных устройств, класс которых получил название «cyberdeck». Наиболее известные устройства с подобной компоновкой: uConsole, Hackberry CM5, DevTerm CM4.

Одноплатный компьютер

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

Примеры: Pi Flux, Beepberry, PocketTerm35.

Периферия

Портативные устройства из-за своей компактности требуют особого подхода к выбору периферии. В ноутбук не получится «запихнуть» обычный монитор и USB-клавиатуру.

Дисплей

Вопрос с подключением дисплея оказался для меня наиболее сложным и до конца не решённым. Для подключения есть несколько возможных подходов:

  1. Наиболее простой вариант. Подключение микроконтроллера к отладочному UART-интерфейсу и вывод консольной информации через этот микроконтроллер.

  2. Подключение дисплея по SPI-интерфейсу. Процесс схож с подключением дисплея к микроконтроллеру. На дисплей можно вывести рабочий стол либо «вручную» отрисовывать свой интерфейс из приложения. Данный вариант достаточно прост, но при этом малоэффективен. Для рабочего стола у таких дисплеев недостаточно разрешения и производительности, а при выводе информации только из одного приложения устройство перестаёт быть полноценным компьютером.

  3. Вывод на дисплей через шлейф по интерфейсу MIPI DSI. Это наиболее правильный, но и самый сложный вариант. Проблема в том, что данный интерфейс не стандартизирован. Под каждую линейку дисплеев нужен свой драйвер, у каждого дисплея своя распиновка шлейфа, а какая-либо документация в открытом доступе полностью отсутствует. Кроме того, нужно ещё обеспечить питание подсветки (~10–20 В).

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

Клавиатура

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

Для подключения клавиатуры также есть несколько вариантов:

  1. USB-HID - самый простой и оптимальный вариант. Многие современные микроконтроллеры поддерживают такой режим; для них доступно большое количество примеров и библиотек. Для слабых моделей микроконтроллеров AVR (которые часто встречаются в Arduino) можно использовать программную реализацию V-USB на низкой скорости, чего более чем достаточно для клавиатуры и мыши. Также данный вариант по умолчанию поддерживается в Linux и не требует дополнительных настроек.

  2. Подключение по шине I2C по протоколу HID over I2C. Это практически полный аналог USB-HID, но у данного варианта есть много неприятных нюансов. Практически нет открытых реализаций, библиотек, статей и примеров по протоколу HID over I2C, так что с его реализацией придётся повозиться. HID over I2C поддерживается в Linux, но его предварительно нужно активировать. А значит, к устройству нужно будет подключиться как-то иначе (например, по UART или SSH), либо активировать поддержку на этапе подготовки образа системы. По этому протоколу работают многие тачпады и клавиатуры ноутбуков, поэтому этот вариант можно использовать для их прямого подключения.

  3. Подключение по UART, SPI или I2C со своей реализацией протокола. Клавиатура - достаточно простое устройство, и написать для неё свой скрипт или драйвер для Linux не так сложно. У данного подхода есть два недостатка. Первый: клавиатура может не работать в системе в момент загрузки или в случае какого-то сбоя, поэтому должна быть возможность подключения другой клавиатуры для настройки или восстановления системы. Второй недостаток: нужна первичная настройка и установка скриптов/драйверов после установки системы.

По механической части клавиатуры тоже есть несколько вариантов:

  1. Для компактных решений подходит клавиатура от BlackBerry, они доступны в продаже как запчасти.

  2. Для устройств покрупнее можно взять за основу готовую Bluetooth-клавиатуру и развести свою плату под её кнопки.

  3. Для крупных изделий можно использовать клавиатуры от различных ноутбуков: они бывают самых разных форм и размеров.

Мой тестовый стенд

После анализа доступных технологий я понял, что задача разработки собственного устройства до сих пор остаётся достаточно сложной и ресурсоёмкой. Я решил максимально упростить процесс и в качестве материнской платы использовать одноплатник в форм-факторе Raspberry Pi Zero. Это сводит разводку собственной платы к минимуму, а такой формат неплохо вписывается в габариты компактного устройства.

На своей плате я планировал разместить кнопки клавиатуры, цепи питания, адаптер для подключения дисплея и микроконтроллер, который будет обеспечивать функционал периферии.

Первая проблема: из всех десятков одноплатников в форм-факторе Raspberry Pi Zero только три модели поддерживают интерфейс MIPI DSI для дисплея: Radxa Zero 2 Pro (процессор Amlogic A311D), безымянная плата на базе RK3566 и Orange Pi Zero 2W. При этом две из них немного отличаются по размеру от стандарта, а плата от Orange построена на процессоре Allwinner, которые плохо подходят для DIY-проектов из-за слабой поддержки сообществом. Мой выбор пал на Radxa Zero 2 Pro.


Выбор дисплея оказался ещё сложнее. Я долго изучал, какие варианты совместимы с моей платой, какие драйверы будут доступны, и искал экраны, для которых есть хоть какая-то документация. В итоге я выбрал 5-дюймовый экран на драйвере ST7701 с разрешением 480x854, который планировал подключать через самодельный адаптер.

Для отладки я выбрал клавиатуру M5Stack CardKB II, которую можно перепрограммировать под свои задачи.

Для питания сборки я подобрал аккумулятор ёмкостью 5000 мА·ч и различные отладочные платы питания/зарядки на 5 В.

Проблемы

Первые проблемы оказались связаны с одноплатником. Выяснилось, что у моего одноплатника всего два порта USB, и вывести дополнительные линии невозможно. Это сильно усложняет подключение клавиатуры, карт памяти и другой периферии. Даже для отладки подключить одновременно клавиатуру и мышь (или клавиатуру и флешку) оказалось проблемой, т. к. второй порт по умолчанию работает в режиме OTG, а имеющийся у меня хаб с этой платой не заработал. При выборе платы я не учёл этот момент.

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

Кроме того, я выявил ряд проблем в программной части: курсор мыши на экране мерцает, видео на YouTube нормально воспроизводится в окне, но при разворачивании на полный экран начинает тормозить.

Самые большие трудности возникли с подключением экрана. Перед подключением я решил прозвонить контакты и обнаружил, что распиновка не совпадает с изображением на странице магазина на AliExpress, где я его покупал. После общения с продавцом он выслал мне правильную схему. Затем я несколько дней настраивал драйвер на одноплатнике для вывода изображения через интерфейс DSI. Мне удалось добиться появления сигналов на порту, но картинки на экране я так и не увидел. Что делать дальше в данной ситуации, я не понимаю. В не понимаю чём именно проблема и как её диагностировать, мне не хватает опыта в этом вопросе.

Положительные моменты

Мне удалось скомпилировать и запустить образ Armbian для данной платы. Сама плата работает неплохо: её производительности достаточно для решения простых задач. Кроме того, видеоядро функционирует корректно - на нём пошли простенькие игры и FreeCAD.

Также получилось разобраться с интерфейсами UART, SPI и I2C, поэтому проблем с подключением периферии к ним быть не должно.

Я также исследовал вопрос энергопотребления платы. В простое она потребляет ~1,4 Вт (при выводе изображения через HDMI), а под нагрузкой пиковое потребление возрастает до 5 Вт. Моего аккумулятора должно хватить примерно на 7 часов работы при небольшой нагрузке. Это не самый лучший показатель (смартфоны экономичнее), но и не самый плохой: для комфортной работы этого времени должно быть достаточно.

Выводы

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

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