How is /dev/zero created and how can I make variants like /dev/one?

I read the mknod man page, which is (as far as I can tell) what you would use to make a character device like /dev/zero, but I don't see how you would get it to yield an infinite stream of zero bits (or another pattern). What is the procedure for creating such character devices?


Solution 1:

All mknod does is associate a device file with a device driver. There are device drivers that implement interaction with actual devices, and there are device drivers that just react to read-write requests in useful ways. If you want to you can sit down and write a driver that returns the lyrics of the Star Spangeled Banner. But it's a matter of coding, not finding the right arguments for mknod.

Solution 2:

mknod creates the device node, but the VFS detects accesses to the device node and reroutes them to the appropriate driver within the kernel for handling. All device nodes, from /dev/null to /dev/sdX to /dev/ttyXX to /dev/videoX are handled this way.