Сборка ядра Linux для HTC Max 4G

В связи с тем, что разработка переехала в новый репозиторий, в который будут регулярно помещаться патчи из основной ветки разработки ядра для MSM-платформы, а также в связи с тем, что дополнительно нужно собирать драйвер WIFI из отдельного архива исходного кода, появилась необходимость обновить инструкцию по сборке этого самого ядра. На всякий случай старую инструкцию трогать не стал (мало ли что?).

Дистрибутив Linux подойдет любой, установлен он может быть хоть в виртуальной машине, разницы особой не будет. Данная инструкция ориентирована на Debian-based системы, однако сборка возможна в любом дистрибутиве, просто могут быть отличия в процессе установки. В этом случае гугл в помощь.

1. Устанавливаем необходимые пакеты (для этого, естественно, потребуются права администратора). Остальные действия можно осуществлять из-под обычного пользователя.

$ sudo apt-get install git-core build-essential libncurses-dev

2. Создаем директорию для исходников и переходим в нее:

$ mkdir $HOME/quartz-dev
$ cd $HOME/quartz-dev

3. Загружаем исходные тексты ядра Linux. Будьте готовы, что скачается около 300  мегабайт. На диске же будет занято почти 700.

$ git clone git://gitorious.org/~loquens/\
linux-on-qualcomm-s-msm/linux-msm-htcquartz.git

4. Скачиваем и распаковываем кросс-компилятор. Полный URL архива не помещается в блоке, поэтому слово «ссылка» в командной строке нужно заменить на ее URL. После этого добавляем в переменную окружения PATH путь к каталогу исполняемых файлов компилятора.

$ wget ссылка -O arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ export PATH=$HOME/quartz-dev/arm-2008q1/bin:$PATH

5. Дальше переходим в директорию исходного кода ядра и создаем конфигурационный файл (.config) на основе шаблона для MSM-устройств. Если в дальнейшем при первом запуске компиляции будут заданы вопросы по каким-то параметрам, нужно ответить на них «Y», либо принять предлагаемое по умолчанию значение.

$ cd linux-msm-htcquartz
$ make htc_msm_android_defconfig ARCH=arm

6. Теперь перейдем непосредственно к компиляции. Процесс займет некоторое время, и, если все пройдет без ошибок, готовое ядро будет размещено в $HOME/quartz-dev/linux-msm-htcquartz/arch/arm/boot/zImage.

$ make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

7. На этом этапе уже можно копировать ядро на устройство со сборкой XDAndroid’а для  HTC Max 4G и приступать к тестам. Но если хочется попробовать WIFI, нужно предпринять несколько дополнительных шагов.

8. Далее, нам понадобятся все модули ядра (похоже, нужен всего один — mtdchar.ko), но на всякий случай соберем и запакуем все. Этот модуль требуется для извлечения калибровочной информации WIFI из NVRAM, поэтому без него WIFI работать не будет. Однако если WIFI в андроиде на вашем устройстве уже работал, то калибровочный файл там наверняка присутствует.

$ make modules ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
9. После сборки модулей создатим каталог, куда скопируем их все:
$ mkdir $HOME/quartz-dev/modules
$ find . -name "*.ko" | while read modname;\
 do cp $modname $HOME/quartz-dev/modules; done
$ cd ..

10. Далее скачаем исходный код драйвера WIFI, соберем его, и скопируем полученный модуль в ту же директорию, куда ранее мы поместили остальные модули:

$ wget http://zimages.googlecode.com/files/sta_dk_4_0_4_32.tar.gz
$ tar xzvf sta_dk_4_0_4_32.tar.gz
$ cd sta_dk_4_0_4_32
$ KERNEL_DIR=$HOME/quartz-dev/linux-msm-htcquartz make\
 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
$ cp wlan.ko $HOME/quartz-dev/modules
$ cd ..

11. После этого пакуем содержимое директории modules в архив, который называется modules-<версия ядра>.tar.gz

$ cd modules
$ tar cvzf ../modules-`cat\
 ../linux-msm-htcquartz/include/config/kernel.release`\
.tar.gz .
$ cd ..

12. После чего копируем полученный архив (он будет находиться в каталоге $HOME/quartz-dev) в каталог andboot карты памяти, туда же помещаем и zImage.

13. Ну и вкратце о исходном коде ядра. Файлы, относящиеся к HTC Max 4G, находятся в подкаталоге arch/arc/mach-msm каталога исходных кодов ядра, и называются они board-htc-quartz*. Помимо этого, есть еще множество файлов относящихся к платформе MSM, они лежат там же. Как правило, в них находится код, специфичный для всей платформы, а не для конкретных устройств. Специфичный для устройства код может быть вставлен двумя путями:

  • Директивой условной компиляции. Если в конфигурационном файле ярда (.config) включено, например, наше устройство, то есть присутствует строка «CONFIG_MACH_HTCQUARTZ=y», то устройство-специфичный код можно обрамлять директивой
#if defined(CONFIG_MACH_HTCQUARZ)
    код для HTC Max 4G
#endif
  • В рантайме при помощи следующих конструкций:
if (machine_is_htcquartz())
{
    код для HTC Max 4G
}
или
switch (__machine_arch_type)
{
    case MACH_TYPE_HTCQUARTZ:
        код для HTC Max 4G
        break;
}

Вроде бы пока все.

  • Pingback: ()

  • Malikov_oleg

    Не хочу больше поднимать тему клонирования на 4pda.
    git clone так и не настроил, проблема связана с проксей, не нашел вразумительного ответа на этот вопрос.
    А при попытке слонировать с сайта, вываливается ошибка.
    You need to upload your public key first. Add a new public SSH key
    Вот тоже не получается создать ssh key.
    Может кто подскажет, как это сделать из под ubuntu?

    • Аноним

      Стоп-стоп-стоп! Если клонировать репозиторий на сайте, то его тоже нужно будет получить себе на компьютер при помощи git clone. Так что это не способ.А по поводу прокси расскажи подробнее, что за прокси, нужна ли на нем аутентификация?И если прокси не пускает по git-протоколу, можешь попробовать следующую команду (по http-протоколу):
      $ git clone http://git.gitorious.org/~loquens/linux-on-qualcomm-s-msm/linux-msm-htcquartz.gitну и небольшой тест на работоспособность http-протокола в консоли:$ wget yandex.ru должен отработать и сохранить на диск index.html

      • Malikov_oleg

        $ wget yandex.ru
        fatal: HTTP request failed
        omalikov@ubuntu:~$ wget yandex.ru
        Ошибка разбора URL прокси-сервера «http://omalikov:xxxxxx@proxy:3128/»: Scheme missing
        omalikov@ubuntu:~$

        $ git clone http://git.gitorious.org/~loquens/linux-on-qualcomm-s-msm/linux-msm-htcquartz.git
        Initialized empty Git repository in /home/omalikov/linux-msm-htcquartz/.git/
        error: The requested URL returned error: 407 while accessing http://git.gitorious.org/~loquens/linux-on-qualcomm-s-msm/linux-msm-htcquartz.git/info/refs

        Вот такие проблемы.
        Напомню, что Ubuntu 10.10

        • Аноним

          в пароле случаем не содержатся какие-нибудь непечатные символы или служебные символы?

          • Malikov_oleg

            Сори, не прописал в менеджере пакетов проксю
            Все заработало) Правда теперь на диске закончилось место, но это совсем другая история.

  • Алексей Паршков

    Здравствуйте, отладил android на htc max 4g почти все кроме драйвера на wifi делал через эмулятор терминала который поставил на андроид. Подскажите по шагам что делать ?

    • loquens

      Уточните вопрос, пожалуйста. Что надо делать для чего?