четверг, 10 сентября 2020 г.

Linux 5.8 на f1c100s и mmdebstrap

Продолжаю играться с Lichee Pi Nano - небольшой платой с 32-битным ARM процессором, поддерживающим Linux. Так как процессор f1c100s не одинок в своей серии, и попиново совместим с f1c200s - поиск по билдам Linux для f1c200s привел к репозитарию: https://github.com/xiaofengvskuye/linux/tree/f1c100s-v5.8 - там готовая Linux 5.8 с поддержкой всех "фишек" данного процессора: LCD экран с тачскрином, USB host, аудиовывод, выход на hdmi, даже, пишут, что можно использовать аппаратное ускорение декодирования видео, если собрать библиотеку cedar

Единственное, чего не хватало в данном репозитории - поддержки тачскрина на ns2009 (можно взять отсюда), и глубина цвета по-умолчанию стояла 16 битов, а не привычные 32. Ну и поддержку нестандартной SPI Flash требуется добавить.

Глубина цвета настраивается в исходниках Linux в файле /drivers/gpu/drm/sun4i/sun4i_drv.c:
  1.     drm_fbdev_generic_setup(drm, 16); 

Необходимо поменять 16 на 32. DTS файл при этом править не требуется. 

Кстати. Так просто тачскрин на Lichee Pi Nano не заработает - I2C (она же TWI) шине не нравится отсутсвие pullup резисторов. Поэтому я на скорую руку наколхозил их сам - взял 4.7К и подтянул к 3.3в:
(да, паять я не умею и за такое качество надо оторвать руки - но работает же).

Для создания полноценной rootfs на этот раз воспользуюсь пакетом mmdebstrap. Данный пакет сам вызывает qemu для запуска бинарников архитектуры armel и настраивает все указанные ему пакеты.

Для работы требуются пакеты qemu-user-static и arch-test:
  1. sudo apt-get install qemu-user-static
  2. sudo apt install arch-test

Сам mmdebstrap лучше взять с git:
  1. git clone https://gitlab.mister-muffin.de/josch/mmdebstrap

Далее запускаем такой скрипт:
  1. sudo mount -i -o remount,exec,dev /media/mamaich/ext4/
  2. sudo rm -rf /media/mamaich/ext4
  3. sudo ./mmdebstrap --variant=minbase --components=main,non-free --include=initscripts,procps,wpasupplicant,wireless-tools,mc,usbutils,net-tools,iproute2,openssh-server,haveged,kmod,busybox,sysvinit-core --arch armel buster /media/mamaich/ext4 http://ftp.debian.org/debian
  4. sudo cp /usr/bin/qemu-arm-static /media/mamaich/ext4/usr/bin
  5. echo
  6. echo Now you are in armel chroot
  7. echo
  8. sudo chroot /media/mamaich/ext4/ /usr/bin/qemu-arm-static /bin/bash -i

Тут папка /media/mamaich/ext4/ - путь, куда, замонтирован EXT4 раздел загрузочной SD карты.
Последняя строка запускает интерактивный shell, в котором можно доставить недостающие пакеты, сделать passwd root, поправить /etc/fstab (сделать / как rw) и /etc/inittab (разрешить getty на serial), настроить конфиг wpa supplicant и тд.

Пакет haveged нужен только для одной цели - сэкономить порядка 30 секунд загрузки при старте sshd. Поэтому после запуска sshd его можно остановить. Я просто добавил строку "/etc/init.d/haveged stop" в конец обработчика команды start в /etc/init.d/ssh

Отмечу, что в текущей версией qemu не работает Debian bullseye - ругается на нереализованные syscall, из-за чего не встают критичные для меня пакеты, поэтому пока только buster. 

Если mmdebstrap ругается на отсуствие arch-test, хотя в реальности он установлен:
    E: install arch-test for foreign architecture support
Необходимо в файле mmdebstrap найти строку:
if (system('arch-test --version>/dev/null') != 0) {
и убрать оттуда "--version", так как данный ключ, по крайней мере у меня, не поддерживался установленным arch-test.

Первая загрузка на устройстве будет идти довольно долго, но в остальном - все работает. 
32 мегабайта RAM, конечно, мало для Debian, приходится включать swap на SD карту или встроенный SPI Flash (который очень медленный) - но я с Алиэкспресс заказал f1c200s с 64 мегабайтами на борту, и если удастся его перепаять на плате, то получится уже вполне достойное устройство.

Установка пакетов через apt непосредственно на устройстве не работает - мало памяти. Но есть выход - через qemu на ПК. 
Чтобы доставить недостающие пакеты, собрать какие-либо приложения из исходников не парясь с кросс-компиляцией необходимо вставить в ПК SD карту и выполнить команды:
  1. sudo mount --bind /dev /media/mamaich/ext4/dev/
  2. sudo mount --bind /sys /media/mamaich/ext4/sys/
  3. sudo mount --bind /proc /media/mamaich/ext4/proc/
  4. sudo mount --bind /dev/pts /media/mamaich/ext4/dev/pts/
  5. sudo chroot /media/mamaich/ext4/ /usr/bin/qemu-arm-static /bin/bash -i

После этого работает и apt update, и, при желании, можно доставить gcc и собрать что-нибудь с исходников. Я ради интереса поставил x.org - работает. 

Комментариев нет: