I am trying to learn stuff about initrd. I have followed this tutorial to build my own initrd from scratch, and I installed busybox on it. Then I made an .iso from it with isolinux, so I could test it in virtualbox. It works great!
I have the basic commands from busybox, so I wanted to mount a filesystem. But the /dev directory is almost empty (no sda), except for some files I created while following the tutorial. I learned about udev and I think this is what I need. However I am not sure how to go on this.
Should I just grab the latest source code from udev, compile it and add it to my initrd? And then call /bin/udev or something like that in my init script? Or is there an other/better way to populate the /dev directory?
Edit: Some additional info and updates on what I have done already.
- I test everything in virtual box. I just installed ubuntu minimal in virtual box, made an .iso from my initrd, and then boot from the iso in virtualbox.
- I used the vmlinuz and
/lib/modulesthat were present on a debian-businesscard.iso and copied those over to my initrd which I created by following the tutorial I linked earlier.
- Kernel has
- Some devices show up in
/dev, like tty0-tty63 and some others, but no sda/hda.
lspci -kin my currently running OS and in a virtual box to check which modules are in use.
SATA Controllersays it uses
- When I execute
modprobe -v ahciit complains a lot about "unknown symbol: ata_some_stuff", but after that it returns something like
SCSI Subsystem initialized,
ATA-6: VBOX HARDDISKand
Direct-Access ATA VBOX HARDDISK. However, still no harddrive devices found in
/init/ script is as follows:
#!/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
Does anyone has any idea what I am doing wrong and what I should be doing instead?