Используем flashrom
Для прошивки SPI Flash можно пользоваться специализированными программаторами но при отсутствии таковых можно применить случайно оказавшийся под рукой микрокомпьютер с Linux на борту. Например OrangePi One с Armbian или RaspberryPi.
Подключение
Внимание! все соединения необходимо производить при отключенном питании.
Так что сделаем это заранее.
TODO Здесь должно быть фото
TODO А здесь табличка
Сборка
Качаем свежие исходники flashrom. На данный момент это версия 0.9.9.
Распаковываем полученный файл:
tar xvf flashrom-0.9.9.tar.bz2 cd flashrom-0.9.9
В armbian уже установлен компилятор, так что можем сразу запустить сборку:
make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no
Параметры указывают не использовать PCI и USB программаторы.
Если же поддержка USB программаторов нужна, то предварительно установим библиотеку для работы с USB:
apt-get install libusb-1.0-0-dev
И библиотеку для работы с устройствами на базе FTDI если ваш программатор основан на этой микросхеме:
apt-get install libftdi-dev
make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no
В случае успеха у нас появится бинарный файл.
ls -l flashrom -rwxr-xr-x 1 root root 322308 May 12 15:45 flashrom
file flashrom flashrom: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=69769b4071bbff19ebe936fecb11fe36a0cc5c5f, not stripped
Прошивка
Для начала проверим видит ли программатор подключённый чип.
flashrom -p linux_spi:dev=/dev/spidev0.0 flashrom v0.9.9-r1955 on Linux 3.4.112-sun8i (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop. OK. No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically.
flashrom -p linux_spi:dev=/dev/spidev0.0 flashrom v0.9.9-r1955 on Linux 3.4.112-sun8i (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop. OK. Found Spansion flash chip "S25FL032A/P" (4096 kB, SPI) on linux_spi. No operations were specified.
На сладкое
Во flashrom наконец добавили поддержку “народного” программатора на базе микросхемы CH341A
Supported USB devices for the ch341a_spi programmer: Vendor Device USB IDs Status Winchiphead (WCH) CH341A 1a86:5512 OK
К сожалению поддерживается только SPI но не I2C.
Установка Google Chromium и Flash на ARM устройства Linux
Предлагается быстрый и легкий метод для установки браузера Google Chromium (open source вариант браузера Chrome) в Linux для ARM (armel и armhf) устройств — например, Raspberry PI, ODroid, Cubieboard и т.д. Проблема в том, что в большинстве дистрибутивов Linux, например, Debian, Kali Linux официальный пакет Chromium доступен только для архитектур amd64 и i386. Версии для armhf и armel отсутствуют. Сборка пакета Chromium, например, из родного депозитария Debain не срабатывает, т.к. в коде отсутствуют инструкции по сборке под arm. Вариант от Google тоже компилируется с ошибками. Судя по отзывам в Интернете, возможно, удастся настроить кросс-платформенную сборку под ARM на обычных x86 компьютерах, либо попытаться сделать сборку непосредственно на arm, что может занимать более суток, и не всегда заканчивается успешно. Мне например, так и не удалось собрать пакет из исходников непосредственно на arm. Пример установки приведен для Kali Linux 1.0.7 (форк Debian Wheezy) под ODroid, для других Debian-систем всё аналогично.
Установка Chromium
Установка будет происходить наиболее простым способом — путем установки в систему бинарного установочного пакета .deb — такой способ применим для любой системы типа Debian. Установочный пакет для старой версии Chromium можно скачать с сайта Marco. Для новых версий Chromium рекомендуется использовать репозитори Ubunty. Там же указаны все зависимости пакета. Для моей системы необходимо было еще загрузить пакет chromium-codecs-ffmpeg-extra.
dpkg -i chromium-codecs-ffmpeg-extra_34.0.1847.116-0ubuntu~1.12.04.0~pkg884_armhf.deb chromium-browser_34.0.1847.116-0ubuntu~1.12.04.0~pkg884_armhf.deb
Устранение отсутствующих зависимостей
При установке пакетов может возникнуть проблема «unmet dependencies». В моем случае в системе была установлена старая (для Chromium, но последняя из ветки stable) версия пакета библиотеки libc6. Новая версия пакета была доступна только для ветки jessie (testing). Для обновления этого пакета необходимо добавить соответствующие репозитории в /etc/apt/sources.list:
deb http://ftp.us.debian.org/debian testing main contrib non-free deb-src http://ftp.us.debian.org/debian testing main contrib non-free deb http://ftp.debian.org/debian/ jessie-updates main contrib non-free deb-src http://ftp.debian.org/debian/ jessie-updates main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free
Debian обычно содержит файл предпочтений, который корректно обрабатывает пакеты из разных версий таким образом, что стабильные пакеты имеют более высокий приоритет по сравнению с остальными. Это гарантирует, что внесенные выше изменения не переведут полностью всю систему на ветку testing. В моей версии Kali Linux такого файла предпочтений не было, поэтому пришлось его создать вручную — файл /etc/apt/preferences.d/main.pref со следующим содержимым:
Package: * Pin: release n=kali Pin-Priority: 350 Package: * Pin: release n=kali-bleeding-edge Pin-Priority: 300 Package: * Pin: release n=jessie Pin-Priority: 10
Здесь первые 2 блока описывают, что внутренние репозитарии Kali Linux имеют более высокий приоритет, чем пакеты Debian Jessie. Если Вы используете Debian Wheezy, то вместо этих 2 блоков, нужно оставить только один и указать в нем n=wheezy. После сохранения изменений нужно обновить информацию о репозитариях:
apt-get install libc6 -t testing
В случае наличия других зависимостей, они устраняются аналогичным образом. После этого можно заново попытаться установить Chromium.
Установка поддержки Flash
Традиционный плагин flashplugin-nonfree в Linux не доступен под ARM устройства. Необходимо использовать плагин PepperFlash. Он свободно не распространяется Google, но его можно скачать с сайта Lee Harris PepperFlash-12.0.0.77-armv7h.tar.gz. Это плагин для ARMv7, взятый из Google OS с устройства Chromebook. Для тех, кто не доверяет сторонним источникам, могут попробовать выгрузить плагин самостоятельно. После скачивания архива нужно распакавать и положить папку Pepperflash в /usr/lib. После этого, нужно внести следующие изменения в конфигурационный файл Chromium, который располагается в /etc/chromium-browser/default. Конфигурационный файл нужно изменить так, чтобы в нем была следующая строка:
CHROMIUM_FLAGS=»—ppapi-flash-path=/usr/lib/PepperFlash/libpepflashplayer.so —ppapi-flash-version=12.0.0.77″
Запуск Chromium с правами root
По умолчанию Chromium отказывается запускаться с правами root. Это можно исправит в конфигурационном файле /etc/chromium-browser/default.Конфигурационный файл нужно изменить так, чтобы в нем была следующая строка:
CHROMIUM_FLAGS=»-password-store=detect -user-data-dir»
Если при этом требуется поддержка FLASH, тогда строка будет иметь вид:
CHROMIUM_FLAGS=»—ppapi-flash-path=/usr/lib/PepperFlash/libpepflashplayer.so —ppapi-flash-version=12.0.0.77 -password-store=detect -user-data-dir»
Результаты
Имеется Chromium, который работает с поддержкой Flash на ARM-устройстве. Тестирование проводилось на ODROID-XU (armhf) с ОС Kali Linux 1.0.7. Скриншот:
Поддерживается функция авторизации Google, синхронизация всех закладок, истории и т.д., поддерживаются все расширения.
Hardware & Software Useful bits
Until now I had been using Gnash, the extremely poor open substitute of Flash, which is actually unusable for any real purposes.
A couple weeks ago I read that it could be possible to have Flash on ARM by using the Flash Player that Adobe develops for the Chrome OS (used on the Samsung Chromebook ARM laptops).
So I found a page (see Reference below) that described what to do and, most importantly, provided the ARM compiled library that contains the official Flash Player.
Hence, the steps to have Flash up and running on the Chromium web browser in Linux (tested on Xubuntu 12.10) are:
1) Download compressed library
2) Copy the .so file to /usr/lib/
3) Change the Chromium shortcut from just:
chromium-browser —ppapi-flash-path=/usr/lib/libpepflashplayer.so —ppapi-flash-version=11.5.31.105 —ppapi-flash-args=enable_hw_video_decode=0,enable_stagevideo_auto=0,enable_trace_to_console=0
4) Open Chromium and enjoy the real Flash, only limited by the maximum speed of your stick!
UPDATE: Popping noises
When I had a site with Flash open while listening to a local music file, or watching flash videos, I heard a ‘pop’ every few seconds, which stopped upon closing chromium. Running chromium from the commandline yielded this error along with every pop:
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Solved it by going into the PulseAudio Volume Control and making sure, on the last tab, that the profile was Analogic Stereo Duplex and KEEPING OPEN (. ) the PulseAudio Volume Control app, which for some reason makes the noises stop and a new line appears below the one above:
ALSA lib pcm_dsnoop.c:612:(snd_pcm_dsnoop_open) unable to open slave