Manual Kernel — پیکربندی دستی هسته
آموزش کامل پیکربندی و ساخت دستی هسته در Gentoo با make menuconfig، گزینههای کلیدی، ساخت bzImage و مدیریت savedconfig.
ساخت دستی هسته (Manual Kernel) سنتیترین و در عین حال قدرتمندترین روش نصب هسته در Gentoo است. در این روش شما با make menuconfig دقیقاً تعیین میکنید چه چیزی داخل هسته باشد، چه چیزی بهصورت ماژول بارگذاری شود و چه چیزی حذف گردد. نتیجه، هستهای کاملاً متناسب با سختافزار شماست — سبک، سریع و بهینه.
پیشنیازها
پیش از شروع، باید این ابزارها نصب باشند:
# ابزارهای ضروری ساخت کرنل
emerge --ask sys-devel/gcc sys-devel/make sys-devel/bc
emerge --ask sys-libs/ncurses # برای menuconfig
emerge --ask sys-kernel/gentoo-sources
emerge --ask sys-kernel/linux-firmware
# بررسی نصب
eselect kernel list
eselect kernel set 1
cd /usr/src/linuxمسیر /usr/src/linux
دستورات پیکربندی و ساخت هسته باید در مسیر /usr/src/linux اجرا شوند که یک symlink به سورس فعال است. این symlink را با eselect kernel مدیریت کنید.
ابزارهای پیکربندی
هسته چندین رابط پیکربندی دارد:
| دستور | محیط | توضیح |
|---|---|---|
make menuconfig | ترمینال (ncurses) | رایجترین، نیازمند ncurses |
make nconfig | ترمینال (ncurses) | نسخه مدرنتر menuconfig با امکانات بیشتر |
make xconfig | گرافیکی (Qt) | نیازمند qttools، تصویری و ساده |
make gconfig | گرافیکی (GTK) | نیازمند gtk، تصویری |
make oldconfig | ترمینال | فقط گزینههای جدید را میپرسد |
make defconfig | خودکار | پیکربندی پیشفرض کرنل |
make localmodconfig | خودکار | فقط ماژولهای فعلی سیستم را شامل میشود |
برای شروع، پیکربندی پیشفرض را بارگذاری کنید:
# بارگذاری پیکربندی پیشفرض
make defconfig
# یا کپی پیکربندی فعلی سیستم در حال اجرا
zcat /proc/config.gz > .config
# باز کردن منوی پیکربندی
make menuconfigproc/config.gz
اگر هستهٔ فعلی شما با گزینهٔ CONFIG_IKCONFIG_PROC ساخته شده باشد، فایل /proc/config.gz شامل پیکربندی هستهٔ در حال اجراست. این یک نقطهٔ شروع عالی برای پیکربندی جدید است.
گزینههای کلیدی پیکربندی
این جدول مهمترین گزینههایی است که باید بررسی کنید. هر گزینه با یک مسیر در منو مشخص میشود:
| مسیر | گزینه | مقدار پیشنهادی | توضیح |
|---|---|---|---|
Processor type and features | Processor family | Core2/newer Xeon یا Generic-x86-64 | بهینهسازی برای پردازنده |
Processor type and features | Preemption Model | Voluntary Preemption (Desktop) | پاسخگویی دسکتاپ |
Power management | CPU Frequency scaling | on | مدیریت فرکانس CPU |
File systems | ext4 | * (built-in) | سیستمفایل ریشه |
File systems | btrfs | M (module) یا * | اگر از btrfs استفاده میکنید |
File systems | VFAT | M | برای ESP و فلش USB |
File systems | NTFS | M | برای دسترسی به ویندوز |
Device Drivers | AHCI/SATA support | * | درایور دیسک SATA |
Device Drivers | NVMe support | * | برای SSDهای NVMe |
Device Drivers | USB support | * | پشتیبانی USB |
Device Drivers | Network device support | * و M | کارت شبکه |
Graphics support | DRM | * | زیرساخت گرافیکی |
Graphics support | DRM driver for Intel/AMD/NVIDIA | بسته به GPU | درایور گرافیکی |
Sound card support | Advanced Linux Sound Architecture | * | صدا |
Networking support | TCP/IP networking | * | شبکه |
General setup | initramfs support | * اگر initramfs دارید | پشتیبانی از initramfs |
درایور ریشه باید built-in باشد
اگر هستهٔ شما بدون initramfs بوت میشود، درایور کنترلر دیسک (مانند AHCI یا NVMe) و سیستمفایل ریشه (مانند ext4) حتماً باید بهصورت built-in (با *) باشند، نه ماژول. در غیر این صورت هسته نمیتواند ریشه را سوار کند و با خطای VFS: Unable to mount root fs متوقف میشود.
ساخت هسته
پس از پیکربندی، هسته را بسازید:
# ساخت کرنل و ماژولها (با -jN برای موازیسازی)
make -j$(nproc)
# خروجی:
# CALL scripts/checksyscalls.sh
# DESCEND objtool
# BUILD arch/x86/boot/bzImage
# Kernel: arch/x86/boot/bzImage is ready
# نصب ماژولها
make modules_install
# خروجی:
# INSTALL /lib/modules/6.6.21-gentoo/kernel/drivers/...
# DEPMOD 6.6.21-gentoo
# نصب کرنل (کپی bzImage, System.map, .config به /boot)
make install
# خروجی:
# INSTALL /boot
# bzImage is ready in /boot/vmlinuz-6.6.21-gentoo
# System.map is ready in /boot/System.map-6.6.21-gentoo
# config is ready in /boot/config-6.6.21-gentooبرای معماریهای دیگر، هدف build متفاوت است:
# برای ARM64
make ARCH=arm64 CROSS_COMPILE=aarch64-unknown-linux-gnu- -j$(nproc)ساخت initramfs با genkernel
اگر از LVM، LUKS یا سیستمفایل پیچیده استفاده میکنید، به initramfs نیاز دارید:
# نصب genkernel
emerge --ask sys-kernel/genkernel
# ساخت و نصب initramfs فقط
genkernel --install initramfs
# خروجی:
# * Gentoo Linux Genkernel; Version 4.3.16
# * Running with options: --install initramfs
# * Using genkernel.conf from /etc/genkernel.conf
# * initramfs: >> Initializing...
# * >> --initramfs-overlay...
# * >> Appending devices cpio data...
# * >> Appending base_layout cpio data...
# * >> Compressing cpio data (.lz4)...
# * >> Created initramfs at /boot/initramfs-6.6.21-gentoo.imgبرای سفارشیسازی، /etc/genkernel.conf را ویرایش کنید:
# /etc/genkernel.conf
# فشردهسازی با zstd
COMPRESS_INITRD="yes"
COMPRESS_INITRD_TYPE="zstd"
# پشتیبانی از LUKS
LUKS="yes"
# پشتیبانی از LVM
LVM="yes"
# بارگذاری microcode
MICROCODE="all"نصب هسته با روش دستی (دستور cp)
برای کنترل کامل، میتوانید بهجای make install فایلها را دستی کپی کنید:
# کپی bzImage
cp arch/x86/boot/bzImage /boot/vmlinuz-6.6.21-gentoo
# کپی System.map
cp System.map /boot/System.map-6.6.21-gentoo
# کپی فایل پیکربندی
cp .config /boot/config-6.6.21-gentoo
# ساخت initramfs با dracut
emerge --ask sys-kernel/dracut
dracut --kver 6.6.21-gentoosavedconfig برای پیکربندی قابل بازتولید
Gentoo از قابلیت savedconfig پشتیبانی میکند که پیکربندی هسته را در /etc/portage/savedconfig/ ذخیره میکند تا نصبهای بعدی همان پیکربندی را داشته باشند:
# فعال کردن USE flag savedconfig
echo "sys-kernel/gentoo-sources savedconfig" >> /etc/portage/package.use/kernel
# ذخیره پیکربندی فعلی
mkdir -p /etc/portage/savedconfig/sys-kernel
cp /usr/src/linux/.config /etc/portage/savedconfig/sys-kernel/gentoo-sources-6.6.21
# نصب بعدی از همین پیکربندی استفاده میکند
emerge --ask sys-kernel/gentoo-sourcesمزیت savedconfig
با savedconfig، هر بار که Gentoo سورس هستهٔ جدید را ارائه میدهد، میتوانید با make oldconfig تنها گزینههای جدید را انتخاب کنید و پیکربندی قدیمی حفظ میشود. این روش برای سرورها و نصبهای تکرارپذیر عالی است.
مدیریت وابستگیهای هسته با make oldconfig
وقتی سورس هستهٔ جدیدی نصب میکنید، پیکربندی قبلی را روی آن اعمال کنید:
# کپی پیکربندی قدیمی
cp /boot/config-6.6.16-gentoo /usr/src/linux/.config
# اعمال روی سورس جدید
make olddefconfig # گزینههای جدید با پیشفرض
# یا
make oldconfig # گزینههای جدید را تعاملی میپرسدmake oldconfig و config drift
اگر فاصلهٔ بین دو نسخهٔ هسته زیاد باشد (مثلاً از 5.15 به 6.6)، make oldconfig ممکن است گزینههای جدید زیادی را بهصورت تعاملی بپرسد و انتخاب اشتباه میتواند منجر به بوت نشدن شود. همیشه پس از make oldconfig با make menuconfig پیکربندی نهایی را بازبینی کنید.
خطاهای رایج
۱. هسته بوت نمیشود — Unable to mount root fs
VFS: Unable to mount root fs on unknown-block(0,0)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)دلیل: درایور کنترلر دیسک یا سیستمفایل ریشه بهصورت ماژول است و initramfs هم ندارید. راهحل:
cd /usr/src/linux
make menuconfig
# بررسی کنید:
# Device Drivers -> SATA/PATA -> AHCI = * (built-in)
# File systems -> ext4 (یا سیستمفایل ریشه خود) = * (built-in)
make -j$(nproc) && make modules_install && make install۲. نبودِ درایور گرافیکی
[drm] *ERROR* GPU HANG: ecode 9:1:...دلیل: درایور DRM برای GPU شما داخل هسته نیست یا نسخهٔ اشتباه است. راهحل:
make menuconfig
# Graphics support -> DRM -> خود GPU را روشن کنید
# برای Intel: DRM_I915
# برای AMD: DRM_AMDGPU
# برای NVIDIA (Nouveau): DRM_NOUVEAU۳. خطای ماژولهای خارجی پس از بهروزرسانی
FATAL: Module nvidia not foundدلیل: ماژولهای خارجی (NVIDIA، VirtualBox) برای هستهٔ جدید ساخته نشدهاند. راهحل:
emerge --ask @module-rebuild
# یا
module-rebuild rebuild۴. خطای nvme در initramfs
dracut: FATAL: Module nvme not foundدلیل: درایور NVMe را بهصورت built-in ساختهاید اما dracut آن را در initramfs جستجو میکند. راهحل: درایور را به ماژول (M) تغییر دهید یا add_drivers را در /etc/dracut.conf.d/ خالی کنید.
خلاصه و مرحله بعد
ساخت دستی هسته در Gentoo یکی از ارزشمندترین مهارتهاست. شما کنترل کاملی روی سختافزار و ویژگیهای هسته دارید، اما مسئولیت بیشتری هم بر دوش شماست. همیشه پس از پیکربندی، با make menuconfig بازبینی کنید و یک initramfs مناسب بسازید.
برای مقایسه با روش آماده، آموزش Distribution Kernel را ببینید. پس از نصب هسته، باید GRUB را نصب کنید. اگر هنوز وارد chroot نشدهاید، آموزش chroot را مرور کنید. برای مرور کلی مسیرهای نصب، آموزش نصب Kernel را ببینید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.