Компиляция ядра iPAQ H5550

автор: Урманов Марат




Начну с того, что возможно два пути сборки ядра. Это вручную и используя OpenEmbedded Достоинством OE является возможность собирать готовый дистрибутив, скажем Opie, со своим собственным, пропатченным ядром. Но так как на данный момент мне это не нужно то я расскажу как компилить ядро вручную. Нам нужна машина с линуксом (я использовал SuSe 9.3) c установленным gcc и bison (у меня соответственго версии 3.3.5 и 1.8). Создаем папку проекта, например /usr/src/familiar:

host:/usr/src # mkdir familiar

Скачиваем prebuild toolchain (используемый для кроскомпиляции) Распаковываем:

host:/usr/src/familiar # tar –C / -jxf arm-linux-gcc-3.3.2.tar.bz2 (распакуется в каталог /usr/local/arm…)

Делаем доступными комынды arm-linux…:

host:/usr/src/familiar # export PATH=/usr/local/arm/3.3.2/bin:$PATH

Получаем последнюю версию исходников ядра в каталог linux-2.4.19-rmk6-pxa1-hh:

host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs checkout -d linux-2.4.19-rmk6-pxa1-hh linux/kernel

Если нам нужна другая версия исходников ядра, то смотрим версии которые есть по Makefile’у и качаем соответственно версию которая нужна:

host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs rlog linux/kernel/Makefile
host:/usr/src/familiar # cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs checkout –r K2-4-19-rmk6-pxa1-hh37 -d linux-2.4.19-rmk6-pxa1-hh37 linux/kernel

Устанавливаем headers на наши исходники:

host:/usr/src/familiar # cd /usr/include
host:/usr/include # ln –s /familiar/linux-2.4.19-rmk6-pxa1-hh/include/asm-arm asm
host:/usr/include # ln –s /familiar/linux-2.4.19-rmk6-pxa1-hh/include/linux linux

Теперь устанавливаем нужные нам патчи. Для возможности использовать одновременно bluetooth и WiFi скачиваем патч в каталог наших исходников и применяем:

host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # pathc –p1 < patch-hwuart

для исправления работы joypad изменяем файл ../arch/arm/match-pxa/h5400_asic_io.c в соответствиии с патчем. Проблема с потерей bluetooth’ом пакетов и автоматическое определение включения/выключения наушников включены в ядре hh40 и выше. Если вы собираете более старое ядро, то можете скачать патч для автоматического определения включения/выключения наушников в каталог исходников и применить с помощью команды patch -p2 < patch-... Проблема кнопки регулировки громкости решается примененением патча Дмитрия Коровкина. Вот собственно и все. Все готово к компиляции ядра для нашего iPAQ:

host:/usr/include # cd /usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh #
host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make ipaqpxa_config

host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make oldconfig


при выполнении make oldconfig нужно установить параметр CONFIG_PXA_HWUART=y


host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make dep

host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make zImage

host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make modules

Если все нормально то устанавливаем модули (пока локально):

host:usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh # make INSTALL_MOD_PATH=PATH modules_install

Где PATH директория в которую должны быть установлены модули, в соответствии с версией ядра в файле Makefile. Например /lib/modules/2.4.19-rmk6-pxa1-hh40. Не обращайте внимания на ошибки связанные с depmod, зависимости мы создадим позже. В ядре драйвера для wireless нет, нужно компилить его отдельно. В настоящее время используется драйвер at76c503a Получаем исходники:

host:usr/src/familiar/ # cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/at76c503a login (при запросе пароля нажимаем Enter)
host:usr/src/familiar/ # cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/at76c503a co at76c503a

редактируем Makefile указывая на наши исходники ядра, и наш кросскомпилятор:

host:usr/src/familiar/ # cd at76c503a
host:usr/src/familiar/at76c503a # vi Makefile

----редактируем следующие строки---------
СС=arm-linux-gcc
KERNEL_VERSION=(версия собираемого ядра для наладонника, например так
KERNEL_VERSION=2.4.19-rmk6-pxa1-hh40)
KERNEL_SR=(директория исходников ядра, например /lib/modules/2.4.19-rmk6-pxa1-hh40/build)
------------------------------------------

host:usr/src/familiar/at76c503a # make
host:usr/src/familiar/at76c503a # make install

Модуль драйвера должен скомпилироваться в директорию /lib/modules/2.4.19-rmk6-pxa1-hh40/kernel/drivers/net/wireless/at76c503


Теперь приступим к установке нового ядра на наш наладонник. Архивируем каталог с установленными модулями:

host:/lib/modules/ # tar –czf 2.4.19-rmk6-pxa1-hh40.tar.gz 2.4.19-rmk6-pxa1-hh40/

Переименовываем и архивируем само ядро zImage которое находится в каталоге ../arch/arm/boot/:

host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh/arch/arm/boot # cp zImage zImage-new
host:/usr/src/familiar/linux-2.4.19-rmk6-pxa1-hh/arch/arm/boot # tar –czf zImage-new.tar.gz zImage-new

Получившиеся два файла копируем на наш наладонник любым удобным способом и разархивируем в нужные директории(модули в /lib/modules/, ядро в /boot):

root@h5550:/media/card# tar –C /libmodules -xzf 2.4.19-rmk6-pxa1-hh40.tar.gz
root@h5550:/media/card# tar –C /boot –xzf zImage-new.tar.gz
root@h5550:/media/card# cd /lib/modules/2.4.19-rmk6-pxa1-hh40
root@h5550:/lib/modules/2.4.19-rmk6-pxa1-hh40# rm build
root@h5550:/lib/modules/2.4.19-rmk6-pxa1-hh40# cd ../
root@h5550:/lib/modules# chown -R root.root 2.4.19-rmk6-pxa1-hh40/

Устанавливаем линк на новое ядро, старое пока сохраняем на случай восстановления(и запомните как оно называется, пригодится):

root@h5550:/boot/# rm zImage
root@h5550:/boot/# ln –s /zImage-new zImage

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

boot>

Указываем старое ядро которое хотим загрузить:

boot> set kernel_filename /boot/old_kernel
boot> boot


Copyright (C) 2003-2005 Marat Urmanov <my-ipaq@narod.ru>