Додавання драйверу до образу RAM диску
Процесс додавання драйверу e1000 до образу RAM диску умовно можна поділити на 7 кроків:
- 1-й крок:
Знаходимо, де знаходиться файл initrd і копіюємо його, наприклад в папку tmp, оскільки, граючись з оригіналом, можна отримати неприємні наслідки.
$ cp /boot/initrd.img-2.6.38-13-generic /tmp/ $ cd /tmp $ file initrd.img initrd.img: gzip compressed data, from Unix, last modified: Wed Feb 29 02:14:27 2012
- 2-й крок:
Файл initrd заархівований за допомогою gunzip. Нам потрібно розархівувати його. Та перш, ніж це зробити, потрібно з файлу initrd.img створити копію з розширенням .gz : initrd.img.gz
$ mv initrd.img-2.6.38-13-generic initrd.img-2.6.38-13-generic.gz $ gzip -d initrd.img.gz
- 3-й крок:
На данний момент ми отримали бінарний файл, який нам знову необхідно розархівувати, в цей раз з допомогою cpio, та перед цим, створюємо папку, в яку ми розпакуємо файл з initrd.img:
$ mkdir /tmp/initrd $ cd /tmp/initrd $ cpio -i -d -H newc --no-absolute-filenames -F ../initrd.img-2.6.38-13-generic 56887 blocks
-i – режим розпаковування -d – дозволяє відтворити структуру каталога -H newc – визначає особливий формат, що використовується cpio архівом --no-absolute-filenames – примушує cpio розпаковувати вміст відносно того, де ми виконали команду -F – посилання на файл, з яким ми хочемо працювати
- 4-й крок:
Копіюємо драйвер в папку /lib/modules/2.6.38-13-generic/, де зберігаються інші драйвери:
$ cp ~/e1000.ko /tmp/initrd/lib/modules/2.6.38-13-generic/
- 5-й крок:
Архівуємо initrd в зворотньому порядку:
$ cd /tmp/initrd $ find . | cpio -o -H newc | gzip > /tmp/initrd.img
- 6-й крок:
Копіюємо з заміною модернізований initrd.img в /boot/
$ cp /tmp/initrd.img /boot/
- 7-й крок:
Створюємо нову конфігурацію. Для цього в у файлі grub.cfg
(зазвичай знаходиться у /boot/grub або у /boot/grub2) треба знайти код, подібний до наступного:
menuentry 'Ubuntu, ядро Linux 2.6.31-11-rt' --class ubuntu—class gnu-linux—class gnu—class os { recordfail set gfxpayload=$linux_gfx_mode insmod part_gpt insmod ext2 set root='(/dev/sda,gpt2)' search—no-floppy—fs-uuid—set=root b2751497-490f-4068-a11c-3cac8dd5e613 echo 'Loading Linux 2.6.31-11-rt ...' linux /boot/vmlinuz-2.6.31-11-rt root=UUID=b2751497-490f-4068-a11c-3cac8dd5e613 ro single echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-2.6.31-11-rt }
У останньому рядку (initrd) слід вказати повний шлях до щойно створеного образу RAM-диску (initrd.img).
Увага: даний спосіб зміни файлу grub.cfg підходить лише для тестування, оскільки цей файл є згенерованим. Правильним місцем для додавання нових конфігурацій до GRUB2 є або файл 40_custom
(з наступною генерацією grub.cfg), або custom.cfg
(генерація не потрібна).