LINUX.ORG.RU

Как собрать ARM-ноутбук из старого хлама

 , , , ,


7

3

Как-то в марте прошлого года я проводил генеральную уборку и нашёл у себя кучу старых сломанных одноядерных ноутбуков со сгоревшими материнскими платами. Там же были платы от разбитых телефонов и планшетов. Выкидывать было жалко, а на досках объявлений такое даже за 100 рублей никто бы не купил. Но я присмотрел среди этих плат несколько на SoC Allwinner: первый на A13, второй на A33. Изначально я думал из них сделать сервер на Linux, однако когда я зашёл на вики, глаз зацепило слово LVDS. Я сразу подумал: а что если взять один из этих мёртвых ноутбуков, снять сгоревшую мать и заменить её платой от полностью разбитого планшета? Так и родилась идея этого самодельного ноутбука.

Подбор компонентов

Цель проекта была собрать более-менее работоспособный аппарат из как можно более ненужного хлама. За основу я взял плату от планшета Oysters T74ER (маркировка платы AX3-751S-V1.5 512+4), корпус от ноутбука с матрицей от Sony view некой модели. Без нижней крышки и со сгоревшей матерью, она имеет КЗ на всевозможных линиях и не подаёт никаких признаков жизни. USB-хаб, usb-мини-клавиатура, парочка понижающих DC-DC преобразователей которые я снял со старого роутера. И всякая мелочь типа проводов, и синяя изолента – а иначе не заработает!

Подключение дисплея

Как ранее говорилось, многие SoC Allwinner имеют выход LVDS, более того он замультиплексирован с обычным параллельным RGB LCD-выходом, поэтому у производителей этих планшетов нет вариантов не вывести этот интерфейс наружу, кроме как не выводить дисплей в принципе. Но чем примечателен этот интерфейс? Тем, что он был очень популярен в старых ноутбуках и «квадратных» мониторах, которых у меня как грязи. Что нам это даёт? Чтобы подключить дисплей, нужно всего лишь правильно припаять шлейф от матрицы к LCD-выходу. Единственный нюанс заключался лишь в том куда его паять, к счастью у этих китайцев используется довольно стандартный 50-пиновый RGB-интерфейс. А схема стандартного noname-планшета лежала на том же sunxi wiki, там же даже нарисовали куда подключать LVDS.

Подсветка в этом ноутбуке «ламповая» со своим драйвером, я не стал её переделывать не на какие светодиоды:

  1. «Работает – не трогай»
  2. «Ламповая» подсветка «лампово» выглядит. Чего нет у бездушных светодиодов.

Для управления подсветкой используются стандартные LCD-BL-EN и LCD-PWM, просто соединяем соответствующие входы драйвера подсветки ноутбука.

USB

У A33 есть два usb-хоста, это usb-otg (хост и клиент) и стандартный (судя по драйверу) ehci-generic-хост. Обычно в старых китайских планшетах на allwiner’ах, а также rockchip’ах первый выводился непосредственно на microusb, а второй распаялся под отдельную платку wifi-модуля. Но в моём случае wifi esp8089 подключен по sdio, поэтому usb-хост остался не распаянным. Не долго думая как развести usb в своём ноутбуке, я решил microusb оставить не подключенным, а к не распаянному usb-хосту подключить usb-хаб и вывести его на боковые usb-порты к корпусу ноутбука, благо они были на отдельной от основной материнской платы.

Клавиатура

К сожалению, родную клавиатуру от ноутбука так просто не подключишь, (в данном случае у меня её даже не было). Поэтому почти единственным доступным способом будет подключение usb-клавиатуры. Но обычная полноразмерная клавиатура не подойдёт, нужна маленькая и тонкая, которая влезет в корпус. К счастью, такая у меня нашлась.

Разводка питания

Разные компоненты требуют разного питающие напряжения. Например, для питания матрицы ноутбука требуется 3,3 В, для драйвера подсветки 12-19 В, для USB 5 В, а для планшетной начинки 4,2 В. В качестве входного напряжение используется блок питания 12 В 2 А от роутера, а также у меня есть литий-ионный аккумулятор от шуруповёрта. Для получения всех вышеперечисленных напряжений из 12-вольтового источника используются понижающие dc-dc преобразователи, которые я вырезал из старого роутера.

Сборка mainline u-boot

Самый быстрый и простой способ проверить правильно ли я распаял дисплейный шлейф (помимо редактирования script.fel) – это собрать свой собственный u-boot с кастомным CONFIG_VIDEO_LCD_MODE, благо в отличие от стокового mainline u-boot имеет видеодрайвер, а в отличие от линукса не нужно для этого писать целый отдельный dts. Также mainline u-boot умеет читать extlinux конфиги, умеет запускать EFI-приложения, поддерживает usb-host, можно подключить usb-клавиатуру для интерактивного взаимодействия с консолью и даже подключить загрузочную usb-флешку, этакий bios, прямо как на настоящем x86-м ПК. За основу был взят q8_a33_tablet_1024x600_defconfig в котором я изменил:


CONFIG_VIDEO_LCD_MODE="x:1280,y:800,depth:18,pclk_khz:68900,le:16,ri:128,up:1,lo:16,hs:1,vs:1,sync:3,vmode:0"
CONFIG_VIDEO_LCD_IF_LVDS=y
CONFIG_VIDEO_LCD_PANEL_LVDS=y
CONFIG_USB_EHCI_GENERIC=y # чтобы работали usb хосты на плате (обычно под wifi)

Тайминги я написал после внимательного изучения https://linux-sunxi.org/LCD по даташиту своей панели CHUNGHWA CLAA154WB03AN.

Сборка u-boot довольно тривиальна:

export KBUILD_OUTPUT=a33_laptop
export ARCH=arm
make CROSS_COMPILE=arm-none-eabi- xconfig
make CROSS_COMPILE=arm-none-eabi-

Особенность многих allwinner’ов (кроме a31) в том что их brom сначала пытается загрузить свой загрузчик с sd-карт, а лишь затем с nand. Это даёт возможно очень легко запускать на этих устройствах свой кастомный код без перепрошивки. Нужно всего-лишь в 8 сектор SD-карты прошить специально подписанный код.

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1k seek=8

Как не странно, у меня он с первого раза запустился.

Для загрузки Linux используется конфиг extlinux

extlinux/extlinux.conf
ui menu.c32

menu autoboot Welcome to Fedora. Automatic boot in # second{,s}. Press a key for options.
menu title Fedora Boot Options.
menu hidden

timeout 50
#totaltimeout 9000
default Archlinux
label Archlinux
	kernel /zImage_pmos
	append root=/dev/mmcblk0p2 console=tty0 console=tty1 console=ttyS0,115200n8
	fdt /sun8i-a33-q8-laptop-lvds.dtb

Написание device tree для mainline linux

Однако с линуксом пришлось повозиться, был взят самый актуальный на момент экспериментов Linux 6.17.0 (сейчас пересобрал под 7.0-rc3, пока ничего не отвалилось), дисплей с 3d-драйвером lima завелись почти сразу, лишь написал такой device tree:

sun8i-a33-q8-laptop-lvds.dts
#include "sun8i-a33-q8-tablet.dts"
/ {
	model = "Q8 A33 Laptop with 1280x800 LVDS LCD";
	compatible = "allwinner,q8-a33-laptop", "allwinner,q8-a33",
		     "allwinner,sun8i-a33";
};
&panel {
	compatible = "chunghwa,claa154wb03", "panel-lvds";
	width-mm = <344>;
	height-mm = <222>;
	data-mapping = "jeida-18";
	panel-timing {
		/* 1280x800 @60Hz */
		clock-frequency = <68900000>;
		hactive = <1280>;
		vactive = <800>;
		hsync-len = <1>;
		hfront-porch = <128>;
		hback-porch = <16>;
		vsync-len = <1>;
		vfront-porch = <16>;
		vback-porch = <1>;
	};
	port {
		panel_in: endpoint {
			remote-endpoint = <&tcon0_out_lcd>;
		};
	};
};
&tcon0 {
	pinctrl-names = "default";
	pinctrl-0 = <&lcd_lvds_pins>;
};
diff --git a/arch/arm/boot/dts/allwinner/sun8i-a23-a33.dtsi b/arch/arm/boot/dts/allwinner/sun8i-a23-a33.dtsi
index 2af8382cc..2ec074166 100644
--- a/arch/arm/boot/dts/allwinner/sun8i-a23-a33.dtsi
+++ b/arch/arm/boot/dts/allwinner/sun8i-a23-a33.dtsi
@@ -372,6 +372,12 @@ lcd_rgb666_pins: lcd-rgb666-pins {
 				function = "lcd0";
 			};

+			lcd_lvds_pins: lcd-lvds-pins {
+				pins = "PD18", "PD19", "PD20", "PD21", "PD22",
+				       "PD23", "PD24", "PD25", "PD26", "PD27";
+				function = "lvds0";
+			};
+
 			mmc0_pins: mmc0-pins {
 				pins = "PF0", "PF1", "PF2",

Но usb у меня почему-то не в какую не хотел заводиться. Пробовал всяко-разно dts поправлять, в списках рассылок issue на похожие проблемы искать. Однако проблема оказалась в конфиге ядра, ибо я заметил что у postmarketOS usb-хост работал. Я просто взял конфиг ядра linux-postmarketos-allwinner, собрал и всё заработало!

Производительность и энергопотребление

SoC Allwinner A33 имеет 4-х ядерный процессор ARM cortex-a7 (который в mainline linux по умолчанию работает до 1 гигагерца) производительность одного потока которого по моим тестам в 7z b и hardinfo находится между производительностью Intel pentium II и pentium III. Кто скажет «мало» – посмотрите на цену б.у. ноутбука на pentium III или тем более pentium II, которые барыги перепродают как «ретро», который как будто полностью набиты дефицитной и дорогой DDR5 памятью, а не древней SDRAM объёмом от 32 до 128 Мб. Мой ноутбук имеет 512 Мб ОЗУ что является золотой серединой между «ретро» и комфортной работой современного Linux дистрибутива. И кроме почти бесплатности мой ноутбук по сравнению с теми x86 pentium’и (и даже намного более современными) имеет очень низкое энергопотребление. Например во включенном состоянии, потребление от 12V БП ~0,72А (~8W) и это на полной яркости, а полностью отключенным дисплеем всего 0,09А (~1W) и это с запущенным X-сервером!

TODO

Ещё нужно завести wi-fi и звук, первый esp8089 требует драйвер который есть только в виде древнего out-tree модуля ядра из под древнего downstream linux для rockchip, мне удалось заставить скомпилировать этот модуль под linux 7.0-rc3, однако он не хочет инициализироваться. Что-то там eagle_sdio failed with error не работает. Звуковой кодек в теории должен работать на mainline ядре, но на практике не работает. Хотя я ноды в dts все прописал, и в конфиге всё включил, но даже признаков инициализации alsa в dmesg не наблюдаю.

★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)

Это очень круто, хоть плата и слишком... ретро.

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

kirill_rrr ★★★★★
()
Ответ на: комментарий от kirill_rrr

LVDS и так стандартен, его наследник – eDP (wikipedia.org). И с eDP, и с LVDS нет большого зоопарка кабелей и разъёмов. Жаль, что они обратно не совместимы. LVDS бывает одноканальный и двухканальный, а eDP отличается версиями и, сответственно, возможностями.

yars068 ★★★★★
()

Круто заморочился, респект :)

yars068 ★★★★★
()

Вывода neofetch (или аналога) не хватает.

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от mky

Нет, сейчас я мерю по напряжению, китайским вольтметром. Да и у шуруповёртного аккума я не вижу интерфейсного выхода, только + и -.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от gtk3

А в основном он от бп работает.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

В современных в основном используются dsi mipi дисплеи, теоретически их тоже можно повторно переиспользовать но для их инициализации нужен специальный драйвер, индивидуальный для каждой панели. Хорошо если есть исходный код, но у меня лежат парочка устройств digma, prestigio и oysters там используются неизвестные природе панели типа jd9367_ips_qc_wxga. Да и к тому же таких дисплеев «ноутбучного» форм-фактора у меня нет.

gtk3 ★★★★
() автор топика

Молодчик! Приятно было читать.

...синяя изолента...

Наше всё! 😁

sparkie ★★★★★
()

512 Мб ОЗУ что является золотой серединой между «ретро» и комфортной работой современного Linux дистрибутива

Какому дистрибутиву в 2026-м достаточно 512 Мб? Какая графическая среда?

question4 ★★★★★
()

А можно ли то же самое провернуть с Qualcomm Snapdragon 400 MSM8926, который стоит в Samsung Galaxy Tab 4 10.1 ?

Xintrea ★★★★★
()

Без нижней крышки и со сгоревшей матерью

temak
()
Ответ на: комментарий от question4

Оконный менеджер можно любой, они много памяти не тратят (могу порекомендовать свой, но не буду рекламой заниматься). А тулкит - не часть системы, это уже какой прогам нужен. Файрфоксу например нужен гтк, kolourpaint-у и qbittorrent-у - qt.

Гномом

Ну гном то точно лишний, вне зависимости от количества памяти.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

13 лет назад делал себе десктоп из платы от телеприставки MELE A2000G c процессором AllWinner A10. Подключал к внешнему монитору по hdmi. Клавиатура по usb. Сетевая карточка там встроенная,разъем прямо на плате. SATA тоже есть, диск ssd использовал. И до 2018 года активно этим десктопом пользовался для большинства своих задач. В том числе и платы в KiCAD делал и модели под 3д-печать в OpenSCAD и код на Си под микроконтроллеры компилировал. Вполне хватало производительности. Вот кино на таком не посмотреть, да. Но так как киноискусство я люблю не больше чем симфоническую музыку то мне это пофиг. Хотя может быть если заморочиться с видеодрайверами то можно и кино. Я не заморачивался. Зато комп кушал 8 ватт и монитор еще 12. Недостаток у этого компа был ровно один - невозможно запустить единственную нужную мне программу под wine - VMLAB, симулятор микроконтроллеров AVR. Специально для нее приходилось другой комп включать, на интеле. И жрал он полсотни ватт даже на минимуме.

watchcat382
()

Чтобы подключить дисплей, нужно всего лишь правильно припаять шлейф от матрицы к LCD-выходу. Единственный нюанс заключался лишь в том куда его паять, к счастью у этих китайцев используется довольно стандартный 50-пиновый RGB-интерфейс. А схема стандартного noname-планшета лежала на том же sunxi wiki, там же даже нарисовали куда подключать LVDS.

Какое-то вообще нереальное везение - и схема планшета нашлась с распиновкой разъема, и распиновка разъема на матрице, да еще и уровни сигналов подошли.

watchcat382
()
Ответ на: комментарий от yars068

Штатный рассчитан на батарею 3.7V, а мой ноутбук работает от 12V, это более универсальное напряжение. К тому же тот же драйвер подсветки от 3.7-4.2V не заработал бы. А он жрёт довольно много.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от question4

IceWM на Arch Linux ARM, а вообще я примкнул к разработке нового легковесного дистрибутива на базе Alpine Linux, который будет хорошо работать даже на такой конфигурации (или похуже). Может через месяца 2-3 выйдет первая альфа. Если будет спрос, я напишу статью с тестами и как он под капотом работает.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от Merionet

В данном случае это наименьшее зло, weston и labwc работают ещё хуже. А иксы наоборот имеют потенциал для ускорения, если из них выкорчить тормозной glamor.

gtk3 ★★★★
() автор топика

У меня Mi8 валяется, вот бы из него сделать…

pekmop1024 ★★★★★
()
Ответ на: комментарий от gtk3

Но с ходу не компилируется.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от Xintrea

Qualcomm Snapdragon 400 MSM8926

Я не специалист по квалкомам, но скорей всего у него только DSI MIPI, но это планшет, если к нему приколхозить док-клавиатуру, то можно небольшой нетбук сделать.

Посмотрел вики postmarketos https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Tab_4_10.1_Wi-Fi_(samsung-matissewifi), там некий TC358764 MIPI-DSI to LVDS panel bridge упоминается. Возможно, тогда, что-то можно сделать. Но с драйверами под линукс, конечно, выглядит печально.

gtk3 ★★★★
() автор топика
Последнее исправление: gtk3 (всего исправлений: 1)
Ответ на: комментарий от gtk3

Galaxy Tab постарше имеют LVDS, если судить по схемам, которые удалось найти, но именно на четвёрку я этого не смог (как и на сабжевый Oysters, кстати).

P.S. А разве на трансляторы интерфейсов нужны драйверы?

yars068 ★★★★★
()
Последнее исправление: yars068 (всего исправлений: 1)

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

slackwarrior ★★★★★
()
Ответ на: комментарий от hobbit

Глубоко копаешь. Ильф и Петров, конешшшно, бессмертны, но у меня отсылка к мемчикам с Анакином и Падме.

slackwarrior ★★★★★
()

интересная штука. Особенно вот какой интерес - китайцы а вернее Spacemit разродилась таки новым процом K3 с достаточно приличной производительностью RISC-V и более достойной встройкой. И вроде как обещают на этом нечто малинко-образное с 16 а то и с 32 гигами рам, NVME слотом ну и вообще вполне себе достойный девайс. И вот бюджетно засунуть это в формат ноутбука было бы интересно. Полагаю что они и сами засунут но стоить это будет каких-то неадекватных денег (достатончо вспомнить почем проавали первое поколение ноутов на Risc-V).

Qui-Gon ★★★★★
()
Ответ на: комментарий от yars068

P.S. А разве на трансляторы интерфейсов нужны драйверы?

В линуксе есть драйвер, значит для чего-то нужен. У меня ещё на очереди планшет onda v972 лежит с 2К дисплеем, я из него нетбук хочу собрать. А там rgb to edp dridge стоит, ANX9804, драйвер вроде есть, но у меня почему-то чёрный экран с подсветкой. У этого Oysters нет бриджа, lvds напрямую к SoC идёт.

gtk3 ★★★★
() автор топика
Ответ на: комментарий от unclestephen

корпус можно на 3D принтере напечатать

Акторы не допустят.

slackwarrior ★★★★★
()

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

daniyal
()

Представил лица таможенников когда с таким в самолет попрёшься 😂

frunobulax ★★★★
()

На такой девайс да Symbian поставить…

zanac1
()

ты монстер!это просто балдёж!

Neresar ★★
()
Ответ на: комментарий от Merionet

И зачем xorg на такое ставить, как видосы выводить будешь? Через xv?..

VDPAU/VAAPI через Xorg. У этого SoC аппаратное ускорение видео есть.

qwe ★★★
()
Ответ на: комментарий от Merionet

Я знаю про этот заброшенный враппер над v4l2.

Если быть честным, это я не пробовал. А на референсном ядре (3.4) через VDPAU (угу, через Xorg) mpv прекрасно крутит FullHD на Allwinner A20 (на A10 вроде как тоже. Вроде как пробовал, но не уверен. На H3 совсем без напрягов). XV, да, не вытягивает.

qwe ★★★
()

Ох Winxp! Винда на этом сайте упоминается и усматривается, с целью доказать что Линукс лучше:)

REDDERa
()
Ответ на: комментарий от qwe

FullHD я с декодингом на CPU и с выводом в 3d api выводил на арм без активного охлада, только чип получше был. А рассчитаны они на 4к, но без правильного вывода не потянут.

Merionet ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.