Saya mencoba mempelajari hal-hal tentang initrd. Saya telah mengikuti tutorial ini untuk membangun initrd saya sendiri dari awal, dan saya menginstal busybox di atasnya. Lalu saya membuat iso dari itu dengan isolinux, jadi saya bisa mengujinya di virtualbox. Ini sangat bagus!
Saya memiliki perintah dasar dari busybox, jadi saya ingin me-mount sistem file. Tetapi direktori / dev hampir kosong (tidak ada sda), kecuali untuk beberapa file yang saya buat saat mengikuti tutorial. Saya belajar tentang udev dan saya pikir inilah yang saya butuhkan. Namun saya tidak yakin bagaimana melanjutkan ini.
Haruskah saya mengambil kode sumber terbaru dari udev, kompilasi dan tambahkan ke initrd saya? Dan kemudian memanggil / bin / udev atau sesuatu seperti itu di skrip init saya? Atau adakah cara lain yang lebih baik untuk mengisi direktori / dev?
Sunting: Beberapa info tambahan dan pembaruan tentang apa yang telah saya lakukan.
- Saya menguji semuanya dalam kotak virtual. Saya baru saja menginstal minimal ubuntu di kotak virtual, membuat iso dari initrd saya, dan kemudian boot dari iso di virtualbox.
- Saya menggunakan vmlinuz dan
/lib/modules
yang ada pada debian-businesscard.iso dan menyalinnya ke initrd saya yang saya buat dengan mengikuti tutorial yang saya tautkan sebelumnya. - Kernel telah
CONFIG_DEVTMPFS=y
- Beberapa perangkat muncul
/dev
, seperti tty0-tty63 dan beberapa lainnya, tetapi tidak ada sda / hda. - Berlari
lspci -k
di OS saya yang sedang berjalan dan di kotak virtual untuk memeriksa modul mana yang digunakan.SATA Controller
mengatakan itu digunakanahci
sebagai modul. - Ketika saya menjalankannya
modprobe -v ahci
banyak mengeluh tentang "simbol tidak dikenal: ata_some_stuff", tetapi setelah itu mengembalikan sesuatu sepertiSCSI Subsystem initialized
,ATA-6: VBOX HARDDISK
danDirect-Access ATA VBOX HARDDISK
. Namun, masih belum ada perangkat harddisk yang ditemukan di/dev
.
/init/
Script saya saat ini adalah sebagai berikut:
#!/bin/ash
mount -t devtmpfs none /dev
mount -t proc /proc /proc
mount -t sysfs none /sys
modprobe -v ahci
echo "Hello world"
exec /bin/ash --login
Adakah yang tahu kesalahan saya dan apa yang seharusnya saya lakukan?
CONFIG_DEVTMPFS=y
, tapi saya masih belum mendapatkan perangkat sda. Saya pikir ini karena saya belum memuat modul apa pun (lsmod tidak mengembalikan apa pun). Modul apa yang harus saya muat untuk mendapatkan perangkat sistem file? Atau ada hal lain yang saya lupa?/dev
, tidak hanya drive, maka devtmpfs bekerja dan Anda kemungkinan besar kehilangan modul pengontrol disk (seperti yang Anda duga). Sayangnya satu-satunya cara untuk mengetahui driver / modul yang Anda butuhkan adalah dengan membaca informasi untuk masing-masing di konfigurasi kernel, atau menjalankanlspci -k
dalam sistem linux yang sedang berjalan (yang akan menunjukkan kepada Anda apa driver kernel berbagai komponen sistem Anda menggunakan) .CONFIG_DEVTMPFS_MOUNT=y
tidak memiliki efek pada initramfs. Dari teks bantuan kernel: "Opsi ini tidak memengaruhi booting berbasis initramfs, di sini sistem file devtmpfs selalu perlu di-mount secara manual setelah rootfs di-mount"Udev mengisi
/dev
secara otomatis berdasarkan driver yang dimuat ke dalam kernel dan perangkat yang dideteksi driver ini. Nama-nama perangkat dan izinnya didasarkan pada seperangkat aturan yang dapat disesuaikan oleh administrator. Sebagian besar sistem Linux harus menggunakan udev; pengecualiannya adalah sistem (biasanya tertanam) di mana konfigurasi perangkat keras diketahui pada saat sistem diatur dan tidak akan berubah setelahnya.Anda biasanya akan menelepon
udev
cukup awal dalam urutan startup Anda. Salah satu dari beberapa hal yang harus (harus Anda lakukan) sebelum itu adalah mount/proc
dan/sys
. Setelah memulai daemon, panggiludevadm trigger --action=add; udevadm settle
untuk membuat udev memproses semua peristiwa yang tertunda dari kernel (trigger
) dan menunggu hingga acara diproses sebelum melanjutkan (settle
). Anda kemudian dapat melanjutkan untuk menemukan perangkat yang berisi sistem file root.Selain
udevd
biner, Anda akan membutuhkan bagian lain dariudev
initrd Anda. Ini termasuk file konfigurasi di/etc/udev
, konfigurasi dasar di/lib/udev
serta binari pembantu sepertiscsi_id
juga di/lib/udev
. Anda memerlukan semua program yang dipanggil dari aturan udev yang Anda sertakan di initrd.Di akhir initrd, sebelum mentransfer kontrol ke partisi root sebenarnya, Anda harus berhenti
udevd
seperti setiap program lain dari initrd. Ini tidak menghapus perangkat apa pun dari/dev
. Gunakanmount --move /dev /root/dev
untuk memindahkan yang dipasang/dev
ke root nyata.Gentoo memiliki panduan initramfs dan halaman wiki initramfs yang menyebutkan udev. Initramfs adalah penerus modern untuk initrd, menggunakan arsip cpio daripada gambar filesystem, dan dengan antarmuka proses yang berbeda (pada initrd,
/linuxrc
harus keluar, sedangkan pada initramfs, initramf/init
harusexec
dari init ke root asli); sebagian besar sistem telah beralih hari ini (bahkan jika file tersebut mungkin masih disebut initrd).sumber
lsmod
sistem kerja. Jadi mulailah dengan semuanya, lalu pangkas dengan cerdas jika Anda perlu menghemat ruang.