Компиляция ядра 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>