Наверное одно из самых недолговечных домашних электронных устройств - это планшет. Недлоговечное не в плане быстрой поломки (хотя и такое за ними водится), а в плане быстрого устаревания.
ПО ориентируется на флагманы, а устройство из среднего или низшего ценового диапазона ещё год назад вполне сносно работавшее вызывает только желание приложить его об стену.
Возможен и вариант частично работающего устройства: например разбит тачскрин, окончательно и бесповоротно сдох аккумулятор, может даже и сам экран разбит.
В любом случае, пока живы “мозги” планшета, можно постараться извлечь из планшета пользу установив на него ОС с ядром Linux.
Ради такого дела был извлечён из закромов планшет промаркированный Icoo D70GT
.
В целом данная методика подойдёт и для других планшетов на базе Allwinner процессоров.
Характеристики я нашел на Icoo D70W:
- Android 4.0.3 (ICS)
- CPU: All Winner A10, 1.2GHz; -GPU: Mali 400
- Оперативная память (RAM): 1GB,DDR3
- Емкость аккум: 3600 мАч
- Встроенная память: 16GB
- Экран: емкостный, 1024 x 600
- WiFi 802.11 b/g/n
- Камера: 1.3 Мпикс (gc0308)
Icoo D70GT попроще. Реальные отличия в характеристиках:
- Емкость аккум: 3100 мАч
- Встроенная память: 8GB
- Экран: емкостный, 1024 x 600, но с плохими углами обзора.
- Камера: 0.3 Мпикс Сенсор gc0308 по данным script.bin с разрешением 640x480.
- WiFi 802.11 b/g/n (0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter)
Максимальная частота в 1.2GHz вызывает сомнения, по крайней мере когда я попробовал поднять максимальную частоту до 1.2Ghz и запустил stress тест планшет очень быстро перестал откликаться на внешние раздражители. Так что пока, примем максимальную частоту за 1GHz.
Но пора переходить к практической стороне вопроса.
Выбор образа Armbian
Выбираем образ Armbian для платы с похожими характеристиками. Можно не угадать с первого раза и планшет не стартанёт.
Я взял образ для Cubieboard 1, причём
не mainline kernel
, а legacy
.
Правда куби уже находится в неподдерживаемых устройствах, но нам и не нужны последние новшевства.
А образ с legacy ядром выбран из тех соображений, что с ним можно использовать script.bin
и он поддерживает NAND память.
Так что на странице загрузок качаем образ Debian_jessie_default.7z.
После скачивания архива, нужно распаковать его и записать образ на microSD карту объёмом не менее 2Gb. Будет большим плюсом, если карта будет обладать хорошей скоростью на чтение и запись.
Как выбрать карту и записать на неё образ можно прочитать в официальной документации Armbian.
Под linux-системами можно воспользоваться штатными средствами.
У меня система автоматически монтирует подключённые диски, так что предварительно необходимо размонтировать карту:
sudo umount /dev/sdc1
Для записи образа удобно воспользоваться утилитой ddrescure
, она наглядно показывает процесс записи на карту:
sudo ddrescue Armbian_5.25_Lime_Debian_jessie_default_3.4.113.img /dev/sdc -D --force
Путь к устройству MicroSD карты зависит от количества дисковых устройств в вашей системе, у меня это /dev/sdc
.
Если ddrescue не установлено, и нет желания или возможности его установить, можно воспользоваться обычным dd
.
sudo dd if=Armbian_5.25_Lime_Debian_jessie_default_3.4.113.img of=/dev/sdc bs=1M
Извлечение script.bin
Для нормальной работы планшета под управлением Armbian требуется файл инициалзиации script.bin он данного устройства.
Пока одной рукой я качал и записывал образ Armbian, другой рукой извлекал этот файл из android-прошивки планшета.
Прежде всего установил adb
. На debian-based системах это делается одной командой:
sudo apt-get install android-tools-adb
После установки, подключил планшет к ПК по USB. Отладка по USB должна быть разрешена.
Зайдя в шелл планшета через adb
sudo adb shell
я сделал дамп раздела nanda
(boot раздел) целиком, потому что смонтировать его непосредственно на планшете
у меня не получилось. Возможно ещё придётся выполнить на планшете su
для перехода под суперпользователя.
# su
dd if=/dev/block/nanda of=/mnt/sdcard/nanda.bin
exit
Следущим шагом скопировал полученный образ раздела:
adb pull /mnt/sdcard/nanda.bin
После этого смонтировал образ из файла локально и извлёк из него script.bin
.
sudo mount nanda.bin /mnt
cp /mnt/script.bin d70gt_script.bin
sudo umount /mnt
Копию я заботливо сохранил d70gt_script.bin.
Редактирование script.bin
Как видно из расширения, этот файл имеет определённый бинарный формат, и не предназначен для редактирования человеком.
Для решения этой проблемы в составе Sunxi tools присутствует конвертер sunxi-fexc
и обёртки для него bin2fex
и fex2bin
.
В образе Armbian эта утилита уже присутствует, для пк её понадобится собрать самостоятельно,
как - описано на странице sunxi tools,
или установить из репозитория ос. например: sudo apt install sunxi-tools
.
Я преобразовал полученный script.bin
в текстовый формат:
bin2fex d70gt_script.bin d70gt_script.fex
и отредактировал полученный файл своим любимым текстовым редактором.
Для начала я изменил два параметра в секциях [usbc0]
и [usbc2]
, что бы usb порты
были доступны сразу после загрузки
(внимательный читатель уже обратил внимание, что fex файл схож по формату с ini файлом).
Параметры называются одинаково:
usb_host_init_state = 0
И всё что требуется - лишь заменить 0
на 1
:
usb_host_init_state = 1
Это укажет, что при загрузке устройство должно активировать USB порты.
Нулевой порт - это OTG порт, а на втором порту подключен WiFi модуль.
В этом планшете порт 1 не используется, поэтому он запрещён в секции [usbc1]
с помощью параметра
usb_used = 0
Для других планшетов может потребоваться больше изменений, что бы получить от планшета максимум.
Подробнее о параметрах fex
файлов можно почитать на странице Fex Guide.
После того, как файл отредактирован, я сохранил его и конвертнул обратно в script.bin
.
fex2bin d70gt_script.fex new_script.bin
Обратите внимание, что я сохранил результат в новый файл new_script.bin, что бы не потерять оригинальный.
Подготовка системы
К этому моменту исходный образ Armbian уже записан на microSD.
Для надёжности, я делаю ещё раз sync
.
Подмонтировав свеже записанный раздел, я заменил script.bin
новым:
sudo rm <sdcard>/boot/script.bin
sudo cp new_script.bin <sdcard>/boot/script.bin
Теперь пришло время настроить сетевой интерфейс.
В файл <sdcard>/etc/network/interfaces
требуется добавить следующие строчки:
allow-hotplug usb0
iface usb0 inet static
address 192.168.99.70
netmask 255.255.255.252
gateway 192.168.99.69
dns-nameservers 8.8.8.8 8.8.4.4
Что бы интерфейс появлелся, необходимо добавить в загрузку модуль ядра g_ether
.
Просто добавляем его в файл <sdcard>/etc/modules-load.d/modules.conf
.
Всё это позволит использовать USB OTG планшета, как виртуальную сетевую карту и соединить таким образом планшет и ПК.
Теперь размонтирую SD карту и безопасно её извлекаю, вставляю карту в планшет.
После включения планшета, или перезагрузки из андроида планшет загрузит Armbian с SD карты.
Всё было сделано верно, и на экране появилось приглашение ко входу.
На скриншоте виден кусок лога, я не разбирался почему, но иногда лог загрузки выводится, а иногда нет.
Подключение по сети
“Почему же сразу нельзя было настроить WiFi?” спросите вы. Да, на более другом планшете можно было это сделать, но не в этом случае.
Всё дело в том, что в планшете используется WiFi модуль Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter, а в использованном нами образе Armbian-а подключаемый модуль ядра для этого устройства присутствует, но собран для архитектуры sun5i, а само ядро для архитектуры sun4i.
Вот эта ма-аленькая деталь, не даёт его нормально использовать.
Поэтому для начала я и стал устанавливать соединение с великой паутиной по тому интерфейсу, который доступен.
Подключил планшет к ПК USB кабелем. Не следует использовать низко-качественные кабели - поимеете кучу проблемм.
В логах dmesg
на ПК можно посмотреть, что было создано новое сетевое устройство:
[718377.956160] cdc_eem 4-1.5:1.0 usb0: register 'cdc_eem' at usb-0000:00:1d.0-1.5, CDC EEM Device, c6:30:ad:0a:36:67
[718378.231525] cdc_eem 4-1.5:1.0 enp0s29u1u5: renamed from usb0
Сперва как usb0, а затем переименовано в enp0s29u1u5
.
На вашей системе оно будет иметь другое имя, а может так и остаться usb0.
Теперь настраиваю новый интерфейс на ПК.
sudo ifconfig enp0s29u1u5 192.168.99.69/30
Но на самом деле не всё так просто оказалось. Возможно это проблема моего планшета, но интерфейс на ПК периодически отваливался и терял настройку. Так что я прописал настройки статического IP через Network Manager, что бы при поднятии интерфейса он автоматически выставлял нужный IP.
Так же разово прописал маскарадинг, что бы наш планшет мог ходить в интернет.
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -s 192.168.99.68/30 -o eth0 -j MASQUERADE
Наконец настало время осуществить торжественный вход на планшет. По SSH.
ssh root@192.168.99.70
Соединение через USB получилось довольно тормозное, так что надо подождать и не паниковать.
По-умолчанию для пользователя root
задан пароль 1234
.
You are required to change your password immediately (root enforced)
____ _ _ _ _
/ ___| _| |__ (_) ___| |__ ___ __ _ _ __ __| |
| | | | | | '_ \| |/ _ \ '_ \ / _ \ / _` | '__/ _` |
| |__| |_| | |_) | | __/ |_) | (_) | (_| | | | (_| |
\____\__,_|_.__/|_|\___|_.__/ \___/ \__,_|_| \__,_|
Welcome to ARMBIAN 5.25 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun4i
System load: 1.08 Up time: 2 min
Memory usage: 3 % of 985Mb IP: 192.168.99.70
CPU temp: 42°C
Usage of /: 82% of 1.2G Battery: 20% charging
Warning: a reboot is needed to finish resizing the filesystem
Please reboot the system as soon as possible
После успешного входа, armbian произведёт предварительную самонастройку,
запросит изменение пароля root
и создание нового пользователя,
расширит раздел на SD карте на весь доступный объём.
Arbian попросил перезагрузить систему, для завершения настройки и я удовлетворил
его желание командой reboot
.
SSH позволяет входить на отдалённую систему не только по паролю, но и по RSA ключам. Это удобнее и безопаснее, так что можно скопировать свой публичный ключ на планшет командой
ssh-copy-id root@192.168.99.70
и облегчить себе процедуру входа.
Дождавшись окончания перезагрузки (это видно на экране планшета, по появлению приглашения ко входу) я опять вошел на планшет и проверил, что мировая сеть доступна.
root@cubieboard:~# ping www.w3.org
PING www.w3.org (128.30.52.100) 56(84) bytes of data.
64 bytes from hans-moleman.w3.org (128.30.52.100): icmp_seq=1 ttl=46 time=126 ms
...
Если по каким-то причинам настроить маскарадинг не удалось, можно установить на ПК
какой-нибудь прокси-сервер, например tinyproxy
. Для обновления системы через apt
его вполне хватит.
Если используется прокси, то надо будет на планшете указать его адрес.
export http_proxy=http://192.168.99.69:8888
Теперь обновляю систему целиком с помощью apt
.
apt update
apt full-upgrade
Потребовалось запастись терпением, что бы дождаться завершения процесса установки. Сама загрузка пакетов происходит достаточно быстро, а вот распаковка пакетов дело долгое. Особенно долго распаковывается ядро и его заголовки.
Перед выполнением команд обновления, можно запустить
screen
илиtmux
. В случае потери соединения процесс обновления не прервётся и к нему можно будет вернутся командойscreen -r
(tmux a
).
Уф, я не засекал, сколько времени длилось обновление системы, но по ощущениям это было от получаса до часа. Время сильно зависит от скорости записи на SD карту.
Теперь можно в очередной раз перезгрузить систему командой reboot
и опять войти на планшет.
В обновлённой системе модуль 8192cu
успешно загрузился.
В этом можно убедится дав команду lsmod | grep 8192cu
.
Так же можно убедиться, что WiFi интерфейс стал доступен:
root@cubieboard:~# iwconfig wlan0
wlan0 unassociated Nickname:"<WIFI@REALTEK>"
Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=0/100 Signal level=0 dBm Noise level=0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Настроить подключение к точке доступа проще всего с помощью ncurses утилиты armbian-config
которая была установлена при обновлении.
Интерфейс у неё простой и понятный, так что не вижу смысла подробно останавливаться на ней.
Отмечу только, что соединение устанавливается посредством NetworkManager и
доступные конфигурации лежат в каталоге /etc/NetworkManager/system-connections/
.
В завершении откроем файл /etc/network/interfaces
и закомментируем одну строчку
ранее добавленную при настройке интерфейса usb0
:
# gateway 192.168.99.69
Если это не сделать, то планшет будет пытаться ходить в интернет через USB сетевое подключение, а это совершенно не нужно.
При желании можно полностью отключить конфигурацию для usb0 но я его оставил, что бы иметь резервный интерфейс для доступа к планшету.
Теперь для чистоты эксперимента перезагрузим планшет (любимая команда reboot
)
и после перезагрузки зайдём на планшет уже по WiFi.
$ ssh root@192.168.11.199
____ _ _ _ _
/ ___| _| |__ (_) ___| |__ ___ __ _ _ __ __| |
| | | | | | '_ \| |/ _ \ '_ \ / _ \ / _` | '__/ _` |
| |__| |_| | |_) | | __/ |_) | (_) | (_| | | | (_| |
\____\__,_|_.__/|_|\___|_.__/ \___/ \__,_|_| \__,_|
Welcome to ARMBIAN 5.31 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun4i
System load: 1.00 1.03 1.05 Up time: 1:04 hour
Memory usage: 4 % of 985MB IP: 192.168.99.70,192.168.11.199
CPU temp: 31°C
Usage of /: 16% of 7.2G Battery: 92% charging
[ General system configuration: armbian-config ]
Last login: Sat Oct 28 22:51:31 2017 from hippo.lan
root@cubieboard:~#
comments powered by Disqus