файл 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
вміст відповідно до ваших потреб.