файл kernel.img
При використанні ядра Linux kernel.imgфайл просто перейменований linux/arch/arm/boot/Image. Також має бути можливість (або принаймні це можна було востаннє перевірити) використовувати стиснуту версію цього файлу - zImage. Він може містити інтегрований initramfs(ramdisk), але це не потрібно. Наприклад, kernel.imgфайл акцій не містить initramfsдоки kernel_emergency.img.
Примітка. Офіційний посібник зі збирання ядра на wiki eLinux пропонує використовувати imagetool-uncompressed.pyінструмент для підготовки kernel.imgфайлу. Це було необхідно в перші дні RaspberyPi але тепер Завантажувач може обробляти регулярні Imageі zImageфайли.
Випуск джерел ядра
Що дуже важливо, це те, що, будуючи ядро для RaspberryPi, ви не можете просто використовувати будь-яку його версію. Працює лише спеціальна версія, яка переноситься на RaspberryPi. На жаль, поточна версія за течією (знайдена на kernel.orgсайті) не сумісна з RaspberryPi. Крім того, versatil_configце не добре для RaspberryPi, ви повинні використовувати bcmrpi_defconfigзамість цього (знайдений у сумісних джерелах ядра RaspberryPi) або bcmrpi_emergency_defconfigякщо ви плануєте використовувати buildin initramfs.
Інструкція зі створення ядра
Найкраще місце для захоплення джерел ядра для RaspberryPi - це фундамент github . Ви також можете знайти кілька корисних пояснень, як його отримати та як скласти на офіційній вікі RasbperryPi . Ось моя невелика спрощена версія цих кроків (ПРИМІТКА. Я припускаю, що ви хочете перехрестити компіляцію ядра. Це набагато швидше і має створити ті самі результати, але також можливе створення ядра на RaspberryPi):
Завантажте офіційний ланцюжок інструментів, щоб створити свій власний. З іншого боку, я припускаю, що це встановлено в /usr/bin/arm-linux-gnueabi-*. Якщо ви маєте його в іншому місці, вам слід змінити CROSS_COMPILEпараметр у всіх своїх makeкомандах.
Перейдіть на https://github.com/raspberrypi/linux сайт, де ви можете знайти офіційні джерела ядра RapsberryPi. Завантажити код можна двома способами:
- Як стислий файл (щоб скористатися цією опцією, вам не потрібно встановлювати
gitутиліту, і ви можете це зробити навіть на самому RapsberryPi): Клацніть на ZIPпіктограму, трохи нижче Codeвкладки вгорі сайту. Це дозволить вам завантажувати файли пізніх джерел у вигляді zipфайлів. Ви можете використовувати git, щоб зробити це замість цього, але для цього (як описано у вікі) знадобиться набагато більше місця та часу. Потім розпакуйте файл, щоб отримати дерево-джерело.
Використання gitутиліти (це не спрацювало для мене на RaspberryPi, оскільки є мало об'єм оперативної пам’яті, мабуть, але він повинен працювати нормально на настільних системах (зверніть увагу на --depth 1аргумент, який не дозволяє Git завантажувати всю історію розвитку (яка величезна):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Використовуйте конфігурацію за замовчуванням, що постачається фундаментом:
cp arch/arm/configs/bcmrpi_defconfig .config
Запустіть make oldconfigі дайте відповіді на деякі запитання (добре буде ввести кожне питання, залишаючи відповідь за замовчуванням):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Складіть ядро:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Скопіюйте модулі ядра в /tmp/modules:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Використовувати Imageфайл якkernel.img
Завантажте всі модулі з з /tmp/modules/lib/modules/вашого комп’ютера в /lib/modules/каталог на ваших коренях RaspberryPi.
Додавання initramfs
Однак це не дає інструкцій щодо створення initramfs. Оскільки це дуже широка тема (в основному, ви повинні створити працююче середовище користувальницького простору користувача, а насправді немає обмежень щодо того, наскільки це може бути складно), я зараз не буду висвітлювати це. Зауважу лише, що initramfsйого можна використовувати у двох різних формах - окремій, де це окремий файл та buildin, де він інтегрований з файлом зображення ядра (як у ньому kernel_emergency.img). Другий варіант повинен підтримуватися завантажувачем RaspberryPi, але є чутки про те, що він порушений у поточній версії прошивки, тому, ймовірно, слід використовувати buildin версію.
Найкращий спосіб розпочати - використовувати робочий вміст initramfs (який використовується для kernel_emergency.img), завантаживши його з іншого сховища основного github і лише після того, як ви зможете завантажувати ядро за допомогою цього iniramfsзображення, спробуйте створити свій власний. Все, що для цього потрібно, - це вказати на завантажений каталог з CONFIG_INITRAMFS_SOURCEможливістю налаштування ядра.
Підсумкові ноти
Тому слід зробити це в 3 дії:
- Спробуйте створити і завантажити ядро без
initramfsфайлу.
- Спробуйте додати готовий
initramfsвміст до свого ядра.
- Змініть цей
initramfsвміст відповідно до ваших потреб.