Пересборка ядра 2.6.29.4

6 февраля 2011 - georgii-2

Перенёс georgii-2

 

Автор - eai

 

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

Выражаю респект и благодарность всем кто мне помогал в этом сложном деле
Pro http://forum.puppyrus.org/index.php?action=profile;u=496 - консультации и ценные указания
vkvkvk http://forum.puppyrus.org/index.php?action=profile;u=29 - дистрибутив Puppy-420-ru
bit777 http://forum.puppyrus.org/index.php?action=profile;u=464 - за update для клавиатуры для VESA


Что нужно скачать сразу же:
1. Исходная сборка http://www.puppyrus.org/pub/%23users/vk/4.20/Puppy-420-ru-k2.6.25.16-opera.iso
2. Еще нужен devx (тут все инструменты для сборки) ftp://ibiblio.org/pub/linux/distributions/puppylinux/sfs_modules-4/devx_420.sfs
3. Нужны исходники ядра, я взял уже поправленные прямо с оригинального puppy http://puppylinux.com/sources/kernel-2.6.29.4/linux-2.6.29.4-source-patched_loglevel_unionfs.tar.gz они не требуют доработок специальных
4. Еще мне потребовалось установить параллельно версию puppy с обновленным ядром ftp://ibiblio.org/pub/linux/distributions/puppylinux/test/woof-417alpha/pup4-417-k2.6.30.1.iso
5. Для завершенности установил пакет http://forum.puppyrus.org/index.php?action=dlattach;topic=2396.0;attach=3738, который убрал глюки клавиатуры в режиме VESA

Оборудование использованное мной
Intel Atom 1.6 встроенный в плату, 945 чипсет 2Gb памяти, винчестер SATA 120 Gb, внешний USB DVDROM и конечно монитор 17.

Запустился с cd и разметил весь винчестер как ext2
Поставил туда PuppyRus 420.
При установке был глюк, неверно писала menu для grub вместо hd(0,0) hd(1,0)
Вероятно это потому что в машине есть еще DOM IDE, который не размечен.
Поправил ручками и все поехало.

Опять запускаюсь с CD, но уже 417 оригинального puppy и ставлю на тот же раздел, menu в GRUB редактирую вручную.

Перезапускаюсь в 420 версию
1. Копирую devx в корень раздела и перезапускаюсь, после перезапуска добавляю devx в список подключаемых модулей (/mnt/home/devx_420.sfs)
2. Создаю каталог с исходниками
cd /mnt/home
mkdir src
3. Копирую туда linux-2.6.29.4-source-patched_loglevel_unionfs.tar.gz
4. Распаковываю его
tar -zxf linux-2.6.29.4-source-patched_loglevel_unionfs.tar.gz
5. Создаю ссылку linux
ln -sf /mnt/home/linux-2.6.29.4 linux
6. Создаю каталог для нового puppy
mkdir /mnt/home/puppy-new420
7. Создаю ссылку boot
cd /
ln -sf /mnt/home/puppy-new420 boot
8. Создаю ссылку src
cd /usr
ln -sf /mnt/home/src src

9. теперь непосредственно сборка ядра
cd /usr/src/linux
make menuconfig // эта команда понадобилась мне что бы выставить AGP как часть ядра
после того как ручками поправил, сохранил новую конфигурацию:

make
make modules
make install
make modules_install

Уф, ядро собрано, теперь сложная задача по созданию initrd.gz
Все что пишу нащупано мной интуитивно и может быть неверным ... но работает

1. Создаю каталог с образом
cd /mnt/home
mkdir initrd
cd initrd

2. развертываю образ
gzip -cd /mnt/home/puppy-ru420/initrd.gz | cpio -imd --quiet

3. Открываю на редактирование скрипт init и меняю
LAYERSFS = aufs на LAYERSFS = unionfs
aufs -чета работать не захотел

4. Создаем каталог модулей
cd lib/modules
mkdir 2.6.29.4
cd 2.6.29.4
mkdir crypto
mkdir drivers
mkdir fs
cd drivers
mkdir block
mkdir hib
mkdir pcmcia
mkdir scsi
mkdir ssb
mkdir usb
cd hib
mkdir usbhib
cd ../usb
mkdir core
mkdir host
mkdir storage
cd ../../fs
mkdir fuse
mkdir nls
mkdir squashfs
mkdir unionfs

5. теперь файл за файлом перетаскиваем модули KO в эти каталоги (модули нужно искать в /lib)
crypto aes_generic.ko cbc.ko
и тут же упаковвываем в этом каталоге командой gzip *
в результате получаем aes_generic.ko.gz cbc.ko.gz

Далее просто листинг файлов по каталогам, операция аналогична
drivers/block cryptoloop.ko
drivers/hib/usbhib usbhib.ko
drivers/pcmcia rsrc_nostatic.ko yenta_socket.ko
drivers/scsi scsi_wait_scan.ko
drivers/ssb ssb.ko
drivers/usb/core usbcore.ko
drivers/usb/host ehci_hcd.ko ohci_hcd.ko uhci_hcd.ko
drivers/usb/storage usb-storage.ko
fs/fuse  fuse.ko
fs/nls nls_cp437.ko nls_iso8859-1.ko
fs/squashfs  squashfs.ko
fs/unionfs unionfs.ko

6. Обновляем зависимости
depmod -b /mnt/home/initrd 2.6.29.4

7. Собираем initrd.gz
find . | cpio -o -H newc | gzip -9 -n > /mnt/home/puppy-new420/initrd.gz


Прописываем в меню груб опцию номер 3, запуск с новой паппи с нового каталога

Осталось пересобрать sfs для новой версии так как в новом ядре squqshfs несовместимой версии

1. командой unsquashfs распаковвываем pup_420-ru.sfs
2. Перезапускаемся в версию 417
3. Командой mksquashfs запкаковвываем ранее распакованный каталог и помещаем готовый файл в /mnt/home/puppy-new420

(если собираетесь devx использовать то его тоже надо перепаковать аналогичным методом)

перегружаемся, момент истины.