LINUX.ORG.RU

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

 , , , ,


4

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 ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.