Поскольку предыдущая статья получилась очень уж объёмной, я решил разбить её на две части.
В этой части я рассмотрю некоторые аспекты настройки системы и устройств ввода, таких как кнопки планшета, тачскрин и G-сенсор.
armbian-config
Я уже использовал утилиту armbian-config
, которая позволяет произвести некоторые
настройки системы.
Пункт Timezone
позволит настроить часовой пояс.
Пункт Install
запускает процедуру установку системы на другие устройства.
Например можно перенести систему на встроенную в планшет NAND память и не использовать для этого SD карту.
Конечно в этом случае, можно будет распрощаться с Android-ом.
WiFi
этот пункт я уже использовал, для подключения к точке доступа.
Hotspot
создать свою точку доступа. В случае планшета - это не актуально.
Hold
полезный пункт, позволяющий предотвратить обновление пакетов ядра и поддержки железа.
Без “заморозки” можно при очередном обновлении окирпичить систему.
Softy
установка пакетов приложений для решения типовых задач.
Monitor
простой лог загрузки системы.
Diagnostics
собирает информацию о системе, для отправки разработчикам Armbian.
Не актуально, по причине специфичности железа, но можно поизучать самому
или отправить друзьям.
Fexedit
редактор script.bin. Но я предпочитаю делать это руками через консоль.
Lowlevel
- время от времени в консоль валятся ошибки, предупреждения или просто информационные сообщения от ядра.
Можно запретить их вывод.
Bootenv
редактор файла /boot/armbianEnv.txt
.
Network
редактор файла /etc/network/interfaces
.
Services
управляет загрузкой системных сервисов при старте системы.
Welcome
управляет информацией, которая будет отображена при логине в систему.
Можно отключить лишнее, например здоровый баннер с надписью Cubieboard
.
Nightly
переключает систему на ветку нестабильных пакетов ночных билдов. На ваш страх и риск.
Switch
позволяет выбрать свежее ядро для системы. Но там отсутствуют интересные возможности, такие как поддержка NAND.
Swap файл
Armbian по умолчанию использует swap-файл /var/swap. Т.е. когда оперативной памяти будет не хватать, система начнёт выгружать данные на SD карту или NAND память, что медленно и не полезно для таких устройств.
Что бы отключить использование свопа необходимо в файле /etc/fstab
закомментировать строчку
#/var/swap none swap sw 0 0
и перезагрузить систему.
Имя системы
После установки имя системы cubieboard
.
Что бы изменить его, надо отредактировать файл /etc/hostname
и перезагрузить систему.
Устройства планшета
В принципе, программа минимум уже достигнута:
- Работает WiFi.
- Работает дисплей.
Кстати, что бы посмотреть на экране, что нибудь повеселее, чем приглашение ко входу можно дать из консоли SSH команду:
htop > /dev/tty1
И понаблюдать за загруженностью системы уже на экране планшета.
А можно быстренько протестировать фрейм-буфер командой которая заполнит экран мусором:
dd if=/dev/urandom of=/dev/fb0
dd: writing to ‘/dev/fb0’: No space left on device
9601+0 records in
9600+0 records out
4915200 bytes (4.9 MB) copied, 3.24301 s, 1.5 MB/s
И почистим его:
dd if=/dev/zero of=/dev/fb0 bs=64K
dd: error writing ‘/dev/fb0’: No space left on device
76+0 records in
75+0 records out
4915200 bytes (4.9 MB) copied, 0.0180896 s, 272 MB/s
Заодно можно оценить скорость заполнения.
Но отложим работу с дисплеем на потом, а займёмся другими устройствами планшета.
G-sensor
Он же акселерометр. В планшете установлен чип mma7660
.
Для его использования достаточно подкючить модуль ядра:
modprobe mma7660
Если всё успешно, то в каталоге /dev/input
появится дополнительное устройство event*
(в моём случае event2
),
а так же устройство js*
(js0
). Т.е. с точки зрения ядра - акселерометр - это джойстик.
Что бы акселерометр был доступен сразу после загрузки системы следует добавить строчку mma7660
в файл /etc/modules-load.d/modules.conf
.
Проверить работу акселерометра можно командой
evtest /dev/input/event2
Можно так же установить пакет apt install joystick
и дать команду jstest --normal /dev/input/js0
,
но он подтянет за собой ещё клиентские библиотеки X-сервера и некоторые звуковые библиотеки.
Touch screen
В данном планшете используется контроллер ёмкостного тачскрина Goodix GT801
и это ещё одна причина, почему понадобилось legacy ядро - для него есть модуль.
Что бы модуль заработал, потребуется внести изменения в script.bin
.
Я внёс следующие правки в d70gt_script.fex
:
- Секцию
[ctp0_para]
переименовал в[ctp_para]
. - Имя чипа
ctp_name = "Goodix-TS-1GT801"
переименовал вctp_name = "Goodix-TS"
. - Изменил параметр
ctp_screen_max_x = 1280
. - Изменил параметр
ctp_screen_max_y = 768
.
Размеры тачскрина не соответствует реальным размерам дисплея. Это сделано специально,
поскольку драйвер в составе armbian понимает только два разрешения: 800*480
и 1280*768
.
Конечно можно взять исходные коды ядра, добавить в драйвер нужное нам разрешение
и пересобрать модуль. Но это я отложил на потом.
Теперь можно конвертировать скрипт fex2bin d70gt_script.fex /boot/script.bin
и перезагрузить планшет.
Проверим, что модуль успешно загружается:
modprobe goodix_touch
Так же проверим сообщения ядра:
dmesg
[ 559.234127] ===========================goodix_ts_init=====================
[ 559.239105] ctp_fetch_sysconfig_para.
[ 559.248256] ctp_fetch_sysconfig_para: after: ctp_twi_addr is 0x55, dirty_addr_buf: 0x55. dirty_addr_buf[1]: 0xfffe
[ 559.252615] ctp_fetch_sysconfig_para: ctp_twi_id is 2.
[ 559.257551] ctp_fetch_sysconfig_para: screen_max_x = 1280.
[ 559.271373] ctp_fetch_sysconfig_para: screen_max_y = 768.
[ 559.284798] ctp_fetch_sysconfig_para: revert_x_flag = 1.
[ 559.298069] ctp_fetch_sysconfig_para: revert_y_flag = 0.
[ 559.311752] ctp_fetch_sysconfig_para: exchange_x_y_flag = 0.
[ 559.328569] goodix_ts_init: after fetch_sysconfig_para: normal_i2c: 0x55. normal_i2c[1]: 0xfffe
[ 559.330023] ctp_reset.
[ 559.361478] ctp_wakeup.
[ 559.572996] i2c-core: driver [Goodix-TS] using legacy suspend method
[ 559.588266] i2c-core: driver [Goodix-TS] using legacy resume method
[ 559.603840] ctp_detect: Detected chip Goodix-TS at adapter 2, address 0x55
[ 559.623069] ===============================GT801 Probe===========================
[ 559.636671] Begin goodix i2c test
[ 559.647005] ===== goodix i2c test ok=======
[ 559.662814] input: gt80x as /devices/virtual/input/input4
[ 559.720814] ctp_set_irq_mode: config gpio to int mode.
[ 559.735799] ctp_set_irq_mode, 214: gpio_int_info, port = 8, port_num = 21.
[ 559.748347] INTERRUPT CONFIG
[ 559.756994] Read Goodix version
[ 559.832230] Goodix-TS 2-0055: GT80X Version: GT801_1R08_2011121501_Goodix_Tech
[ 559.852013] ========Probe Ok================
Механические клавиши
Поддержка клавиш планшета осуществяется загрузкой модуля sun4i_keyboard
.
Система будет воспринимать их как клавиатурные.
Проверить их функционирование можно командой:
evtest /dev/input/event4
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "sun4i-keyboard"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 28 (KEY_ENTER)
Event code 102 (KEY_HOME)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 139 (KEY_MENU)
Event code 217 (KEY_SEARCH)
Properties:
Testing ... (interrupt to exit)
Event: time 1509366604.502185, type 1 (EV_KEY), code 1 (KEY_ESC), value 1
Event: time 1509366604.502204, -------------- EV_SYN ------------
Event: time 1509366604.744340, type 1 (EV_KEY), code 1 (KEY_ESC), value 0
Event: time 1509366604.744354, -------------- EV_SYN ------------