The major any minor numbers of the root device are stored in the kernel image (see manpage of
rdev for more information).
Yet, the kernel commandline arguments are NOT interpreted by the kernel. The initial ramdisk, initrd, contains a filesystem with a minimal linux which usually does the interpreting part. How the initrd works depends on your distribution. It may simply contain the node /dev/sda1 or some script/programm that creates it at runtime.
If you're on a Debian based Linux you can unpack your ramdisk like so:
zcat /boot/path/to/initrd | cpio -iv
The debian initrds are scripts and you can have a look at how it works. After the kernel has unpacked the initrd it launches the script
init which you should now find in
/tmp/initrd. Note the block where it says
for x in $(cat /proc/cmdline); do.
/proc/cmdline are the arguments passed using Grub (you can check/verify that right now with your shell!). If you care to dive a little deeper into Debians initrd you will note that you can make your kernel/initrd use a NFS share as root file system by passing the option
root=/dev/nfs with Grub. When you do, no node
/dev/nfs is created or mounted. It just tells the initrd what to do.
In the end every such initrd will run the command provided by some option like
init= or the default
Coming back to your initial question in the headline: yes /init (most likely) creates that node at runtime. It uses all kinds of programms/heuristics/voodoo to figure out how to mount your root filesystem.