Додавання драйверу до образу 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 (генерація не потрібна).

Див.також[ред.]

Initrd