Пользователь
0,0
рейтинг
15 августа 2012 в 00:37

Администрирование → Запуск Linux на планшете с SoC Allwinner A10 на борту из песочницы

Предыстория


Приобрел я себе планшет на SoC Allwinner A10 (sun4i — кодовое название процессора AllWinner A10 ARMv7-A архитектуры семейства Cortex ядро A8). Сначала игрался с ним на Android 2.x потом на 4.x, но со временем мне стало этого мало. Да еще начали выпускать миникомпьютеры на основе этой SoC с Linux на борту. Я подумал: «Хм, а чем мой планшет хуже?» и занялся делом. Как оказалось, за меня уже все сделали, и дела делать не пришлось:
  1. Ядро оптимизировали для данной платформы
  2. Загрузчик оптимизировали к этой платформе
  3. Вышел новый порт 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


  • brom ( ищет загрузчик в mmc, nand, usb называемый boot0 (the SPL — Second Program Loader: sun4i-spl.bin).
  • boot0 (the SPL — Second Program Loader: sun4i-spl.bin) инициализирует устройства
  • SPL (boot0) загружает u-boot (boot1)
  • u-boot (boot1) инициализирует оставшиеся устройства и создает абстракции для аботы с «железом»
  • Подгружает конфигурационный файл «железа» ( script.bin. evb.bin, mele.bin sys_config.bin) рядом с u-boot подобно initrd.
  • u-boot загружает ядро.

Т.е. Загрузка начинается с 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:

git clone git://github.com/hno/uboot-allwinner
cd uboot-allwinner
make sun4i CROSS_COMPILE=arm-none-linux-gnueabi-
cd ..

Запись загрузчика



Внимание, будьте осторожны, не перепутайте устройство SD карты с другими носителями. Если вы не понимаете того, что делаете, то лучше не делайте.
${SD} — переменная устройства, можно заменять вручную, можно перед выполнением прописать:
export SD=/dev/sdb 

#Копируем SPL (boot0)  первичный загрузчик на SD
dd if=uboot-allwinner/spl/sun4i-spl.bin of=${SD} bs=1024 seek=8 conv=notrunc
#Записываем вторичный (boot1) u-boot загрузчик на SD
dd if=uboot-allwinner/u-boot.bin of=${SD} bs=1024 seek=32 conv=notrunc


Разбиваем MicroSD накопитель



Внимание, в результате операции данные на MicroSD накопители будут утеряны, сохраните все необходимое в надежное место.
  • Нам нужно создать два раздела обязательно.
  • Первый раздел — раздел с файлом конфигурации железа (evb.bin) и ядром (uImage). Должен начинаться с 2048 сектора, быть размером 32MB-100MB и иметь файловую система FAT ( тип раздела FAT) либо ext2/3 ( тип раздела 83 ).
  • Второй раздел — раздел rootfs, собственно вся система, размер раздела желательно сделать в пределах 1GB-4GB, файловая система строго ext4, тип раздела — 83.
  • Можно сделать еще swap раздел, по желанию.
  • Оставшееся место используете для себя. Я создал раздел для своих данных, можно примонтировать в /home/

Вот, как я разбил свою 16GB карточку:
fdisk -l /dev/sdb
Disk /dev/sdb: 15.9 GB, 15935209472 bytes
64 heads, 32 sectors/track, 15197 cylinders, всего 31123456 секторов
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000728ca
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1            2048       34815       16384   83  Linux
/dev/sdb2           34816     6326271     3145728   83  Linux
/dev/sdb3         6326272    31123455    12398592   83  Linux

Согласно пунктам, описанным выше, разбиваем MicroSD накопитель.
Я, надеюсь, те, кто пользуется linux, умеет использовать fdisk.
fdisk ${SD} 



Форматируем:

mkfs.vfat ${SD}1 -n sun4i-boot
mkfs.ext4 ${SD}2 -L sun4i-rootfs

Монтируем в нужное место:
mkdir /mnt/sun4i-boot
mkdir /mnt/sun4i-rootfs
mount ${SD}1 /mnt/sun4i-boot
mount ${SD}2 /mnt/sun4i-rootfs

Сборка ядра



Ядро можно не компилировать, я приложил снизу готовое ядро с модулями.
#Клонируем репозиторий
git clone git://github.com/amery/linux-allwinner.git
#Сборка ядра
cd linux-allwinner
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- sun4i_defconfig
#Конфигуриуем ядро
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-  gconfig 

Вместо gconfig можно использовать на вкус xconfig(qt интерфейс) или menuconfig (консольный интерфейс). Не забываем включить необходимые драйвера в ядро а также необходимые вам фичи. Читайте подсказки к параметрам.
Советую не забыть про модули тачскрина и фс(fat, ntfs).
#Компилируем
make ARCH=arm CFLAGS="march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -ffast-math"  CROSS_COMPILE=arm-none-linux-gnueabi- -j3 uImage modules
#Устанавливаем модули
make ARCH=arm CFLAGS="march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mcpu=cortex-a8 -mtune=cortex-a8 -mthumb -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -ffast-math" CROSS_COMPILE=arm-none-linux-gnueabi- -j3 INSTALL_MOD_PATH=/mnt/sun4i-rootfs
#Ядро копируем в boot раздел
cp arch/arm/boot/uImage /mnt/sun4i-boot

Аргумент -j задает количество одновременных потоков компиляции. Опытным путем установлено, что потоков должно быть на единицу больше, чем ядер в процессоре.
Флаги оптимизации взяты из cтатьи ValdikSS. Честно говоря, ядро с ними скомпилировалось. Но я пока не устанавливал его на SD флеш карту.

Установка rootfs


Как загружать с помощью debootstrap начальную rootfs описывать не буду, так как это достойно еще одной статьи. Я лучше прикладу готовую rootfs Debian Wheezy ARMHF, а вы пользуйтесь.
Rootfs необходимо распаковать с сохранением атрибутов на второй раздел SD, так как таким образом сконфигурирован по умолчанию u-boot (про конфигурациию можно почитать здесь.
Качаем Debian Wheezy Rootfs и распаковываем:
tar -xpf debian-wheezy-armhf-rootfs.img.tar.bz2 -C /mnt/sun4i-boot

Кстати, здесь есть и модули к ядру 3.0.36+. Также имеется lxde, slim с автозагрузкой пользователя user, network-manager, nm-applet стартует при старте сессии. Тачскрин работает в режиме тачпэда.
Есть вероятность, что все необходимые модули подгрузит udev, но для уверенности их можно прописать в /mnt/sun4i-rootfs/etc/modules. Список необходимых модулей можно получить в AndroidOS через TerminalEmulator:
TerminalEmulator: $ lsmod
lsmod

либо через ADB:
adb shell lsmod

Настройка загрузки linux

Качаем архив с содержимым первого boot раздела.
И извлекаем файл конфигурации evb.bin в /mnt/sun4i-boot из архива.
tar -xf debian-wheezy-armhf-boot.tar.bz2 evb.bin -C /mnt/sun4i-boot

Если вы не собирали ядро, то собранное ядро 3.0.36+ можно тоже извлечь:
tar -xf debian-wheezy-armhf-boot.tar.bz2 uImage -C /mnt/sun4i-boot

Запуск

Все, пожалуй, готово. Мы установили систему на SD накопитель. Вставляем MicroSD карточку в картоприемник планшета и включаем его. Через 5 сек после включения должна засветиться подсветка, экран останется черным. Через несколько миинут должна загрузиться вся система.
Помните, пароль по умолчанию для root — root, для user — user. Советую изменить их.
Если у вас нет usb клавиатуры, то в rootfs предустановлена виртуальная клавиатура.
Подключаемся к wifi сети, или используем USB Ethernet адаптер и с помощью nm-applet подключаемся к сети. Сразу же можно подключиться через ssh.
Запускаем lxterminal и доставляем необходимый софт.
sudo -i
apt-get update
apt-get install vlc geany 

Возможные проблемы


  1. Если после включения ничего не видно, возможно еще идет загрузка, подождите минуты 5. Но если, даже подсветки нет, тогда вам нужно будет заменить evb.bin своим файлом конфигурации из android прошики, который находиться на nanda.
    На устройстве под андроид через Terminal Emaulator либо через adb:
    adb shell
    su
    mkdir /local/data/tmp/nanda
    mount /dev/block/nanda /local/data/tmp/nanda
    

    Извлекаем любыми путями script.bin, я делал так:
    $ adb pull /local/data/tmp/nanda/script.bin evb.bin
    cp evb.bin /mnt/sun4i-boot/
    

  2. Если все-таки подсветка есть, но система не загрузилась, можно просмотреть логи системы, достав MicroSD карточку из планшета и примонтировав в /mnt/sun4i-rootfs
    cat /mnt/sun4i-rootfs/var/log/dmesg
    cat /mnt/sun4i-rootfs/var/log/Xorg.0.log
    

  3. Если же тач не работает, то нужно узнать в Android, какой модуль отвечает у вас за тач:
    Способ через ADB:
    adb shell 'lsmod | grep ts'
    

    Способ через TerminalEmulator
    lsmod | grep ts


    и прописать его /mnt/sun4i-rootfs/etc/modules.

Заключение

Таким образом я запустил linux на своем планшете MOMO9. Система пока не настроена до конца, не мешало бы настроить тот-же laptop-mode и доставить необходимые пакеты. Времени было потрачены не мало. Но зато, собрав так систему «почти» с нуля, сразу начинаешь понимать, как работает данная ОС. Еще пополняется словарный запас специальной английской лексики, что тоже не плохо.
Debian Wheezy на MOMO9 скриншоты
Вот скриншот снятый на самом устройстве с помощью утилиты import из пакета MagickImage.
image
real
Снимал на камеру телефона, другого под рукой не оказалось, так что извините.

И конечно же, я не несу никакой ответственности за то, что вы натворите у себя на ПК, за порчу оборудования. Делайте все с пониманием дела. Не перепутайте устройство SD ридера с винчестером либо другим устройством.

UPD:


  1. Процесс загрузки SoC. Описание на форуме.
  2. Процесс загрузки SoC.
  3. .config файл можно достать из уже скомпилированного ядра с помощью скрипта, который находится в папке с исходниками ядра linux-allwinner/scripts/extract-ikconfig. Я это к тому, что вы можите не конфигурировать новое ядро сами с нуля, а использовать файл конфигурации со старого ядра, только при компиляции у вас запросит скрипт сборки, что с новыми возможностями и модулями ядра делать (включать в ядро либо не включать в образ ядра ).
  4. RZK333 добавил источники: канал Rhombus-Tech #arm-netbook@freenode, откуда собственно все авторы того что ты описываешь (патчи для ядра, патчи для u-boot, разбор SPL, загрузка с SD) и linux-sunxi.org куда все было сложено. На канале не был, а вот на вики информация интересная.
  5. Много черпнул из данного топика. Linux на AllWinner A10, Принцип работы, обсуждение и сборка ядер
  6. Добавил несколько скриншотов.
  7. Я не претендую на самый правильный способ установки, возможно, я не так понимаю некоторые вещи, так как только недавно начал изучать эту сферу. Поэтому, прошу Вас, если вы заметили некоторые неточности, не «стесняйтесь» поправить меня. Я буду только благодарен вам.
@denis4inet
карма
5,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (32)

  • +1
    Сумбурненько :/
    • –1
      Что именно?
      • +2
        Неточность формулировок, невнимание к деталям (всё сводится к скачиванию архива, без рецептов/отсылки к рецептам), плохо описан процесс загрузки, хотя можно было взять очень хорошее описание с wiki, совершенно непонятные размеры партиций (32-100мб и 1-4гб).

        У вас есть неделя на допил :)
        • 0
          почему неделя? :)
        • +1
          Про партиции читал на одном из форумов, позже добавлю на каком. Как я понял, это связано с тем, что загрузчик умеет работать только с такими файловыми системами, а вот размер зачем ограничивать, я не понял. Посмотреть надо исходники, может там прокомментировано, зачем это они так сделали.

          Насчет того, что доработать надо — доработаю, пока времени особо не было, вывел в свет, что есть, чтобы народ тестировал.
      • 0
        Основные претензии к множеству опечаток и неидеальному форматированию (к примеру, много где пробелы не поставлены после знаков препинания).
        ОДНАКО это все мелочи, а статья полезная. Мне по крайней мере. Так что… спасибо!
        • 0
          Извините, первая статья.
  • +1
    Скриншотов не хватает. А еще лучше видео, но его сложнее нормально снять.
    • 0
      Скриншоты организовать можно, а вот с видео, сложновато-то будет, подставки нет для камеры, а одной рукой управлять планшетом а другой снимать — будет трястись камера, если вас устроит такое качество, могу заснять.
    • 0
      вот вам пару фотографий с linaro на ly-f1
      1 2
  • +1
    недавно поймал себя на мысли что с 2005 года не пересобирал ядро… нет необходимости…
  • –1
    А как работается в линуксе с тачскрином и на мелком экране? Есть ли практический смысл в установке не ради установки?
    Зимой была статья на хабре, там чел писал, что на планшете (он крутил x86 процем) пока мрачно, работать не удобно, например не работает динамичский скролинг, трудно попась по кнопкам на панелях программ и т.п.
    • 0
      Вообще-то, как мне кажется, gnome3 оптимизирован под тач достаточно, только ресурсов ему надо много. Насчет lxde, да, там все мелкое, не хватает интерактивной клавиатуры, которая появлялась бы при необходимости ввода, как в android. Но это все устраняется, когда у вас есть чехол с клавиатурой и мышкой. Выходит своего рода нетбук.
    • 0
      Ну году эдак в 2010 kde c плазмой в режиме нетбук на lenovo s10-3t было вполне удобно использовать, единственное что огорчало, то что размеры кнопок, меню, etc. выставляли нормальные для пальце-тыкательного интерфейса только в родных для kde приложениях, e17 в режиме для планшета тогда тоже был вполне удобен, но родных приложений для е17 меньше чем для kde.
      • 0
        Можно попытаться увеличить в том же lxde размер шрифта и dpi, что приведет к увеличению и кнопок и меню.
    • –1
      смысла не вижу превращать планшет в нетбук с помощью чехла с клавиатурой, у меня например, есть нетбук
      мое ИМХО — если в дистрах для арм до сих пор нет экранной клавиатуры, автоматом появляющейся при помещении курсора в поле вода, или на худой конец кнопки в трее, + динамическая прокрутка, то это пока не годно для практического применения
      вся соль в чистом линуксе на планшете — возможность использования нативных приложений, в том числе консоли, если работать не удобно, лучше уж на андроиде сидеть
  • 0
    Теперь вместо всего этого, что написано в статье:
    sudo apt-get install git p7zip-full
    git clone git://github.com/cnxsoft/a10-tools.git
    cd a10-tools
    chmod +x *.sh
    wget http://dl.linux-sunxi.org/nightly/latest/mele-a1000_hwpack_2012.08.15.7z
    wget http://releases.linaro.org/12.06/ubuntu/precise-images/alip/linaro-precise-alip-20120626-213.tar.gz
    ./a1x-media-create.sh <your uSD card here> mele-a1000_hwpack_2012.08.15.7z linaro-precise-alip-20120626-213.tar.gz
    

    Скачивает последнее собранное ядро с модулями, rootfs Linaro с XFCE, закидывает модули, создает правильную разметку. Единственное что нужно сделать — в первый раздел закинуть свой script.bin, вставить карту памяти в любое совместимое с вашим script.bin устройство и использовать.

    И еще, товарищ, опять забыты источники, а точнее канал Rhombus-Tech #arm-netbook@freenode, откуда собственно все авторы того что ты описываешь (патчи для ядра, патчи для u-boot, разбор SPL, загрузка с SD) и linux-sunxi.org куда все было сложено. Если есть что добавить в wiki — добро пожаловать.
    • –1
      Образы давно шастают в интернете, но мне было интереснее сложить все самому. Хочу попробовать рутфс арча еще.
      • 0
        «шастают»? это «официальная» daily сборка ядра + поддерживаемый многими производителями (http://www.linaro.org/members) железа Linaro (Ubuntu ARM + свои пересобранные пакеты), есть еще более новые версии Linaro, но у них какие-то проблемы с LightDM, может сейчас уже исправили.

        Arch уже готов. archlinuxarm.org/platforms/armv7/mele-a100 мануалы там же.
        • 0
          Да, я слышал про арч, оттуда и хочу взять рутфс, а вот ядрышко может новое соберу.
      • 0
        еще есть предположение что под «шастают» вы понимаете тот шлак, который распространяют на форумах rikomagic/miniand и других помойках. поймите — официального производителя у A10 устройств, кроме smallart, mele, lyric pioneer и ainol нет, распространяемые rootfs — всего лишь срезы часто устаревших вещей, добавляемые китайцами на их форумы только для поддержки продаж в стиле «о, смотрите, мы ubuntu умеем».

        вам же предоставляют ежедневные обновления, это как бы, разные вещи.
        • 0
          Да, под шастают, я как раз их и понимал).
    • 0
      А вы ставили себе этот образ? Меня интересует как работает тач в X11, как тачпэд или все же как тачскрин? И поддержка мультитача реализована?
  • 0
    А как там в видео и opengles? fullhd киношку можно смотреть, webgl демки в хромиуме работают?
    • 0
      Хромиум не ставил пока, пользовался firefox, без usb клавиатуры пока не удобно.
      • 0
        Ну а видео крутиться? Работает ли флеш или html5 видео на ютубе?
    • +1
      благодаря идиотизму ARM и их системе распространения, мы не можем собрать X11 драйвера для Mali400 без Mali DDK, который распространяется только по NDA. eGL в общем, не работает, ни у кого не получилось запустить его.

      ускорение видео в ближайшее время появится, выложены исходники libve, встроенный ускоритель CedarX в ближайшее время получит совместимость с openmax, есть товарищи из XBMC, пытающиеся запустить ускорение и им помогают.

      ускорение аудио отсутствует, если есть желание — есть исходники android либ, нужно переписать их для совместимости с mplayer/whatever.

      в двух словах: это эксперименты для заинтересованных людей, если вам нужен медиаплеер — купите себе mele a2000 и гоняйте на ней android, там все ускоряется как нужно в стандартном плеере (2160p).
      • 0
        Не, мне нужен новый девайс (был hp jornada 690, smartq7, сейчас toshiba ac100) для потра**ться с Linux-ом на очередном арм устройстве =)
        • +1
          тогда добро пожаловать :3
    • –1
      К сожалению, flashplugin-nonfree в debian репозитории доступен только для двух архитектур: i386 и amd64.
      • 0
        Можно попробовать плагин из сборок для ac100, но он вроде бы не собран для armhf. Ну собствно фиг с ним, надо затариться каким нибудь ly-xx снова для игр =)
        • –1
          Но на Android Flash то работает, может его каким-то образом получиться достать.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.