Запуск Linux на планшете с SoC Allwinner A10 на борту
Предыстория
Приобрел я себе планшет на SoC Allwinner A10 (sun4i — кодовое название процессора AllWinner A10 ARMv7-A архитектуры семейства Cortex ядро A8). Сначала игрался с ним на Android 2.x потом на 4.x, но со временем мне стало этого мало. Да еще начали выпускать миникомпьютеры на основе этой SoC с Linux на борту. Я подумал: «Хм, а чем мой планшет хуже?» и занялся делом. Как оказалось, за меня уже все сделали, и дела делать не пришлось:
- Ядро оптимизировали для данной платформы
- Загрузчик оптимизировали к этой платформе
- Вышел новый порт debian armhf.
Осталось только все это дело сконфигурирован и собрать.
Среда
Система — ArchLinux x86-64. Где найти и как устанавливать окружение для сборки описывать не буду, в интернете и так достаточно этой информации. Да и большинству это не зачем, я приложу все необходимое собранным.
«Кухня» у меня такая:
- qemu-user-static — чтобы можно было chroot’иться в rootfs, в репах не было, пришлось из репозитория debian доставать и собирать свой пакет. Все это дело необходимо для запуска arm elf исполняемых файлов на машине с другой архитектурой, в данном случае — на моей.
- gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-70) — Кросскомпилятор GCC ARM. Может и старый, но не подводит пока меня. Вам же советую поставить свеженький кросскомпилятор от linaro.
Процесс загрузки SoC
Т.е. Загрузка начинается с SD карты, если там нету загрузчика, продолжается с NAND Flash.
Согласно документации к загрузчику allwinner-uboot структура SD карты должна выглядеть таким образом:
начало | размер | описание |
0 | 8KB | Unused, available for partition table etc. |
8 | 24KB | Initial SPL loader |
32 | 512KB | u-boot |
544 | 128KB | environment |
672 | 352KB | reserved |
1024 | Free for partitions |
Сборка u-boot
Собирать не обязательно, sun4i-spl.bin u-boot.bin можно скачать здесь.
Собираем uboot-allwinner:
Запись загрузчика
Внимание, будьте осторожны, не перепутайте устройство SD карты с другими носителями. Если вы не понимаете того, что делаете, то лучше не делайте.
$
Разбиваем MicroSD накопитель
Внимание, в результате операции данные на MicroSD накопители будут утеряны, сохраните все необходимое в надежное место.
- Нам нужно создать два раздела обязательно.
- Первый раздел — раздел с файлом конфигурации железа (evb.bin) и ядром (uImage). Должен начинаться с 2048 сектора, быть размером 32MB-100MB и иметь файловую система FAT ( тип раздела FAT) либо ext2/3 ( тип раздела 83 ).
- Второй раздел — раздел rootfs, собственно вся система, размер раздела желательно сделать в пределах 1GB-4GB, файловая система строго ext4, тип раздела — 83.
- Можно сделать еще swap раздел, по желанию.
- Оставшееся место используете для себя. Я создал раздел для своих данных, можно примонтировать в /home/
Вот, как я разбил свою 16GB карточку:
Согласно пунктам, описанным выше, разбиваем MicroSD накопитель.
Я, надеюсь, те, кто пользуется linux, умеет использовать fdisk.
Форматируем:
Монтируем в нужное место:
Сборка ядра
Ядро можно не компилировать, я приложил снизу готовое ядро с модулями.
Вместо gconfig можно использовать на вкус xconfig(qt интерфейс) или menuconfig (консольный интерфейс). Не забываем включить необходимые драйвера в ядро а также необходимые вам фичи. Читайте подсказки к параметрам.
Советую не забыть про модули тачскрина и фс(fat, ntfs).
Аргумент -j задает количество одновременных потоков компиляции. Опытным путем установлено, что потоков должно быть на единицу больше, чем ядер в процессоре.
Флаги оптимизации взяты из cтатьи ValdikSS. Честно говоря, ядро с ними скомпилировалось. Но я пока не устанавливал его на SD флеш карту.
Установка rootfs
Как загружать с помощью debootstrap начальную rootfs описывать не буду, так как это достойно еще одной статьи. Я лучше прикладу готовую rootfs Debian Wheezy ARMHF, а вы пользуйтесь.
Rootfs необходимо распаковать с сохранением атрибутов на второй раздел SD, так как таким образом сконфигурирован по умолчанию u-boot (про конфигурациию можно почитать здесь.
Качаем Debian Wheezy Rootfs и распаковываем:
Кстати, здесь есть и модули к ядру 3.0.36+. Также имеется lxde, slim с автозагрузкой пользователя user, network-manager, nm-applet стартует при старте сессии. Тачскрин работает в режиме тачпэда.
Есть вероятность, что все необходимые модули подгрузит udev, но для уверенности их можно прописать в /mnt/sun4i-rootfs/etc/modules. Список необходимых модулей можно получить в AndroidOS через TerminalEmulator :
Настройка загрузки linux
Качаем архив с содержимым первого boot раздела.
И извлекаем файл конфигурации evb.bin в /mnt/sun4i-boot из архива.
Если вы не собирали ядро, то собранное ядро 3.0.36+ можно тоже извлечь:
Запуск
Все, пожалуй, готово. Мы установили систему на SD накопитель. Вставляем MicroSD карточку в картоприемник планшета и включаем его. Через 5 сек после включения должна засветиться подсветка, экран останется черным. Через несколько миинут должна загрузиться вся система.
Помните, пароль по умолчанию для root — root, для user — user. Советую изменить их.
Если у вас нет usb клавиатуры, то в rootfs предустановлена виртуальная клавиатура.
Подключаемся к wifi сети, или используем USB Ethernet адаптер и с помощью nm-applet подключаемся к сети. Сразу же можно подключиться через ssh.
Запускаем lxterminal и доставляем необходимый софт.
Возможные проблемы
и прописать его /mnt/sun4i-rootfs/etc/modules.
Заключение
Таким образом я запустил linux на своем планшете MOMO9. Система пока не настроена до конца, не мешало бы настроить тот-же laptop-mode и доставить необходимые пакеты. Времени было потрачены не мало. Но зато, собрав так систему «почти» с нуля, сразу начинаешь понимать, как работает данная ОС. Еще пополняется словарный запас специальной английской лексики, что тоже не плохо.
Вот скриншот снятый на самом устройстве с помощью утилиты import из пакета MagickImage.
Снимал на камеру телефона, другого под рукой не оказалось, так что извините.
И конечно же, я не несу никакой ответственности за то, что вы натворите у себя на ПК, за порчу оборудования. Делайте все с пониманием дела. Не перепутайте устройство SD ридера с винчестером либо другим устройством.
Источник
Linux для allwinner a10
Предлагаю в этой теме обсуждать методы установок Linux на Планшеты и Свистки с AllWinner A10.
Итак: AllWiller A10 имеет закрытую для изменения область, которая называется BROM (он же BIOS).
BROM загружает из (EXT-SD, NAND) файл boot0, который содержит некую информацию об оборудовании.
Основная же информация об оборудовании находится в файле sys_config.fex. Существуют разные утилиты, позволяющие редактировать этот Конфиг Файл. После того, как boot0 поднят, BROM загружает boot1 (служит для поднятия остальных устройств), boot1 в свою очередь загружает boot.axf. Для загрузки Linux, далее boot.axf загружает U-Boot, остальное же U-Boot берёт на себя.
В AllWinner принцип загрузки таков: brom -> boot0 -> boot1 -> boot.axf -> u-boot -> kernel
Подробней процесс загрузки описан вот тут.
В интернете так же полно информации об установке Linux на «свистки» типа MK802. Но вот информации об установке Linux на Планшеты с A10 в качестве основной системы не много. Прошу собраться усилиями, помочь кто как может.
Метод установки Ubuntu Linux на устройства с A10.
Проделав то что описано ниже, вы НЕ РИСКУЕТЕ ничем, кроме как потерей информации на вашей Флешке. Делайте Бэкап.
Внимание: Этот метод уничтожит все ваши данные на внешней MicroSD карте!
Флешка должна быть 4 GB и более! , иначе образ системы не скопируется полностью.
Пользователям Linux/Mac:
- Скачайте желаемый образ по ссылкам ниже
- Распакуйте образ (например p7zip CLI is p7zip -d lubuntu-desktop-12.04-4-miniand.com.img.7z)
- Подключите MicroSD карту к компьютеру не монтируя её
- Определите адрес устройства утилитой fdisk: sudo fdisk -l (Получите например: /dev/sdd)
- Скопируйте образ командой dd, убедитесь в правильности адреса устройства (dd if=lubuntu-desktop-12.04-2-miniand.com.img of=/dev/sdd)
- Убедившись что образ записан: sudo sync
- Выключив ваше Android устройство, вставьте флешку и включите его
Пользователям Windows:
- Скачайте желаемый образ по ссылкам ниже
- Распакуйте образ программой 7-zip
- Подключите SD карту к компьютеру
- Скопируйте образ на флешку программой Image Writer
- Выключив ваше Android устройство, вставьте флешку и включите его
ЕСЛИ ПЛАНШЕТ БОЛЬШЕ НЕ ВКЛЮЧАЕТСЯ!
Не влючаться он может только по одной причине: Ему мешает загрузчик который находится на флешке. Извлеките Флешку, и он включится. Флешку вернуть в прежнее состояние можно простым форматированием в Windows, а в Linux снеся таблицу разделов.
Причина отсутствия подсветки Дисплея Найдена!
Ainol Novo 7 Aurora — Распаковать и заменить этот файл на первом FAT разделе evb.bin.tar.gz ( 6,9 КБ )
На другие планшеты это вряд ли подойдет, поэтому, выдирайте ваш «родной» script0.bin, переименовывайте его в evb.bin и кладиде в корень первого раздела, заменяя другой файл. (если кому-то не понятно как это делается, пишите, я попробую объяснить)
Собирать командой make ARCH=arm sun4i_defconfig
Это для задания параметров ядра. Затем, конечно же, нужно make ARCH=arm menuconfig и пройтись по опциям. Ну, а сборка — build.sh -p sun4i , только там нужно подрихтовать путь к компилятору. Конкретно — в /scripts/build_sun4i.sh привести в порядок эту строку:
export CROSS_COMPILE=arm-none-linux-gnueabi-
После «=» прописать путь (что-то вроде /src/toolchain/arm/bin/arm-none-linux-gnueabi- ).
Скрипт еще и образ рамдиска сделает, и образ загрузочный (boot.img)
Сообщение отредактировал Zyomich — 28.03.16, 21:39
Источник
Linux для allwinner a10
Предлагаю в этой теме обсуждать методы установок Linux на Планшеты и Свистки с AllWinner A10.
Итак: AllWiller A10 имеет закрытую для изменения область, которая называется BROM (он же BIOS).
BROM загружает из (EXT-SD, NAND) файл boot0, который содержит некую информацию об оборудовании.
Основная же информация об оборудовании находится в файле sys_config.fex. Существуют разные утилиты, позволяющие редактировать этот Конфиг Файл. После того, как boot0 поднят, BROM загружает boot1 (служит для поднятия остальных устройств), boot1 в свою очередь загружает boot.axf. Для загрузки Linux, далее boot.axf загружает U-Boot, остальное же U-Boot берёт на себя.
В AllWinner принцип загрузки таков: brom -> boot0 -> boot1 -> boot.axf -> u-boot -> kernel
Подробней процесс загрузки описан вот тут.
В интернете так же полно информации об установке Linux на «свистки» типа MK802. Но вот информации об установке Linux на Планшеты с A10 в качестве основной системы не много. Прошу собраться усилиями, помочь кто как может.
Метод установки Ubuntu Linux на устройства с A10.
Проделав то что описано ниже, вы НЕ РИСКУЕТЕ ничем, кроме как потерей информации на вашей Флешке. Делайте Бэкап.
Внимание: Этот метод уничтожит все ваши данные на внешней MicroSD карте!
Флешка должна быть 4 GB и более! , иначе образ системы не скопируется полностью.
Пользователям Linux/Mac:
- Скачайте желаемый образ по ссылкам ниже
- Распакуйте образ (например p7zip CLI is p7zip -d lubuntu-desktop-12.04-4-miniand.com.img.7z)
- Подключите MicroSD карту к компьютеру не монтируя её
- Определите адрес устройства утилитой fdisk: sudo fdisk -l (Получите например: /dev/sdd)
- Скопируйте образ командой dd, убедитесь в правильности адреса устройства (dd if=lubuntu-desktop-12.04-2-miniand.com.img of=/dev/sdd)
- Убедившись что образ записан: sudo sync
- Выключив ваше Android устройство, вставьте флешку и включите его
Пользователям Windows:
- Скачайте желаемый образ по ссылкам ниже
- Распакуйте образ программой 7-zip
- Подключите SD карту к компьютеру
- Скопируйте образ на флешку программой Image Writer
- Выключив ваше Android устройство, вставьте флешку и включите его
ЕСЛИ ПЛАНШЕТ БОЛЬШЕ НЕ ВКЛЮЧАЕТСЯ!
Не влючаться он может только по одной причине: Ему мешает загрузчик который находится на флешке. Извлеките Флешку, и он включится. Флешку вернуть в прежнее состояние можно простым форматированием в Windows, а в Linux снеся таблицу разделов.
Причина отсутствия подсветки Дисплея Найдена!
Ainol Novo 7 Aurora — Распаковать и заменить этот файл на первом FAT разделе evb.bin.tar.gz ( 6,9 КБ )
На другие планшеты это вряд ли подойдет, поэтому, выдирайте ваш «родной» script0.bin, переименовывайте его в evb.bin и кладиде в корень первого раздела, заменяя другой файл. (если кому-то не понятно как это делается, пишите, я попробую объяснить)
Собирать командой make ARCH=arm sun4i_defconfig
Это для задания параметров ядра. Затем, конечно же, нужно make ARCH=arm menuconfig и пройтись по опциям. Ну, а сборка — build.sh -p sun4i , только там нужно подрихтовать путь к компилятору. Конкретно — в /scripts/build_sun4i.sh привести в порядок эту строку:
export CROSS_COMPILE=arm-none-linux-gnueabi-
После «=» прописать путь (что-то вроде /src/toolchain/arm/bin/arm-none-linux-gnueabi- ).
Скрипт еще и образ рамдиска сделает, и образ загрузочный (boot.img)
Сообщение отредактировал Zyomich — 28.03.16, 21:39
Источник