sitelogo

By

Установка Linux на VIA VT8500 WM8505 WM8650

Для того, чтобы установить (если вы думаете, что сейчас откинетесь на спинку кресла с чашечкой кофе, то сильно ошибаетесь) нормальную систему Linux на наше устройство, в первую очередь нужно собрать ядро из исходников, либо скачать готовое. Поскольку конфигураций оборудования у подобных устройств много, скорее всего нужно будет самостоятельно поработать над сборкой ядра и подбором драйверов.

Часть первая: сборка ядра.

Компилировать ядро лучше на быстрой машине с хорошим ЦП, с установленным Linux. Для этого лучше установить кросс компилятор gcc (предполагается компиляция на x86, x86-64 платформе), названия пакетов следующие (учтите, возможно я что-то упускаю):

  1. binutils-arm-linux-gnueabi
  2. cpp-4.4-arm-linux-gnueabi
  3. gcc-4.4-arm-linux-gnueabi
  4. gcc-4.4-arm-linux-gnueabi-base
  5. gcc-4.5-arm-linux-gnueabi-base
  6. libc6-armel-cross
  7. libc6-dev-armel-cross
  8. libgcc1-armel-cross
  9. libgomp1-armel-cross
  10. linux-libc-dev-armel-cross
  11. uboot-mkimage

Не забывайте, версия компилятора должна быть такой, какую рекомендуют к сборке. Например, gcc4.4 для описываемых исходников неверно компилировал драйвера сетевой карты Via Velocity, из за чего драйвер некорректно работал. Gcc4.5 лучше не использовать пока, т.к. он вообще может выдать ошибки. Видимо, исходники собирались с версией 4.3.

Далее скачиваются исходники Linux, специально пропатченные для WM8505. Вводим в google «wm8505 linux kernel source» и выбираем. Я их брал отсюда:
https://github.com/projectgus/kernel_wm8505
Версия ядра — 2.6.29. Это официальное ядро от Wondermedia, но немного переработанное.
Есть официальные исходники от самой WonderMedia (одна из задач у них была ввести поддержку Linux), они находятся по адресу:
ftp://ftp.gpl-devices.org/pub/vendors/Wondermedia/
Но эти исходники — самые первые, там больше закрытого кода, они менее стабильны и все OpenSource проекты базируются на них.

Сейчас разрабатывается полностью OpenSource проект:
https://gitorious.org/linux-on-via-vt8500/vt8500-kernel
Также можно попробовать его, впоследствии, именно OpenSource Linux будет использоваться.

Смотрите инструкции по компиляции в файле Readme. Общий пример для сборки:
1) Внести какие-либо патчи к исходникам для поддержки драйверов конкретного устройства. Разумеется, с ходу ничего узнать нельзя, все определяется методом проб и ошибок. Мне вот пришлось раскурочить девайс, записать все маркировки чипов и только потом я был полностью уверен, какие драйвера мне нужны.
2) Сконфигурировать ядро. Лучше где-то взять готовый файл .config, и уже потом делать какие то доработки к нему:

1
:~$ make menuconfig ARCH=arm

Тут нужно как минимум включить поддержку файловых систем, которые будете использовать, например, NTFS, FUSE, ReiserFS и т.д.
3) Скомпилировать:

1
:~$ make via_obj uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

Пояснения:
Параметр via_obj это специальный параметр, который верен только для ядра от WMT или его модификаций. Он копирует обьектные файлы с закрытым кодом (уже скомпилированные) от Wondermedia куда-то там.
Параметр uImage указывает, что создается файл u-boot (не забываем, что WM8505 вместо BIOS имеет свой хитрый механизм загрузки). Файл появится в
/arch/arm/boot/uImage
Это и есть ядро, специальным образом упакованное с помощью утилиты mkimage.
Остальные параметры задают кросс-компилятор.
4) Скомпилировать модули:

1
:~$ make via_obj modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

 

5) Скопировать получившиеся модули:

1
:~$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/some/writable/directory modules_install

Часть 2: подготовка u-boot, rootfs (т.н. прошивка).

Для начала нужно подготовить SD Flash диск, размером как минимум 1 Гб. Впрочем, вам решать как вы будете его использовать. Нужно Разбить диск на 2 раздела: 1-й FAT12, размером 10 мегабайт, который нужен только для u-boot. 2-й раздел для Linux, который занимает все оставшееся место. Форматировать можно любой ФС, которая подходит для Linux, мне нравится использовать ReiserFS: по сравнению с Ext2 она журналируемая, использует примерно на 10% эффективнее место на диске (я скопировал rootfs с забитого файлами 1Гб диска на тот же с ReiserFS, после чего меня порадовало появление лишних 80 мегабайт свободного места). ReiserFS работает у меня на жестком диске на другом ПК, замечаний не было никаких. Возможно, работает она несколько медленнее. Вообще, конечно, хорошо бы использовать ФС напрямую предназначенную для Flash дисков, тогда износ флешки будет минимальным.

1) Раздел u-boot содержит один лишь каталог, называемый script. Называть его нужно именно script, и никак иначе :). В этот каталог нужно поместить два файла, специально преобразованные в специальный формат, понимаемый u-boot загрузчиком. Первый файл называется скриптом, он содержит команды, которые выполняет загрузчик, чтобы загрузить систему. Второй файл — ядро Linux, также упакованное в специальный формат (при сборке файл uImage уже автоматически упакован).

Создаем текстовый файл следующего содержания:

1
2
3
4
lcdinit
fatload mmc 0 0 /script/uImage
setenv bootargs mem=109M root=/dev/mmcblk0p2
bootm 0

Некоторые пояснения: здесь инициализируется дисплей, загружается образ ядра в память по адресу 0, и ему передается управление. Linux не полностью использует всю память, поэтому указывается параметр mem=109M, потому что верхняя ее часть занята по моему, под какой-то там видеобуфер. Для нетбука с 256 Мб неправильно было бы не поставить mem=250M.
Если хотите написать свой скрипт, читайте документацию по командам u-boot. Это понадобится, когда захотите полностью «установить» систему на внутренний диск. Эта внутренняя флешка в каждой модели подключается по своему, поэтому и команды будут разными. Именно поэтому затруднительно написать нормальный скрипт установки который бы ставил все автоматически а мы всетаки смогли бы выпить кофе. Я как нибудь позже опишу установку на USB диск.

Скрипт сохраняется под именем scriptcmd.txt, к нему применяем команду:

1
:~$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n linuxboot -d scriptcmd.txt scriptcmd

Я не знаю как на счет формата переноса строк, лучше наверное, использовать CR формат Linux, а не CRLF, как в Windows, кодировка обычная, однобайтная.

Далее копируем файл uImage в этот же каталог, на этом настройка раздела u-boot закончена.

2) Далее качается минималистический образ rootfs, например, отсюда:

http://www.compulab.co.il/workspace/mediawiki/index.php5/Linux:_Debian:_Minimal_ARM_filesystem

прямая ссылка на образ Lenny

Он занимает менее чем 100 Мб, содержит только минимальный набор пакетов. Он вообще не настроен, поэтому его нужно модифицировать (файл /etc/default/rcS):

1
2
FSCKFIX=yes
UTC=yes

Это включает опции по автоматической проверке диска.

Копируем модули для ядра по пути:
/lib/modules/2.6.29

Сбрасываем пароль на root, в файле:
/etc/shadow

Убираем зашифрованную фразу между первым и вторым двоеточием

1
root::14727:0:99999:7:::

Если нужно в первую очередь настроить PPTP, копируем следующие пакеты на диск с rootfs (armel):

  1. libpcap
  2. ppp
  3. pptp-linux
  4. udev
  5. libvolume-id0

Предварительно, конечно, нужно их скачать вручную с работающего компьютера.

При успешной загрузке нашего образа, в root консоли устройства пишем:

1
:~$ chmod 777 /

Из за того что на корневой директории стоят какие нибудь не те права, при установке пакетов могут вылезать ошибки, буквально на пустом месте, что потом целый день будешь искать причину…

1
:~$ depmod

Построить список модулей ядра исходя из скопированных в lib/modules/2.6.29
hostname , чтобы сменить имя хоста
/etc/hostname также прописать что хочется.
Потом в /etc/hosts
назначить этому хосту IP адрес
пример:

1
2
127.0.0.1           v1ron-netbook
127.0.0.1           localhost

Если на консоль выдаются ошибки типа «INIT: ID «1» respawning too fast: disable for 5 minutes» «Usage: getty…», то надо настроить /etc/inittab. Я просто скопировал этот файл из рабочей Debian системы для ядра 2.6.29.

То же самое касается /etc/fstab, пример:

1
/dev/root / auto defaults 0 1

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

Установить скопированнные пакеты вручную:

1
:~$ dpkg -i <имя файла пакета>

Настроить локальную сеть и интернет через pptp или роутер (проще всего подключить к роутеру, беспроводные сети настроим позже)

И пошло-поехало… Качаем все пакеты, которые нам нужны. Не забудьте обновить дистрибутив сразу, чтобы потом не было проблем.

1
2
:~$ apt-get update
:~$ apt-get upgrade

Мне нравятся следующие пакеты:
mc — файловый менеджер для консоли.
locales — мультиязычная база кодировок
console-cyrillic — поддержка русского в консоли

Поддержка русского устанавливается так: ставится пакет locales, настраивается dpkg-reconfigure locales. Там выбираются локали которые будут использоваться. Я обычно выбираю юникод (en_US.UTF8, ru_RU.UTF8, default: ru-RU) dpkg-reconfigure console-cyrillic (нормальный шрифт: DOS, размер 16).

reiserfsprogs — утилиты проверки, создания, форматирования разделов reiserfs. Если ФС другая, разумеется, ставятся другие утилиты.
lxde — оконный менеджер. Если вам вообще нужна поддержка GUI. Этот менеджер я выбрал, потому что он имеет хорошее соотношение легкость\функциональность\удобность. Для мощной системы я бы поставил Gnome.

Ну вот, в общем то и все. Чтобы не собирать каждый раз систему по пакетам я как-нибудь позже выложу сюда образ уже готовой rootfs с предустановленными пакетами.



4 Responses to Установка Linux на VIA VT8500 WM8505 WM8650

  1. Даниил пишет:

    Отличная работа, будет ли всетаки готовый образ ОС? И хотелось бы всетаки возможность установить дебиан/убунту во внутреннюю память смартбука

  2. viron пишет:

    Спасибо. Убунту врядли поставится, для ARM у них сейчас если только бета версии имеются да и то эти образы не предназначены для такой конфигурации в 128 мб памяти. Всегда лучше отдельно поставить xorg и к нему уже какой либо оконный менеджер, по ресурсам гораздо лучше будет. Образ хотел выложить но это осложнилось переходом на OpenSource ядро 3.0, там из за наличия другого драйвера видео xorg слетает. На внутреннюю флеш сам еще не ставил, т.к. нет нормальной стабильной системы, чтобы все железо нормально работало.

  3. Нейкист пишет:

    Великолепно, статья поразила!!! Даже загорелся желанием китайца купить. Вот только так толком и не врубился почему именно такой объем памяти 109 метров? И еще, а если генту попробовать? Различия сильные будут?

    • viron пишет:

      109Мб — это особенности прошивки от китайцев и кастомной от ProjectGus. С OpenSource ядром 3.2 памяти «становится» 128Мб. Правда, в старой прошивке просто система не занимала оставшуюся память (кривой способ выделить память) и драйвер видео использовал этот кусок под FrameBuffer. В новой прошивке все происходит автоматически, как надо, просто после загрузки память пот тот же буфер выделяется самой системой.