Pull to refresh
Газпромбанк
Очень большой банк

Как пропатчить планшет под OpenSuSE

Level of difficultyEasy
Reading time9 min
Views9.2K

Всем привет, меня зовут Иван. Хочу поделиться опытом, который может пригодиться тем, кто захочет сделать такую же странную вещь, как и я, — установить OpenSuse на планшет с Windows.

Наступила осень, на улице холодно и мокро, велосипед поставлен на зимовку. Хочется сидеть на диване и серфить в Интернете под расслабляющую музыку. А где проблема? А она в том, что планшет был пожертвован детям, а жена свой не даст. Значит, пришло время прикупить новый.

Муки выбора и «хитрый» план

Решение принято, но что брать? Наступает тот самый момент, когда гик должен выбрать новый девайс. Скажу честно: продукцией Apple не интересуюсь и даже не рассматривал в качестве варианта. Казалось бы, можно взять Android и радоваться, но не тут-то было. Хочется чего-то… 

И тут в выдаче всплывает недорогой Irbis TW104 с Windows. Хм, да он еще и на Intel Atom. Получается это мини-ноутбук в формфакторе планшета. Беру! Поставлю на него свой любимый OpenSuSE, буду на диванчике в родном окружении чилить. 

Итого: процессор Intel Atom x5-Z8350 (4 ядра), 1.44 ГГц, 4 Гбайта ОЗУ, разъем под microSD (смогу оставить Windows и сделать dual boot), встроенная в чехол клавиатура с мышью и вроде бы разъем USB, но, похоже, через кабель OTG. Докидываю в корзину OTG-кабель и какую-то microSD на 128 Гбайт из тех, что пошустрее. 

Анбоксинг и первый запуск 

Сутки мучительного ожидания позади — и вот новая игрушка у меня в руках. Первые впечатления: увесист, пухловат (современные Android‑планшеты, конечно, тоньше и легче), но на ощупь приятен, а с прицепленной клавиатурой превращается в ноутбучек. Мне нравится, желания вернуть не возникло.

Включаю, появляется логотип фирмы‑производителя, затем Windows радостно приветствует меня и не менее радостно предлагает разрешить передавать всякое в Microsoft. Дохожу до создания учетной записи, и тут он требует почту, чтобы сделать учетную запись Microsoft. Гуглю: надо было пропустить подключение к Wi‑Fi, тогда Windows дает завести локальную учетную запись.

Зажимаю кнопку питания, перезапускаю устройство, и, о чудо, — девайс предлагает завести локальную учетную запись. Вроде все работает, нести устройство в гарантию не надо, попробуем поставить Linux.

Попытка установки 1: неудача

Итак, приступаю к установке. Первым делом качаю OpenSuSE 15.5 Leap. Как оказалось, зря, дальше расскажу почему. Если захотите повторить мой путь, качайте сразу Offline Image.

Небольшое пояснение, у OpenSuSE есть два типа дистрибутивов:

  • Leap — версия OpenSuSE из пакетов SUSE Linux Enterprise, стабильный дистрибутив;

  • Tumbleweed — версия из пакетов, собранных на основе последних наработок сообщества, так называемый rolling release.

Я, естественно, выбираю тот, что постабильней.

Заливаю с Unetbootin дистрибутив на флешку. Собираю конструкцию из нее и OTG‑кабеля, захожу в UEFI, чтобы поменять порядок загрузки, и сталкиваюсь с первым приколом — экран повернут набок. Немного поразмышляв о сооружении системы зеркал, чтобы «выпрямить» картинку, решаю, что пока потерплю.

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

Попытка 2: опять мимо

Имидж скачан и залит на флешку, запускаю установку — и снова получаю повернутую картинку, а еще инвертированную мышь и неработающий тачпад.

Перемещаться по кнопкам можно с помощью Tab, выбирать кнопки и поля ввода — пробелом.  Для подтверждения выбора — Enter.  

Инсталлятор предлагает удалить раздел Windows и поставить систему на него, такой вариант не подходит. Отказываюсь от предложения системы и создаю разметку с / на microSD. После перезагрузки во время установки снова грузится Windows. В UEFI загрузчик OpenSuSE виден, но при попытке оверрайда запуска из UEFI все равно грузится Windows.

Может, из-за Secure Boot? Отключаю (кстати, тут мне повезло: отключенный Secure Boot, возможно, сэкономил мне кучу времени позже), но все равно грузится не то. Пробую рассуждать логически: вероятно, все дело в том, что у меня /boot на microSD, и надо попробовать перенести этот раздел «внутрь».

Попытка 3: удача (но с оговорками) 

Заново запускаю инсталлятор, дохожу до раздела с разметкой и понимаю, почему инсталлятор предлагал удалить раздел с Windows полностью — раздел зашифрован Bitlocker, так просто ресайз ему не сделать. Ctrl-Alt-Del. 

Загрузка в Windows, лезу в раздел «Настройки», нахожу там  в подразделе «Обновление и безопасность» пункт Bitlocker и жму «Расшифровать». Полчаса на чаек и посмотреть в окно в ожидании. После расшифровки — снова загрузка инсталлятора OpenSuSE, разметка /boot-раздел на встроенной Flash, и / на microSD. 

В целом догадка оказалась верной. После установки встречает повернутый набок GRUB.

Победа? Нет. Не монтируется /. Меня встречает печальная консоль Single User. Так, если инсталлятор видел microSD, а установленная система — нет, проблема понятна: ядро Linux при запуске монтирует специальный CPIO-архив c маленьким RAM-диском, в котором лежат драйвера устройств. Тот самый initrd. В этот маленький архив складывают специфичные драйвера SCSI- и RAID-контроллеров, чтобы была возможность разместить корневой раздел на RAID-массиве или SCSI-диске.

Похоже, набор модулей, подгружаемый инсталлятором, несколько побольше и включает модули, которые позволяют видеть microSD. Снова загружаю инсталлятор, перебирая комбинациями клавиш (Ctrl-Alt-F1, Ctrl-Alt-F2) терминалы, и нахожу тот, в котором можно понабирать команды. 

Командой lsblk узнаю, что microSD определилась как mmcblk2. Дальше командой lsmod | grep mmc ищу модули, которые отвечают за mmc. 

Дополнительно просто копаюсь в списке модулей и выбираю те, которые мне понравились (по ощущениям, их тоже нужно подгрузить, ну так, на всякий случай, чтобы второй раз не вставать), потом выверю список. Честно. :)

В итоге получается так:

sdhci 
sdhci-acpi
mmc_core
mmc_block
dw_dmac_core 
dw_dmac
i2c_designware_platform 
i2c_designware_core

Теперь надо добавить эти модули в Init RAM Disk. В дистрибутивах RPM Based сейчас чаще всего используется утилитка dracut, в дистрибутивах на Debian, кажется, mkinitramfs. 

Создаю в /mnt директорию sd:

mkdir /mnt/sd

Дальше монтирую в эту директорию / c sd-карточки: 

mount /dev/mmcblk2p1 /mnt/sd

А потом монтирую /boot, который ранее разместил на встроенном flash:

mount /dev/mmcblk0p6 /mnt/sd/boot

Ну, и меняю корень на /mnt/sd:

chroot /mnt/sd

Теперь можно и dracut запустить, чтобы собрать Init RAM Disk с нужными модулями: 

dracut -f --force-drivers "sdhci sdhci-acpi mmc_core mmc_block dw_dmac_core dw_dmac i2c_designware_platform i2c_designware_core"

Перезапускаю систему через Ctrl-Alt-Del. Победа! Система загружается. Теперь надо добавить на постоянку в конфигурацию dracut, чтобы после обновления ядра не отвалился снова корневой раздел. 

Создаю файл /etc/dracut.conf.d/11-mmc.conf,

в него вписываю драйвера:

add_drivers+="sdhci sdhci-acpi mmc_core mmc_block dw_dmac_core dw_dmac i2c_designware_platform i2c_designware_core"

Готово.

Настройка оборудования: экран

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

Начну с простого: надо повернуть экран в графическом режиме. Кнопкой Win открываю меню запуска программ, затем консоль. Командой xrandr ищу, куда подключен экран — DSI-1.

Открываю файл /etc/X11/xorg.conf.d/50-monitor.conf.

Раскомментирую секцию настроек монитора и подставляю идентификатор монитора DSI-1. Ну, и добавляю настройку ротации экрана вправо. 

Section "Monitor"
  Identifier "DSI-1"
  Option "Rotate" "right"
EndSection

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

Открываю /etc/default/grub и в переменную GRUB_CMDLINE_LINUX добавляю fbcon=rotate:1

Дальше командой grub2-mkconfig -o /boot/grub2/grub.cfg пересобираю конфигурацию GRUB. Все, теперь шея не будет болеть и при работе в текстовой консоли. 

Настройка оборудования: сеть

Теперь одна из главных задач — поднять сеть. Чтобы не возиться с поиском драйвера по айдишникам оборудования, загружаюсь в Windows и выясняю, что сетевой адаптер — это rtl8723ds. Драйвер, слава Интернету, есть. Сделан энтузиастами и его можно собрать из исходников: https://github.com/lwfinger/rtl8723ds.git

Копирую исходники на флешку и переношу на планшет. Дальше вроде бы все просто:

make
make install

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

uname -a
sudo zypper info kernel-default-devel

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

Помните, я выше писал, что с отключением Secure Boot мне повезло? Вот почему: после одной из перезагрузок я решил вернуть Secure Boot, но после его включения перестала работать сеть. Покурив форумы, нашел ветку с точно такой же проблемой работы драйвера в сочетании с Secure Boot. И решения пока не найдено.

Настройка оборудования: тачскрин

Теперь пришло время запустить тачскрин. Какой тачскрин установлен, можно тоже подсмотреть в Windows. Благо, энтузиасты и здесь не остались в стороне. Клонирую репозиторий: https://github.com/onitake/gslx680-acpi.git

make
make install

Перезагрузка, не работает. В dmesg — ошибка подгрузки firmware. Дело в том, что контроллер тачскрина универсальный, а в прошивке указываются параметры конкретного экрана и модели. Сами прошивки и утилиты по работе с ними есть в репозитории: https://github.com/onitake/gsl‑firmware.git

При попытке подсунуть firmware от другой модели тачскрин заработал, только координаты были сбиты напрочь. Придется делать свою прошивку. Монтирую раздел c Windows и в драйверах в директории windows ищу файл SileadTouch.sys. Дальше скармливаю файл драйвера утилите scanwindrv из репозитория gsl-firmware. 

gsl-firmware/tools/scanwindrv ./SileadTouch.sys

На выходе получается файл firmware_00.fw из драйвера Windows. После чего другой утилитой gsl-firmware/tools/fwtool генерирую firmware для драйвера на Linux. Набор параметров экрана пришлось подыскивать методом тыка. Я делал это так: нажимал на экран в левом нижнем углу и в режиме выделения тянул рамку в правый верхний угол. Если рамка отставала от пальца, то корректировал размер в плюс, если обгоняла — в минус. 

Копирую firmware:

cp silead_ts.fw /lib/firmware/
cp silead_ts.fw /lib/firmware/silead/silead_ts.fw
cp silead_ts.fw /lib/firmware/silead/mssl1680.fw

Тачксрин работает, можно уже установить виртуальную клавиатуру и посидеть в ютубчике? Не получится: звука нет, Bluetooth не работает. 

Настройка оборудования: звук и Bluetooth

На самом деле запустить встроенный звук было проще всего. Ровно одна команда:

zypper install sof-firmware

Судя по описанию чипа сетевой карты, Bluetooth в нее встроен. Драйвер уже установлен, значит, надо копать, почему Bluetooth не запускается.

Команда dmesg | egrep "(Blue|blue|rtl)", чтобы посмотреть все ошибки, связанные с Bluetooth: снова не хватает Firmware, благо, на этот счет уже побеспокоились ребята из комьюнити дистрибутива Armbian.

Клонирую репозиторий https://github.com/armbian/firmware.git, копирую файлы: 

cp firmware/rtl_bt/rtl8723_ds* /lib/firmware/rtl_bt/

При загрузке драйвер пытается подгрузить конфиг из файла rtl8723ds_config-OBDA8723.bin,  делаю символьную ссылку.

ln -s rtl8723ds_config.bin rtl8723ds_config-OBDA8723.bin 

Тут обратите внимание, что O в имени файла rtl8723ds_config-OBDA8723.bin — буква, а не ноль. Пока не понял, проковырялся где-то час, матерясь и не понимая, почему не подтягивается конфигурация. Перезагружаюсь, Bluetooth работает. Почти победа, только инверсированная мышь раздражает. 

Настройка оборудования: мышь (не побеждено)

Пришло время разобраться с инвертированной мышью. Первым делом, по заветам Интернета, пробую решить проблему через настройку InputClass в X. Безрезультатно. Никакие Option "InvX " "true " и Option "InversionX" "true " не срабатывают. Промучавшись несколько часов, перехожу в итоге к гайдам с методами, выглядящими как-то «костыльно».  

Есть утилитка xinput, которая позволяет управлять опциями устройств ввода. В том числе есть матрица трансформации координат мыши. Похоже, с помощью этой матрицы можно трансформировать координаты мыши не только под прямыми углами, используя дробные числа. 

И вроде даже получилось заставить курсор двигаться правильно такой вот командой:

xinput set-prop 13 --type=float "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1

Только, к сожалению, клики мыши остались инвертированными. 

Попробую копать в сторону xinput. Оказывается, в X можно теперь создать несколько курсоров и «цеплять» их к разным устройствам. Это ли не мечта детства — погонять с товарищем в «Героев», да так, чтобы не передавать друг другу мышку и не ругаться о том, у кого ладони потные.

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

Получается вот такой костыльный скриптик:

#!/bin/bash
xdotool mousemove 1000000 100000
xinput create-master mymouse
xinput reattach "SIGMACHIP USB Keyboard Mouse" "mymouse pointer" 
xinput reattach "Silead GSLx680 Touchscreen" "mymouse pointer"

Добавляю этот скриптик в автозагрузку KDE. Вроде работает, но «такое»: в некоторых приложениях новый курсор ведет себя странно, а иногда старый внезапно выскакивает из зоны невидимости. В общем, костыль получился совсем кривой. Но исследовательский запал исчерпан, хочется уже полежать с планшетом на диване, а допилить все немного позже. Надеюсь, что-то из этой статьи будет кому-нибудь полезно. 

Tags:
Hubs:
Total votes 41: ↑41 and ↓0+41
Comments29

Articles

Information

Website
www.gazprombank.ru
Registered
Founded
Employees
over 10,000 employees
Location
Россия