81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -------------
 | |
|  MDEV Primer
 | |
| -------------
 | |
| 
 | |
| For those of us who know how to use mdev, a primer might seem lame.  For
 | |
| everyone else, mdev is a weird black box that they hear is awesome, but can't
 | |
| seem to get their head around how it works.  Thus, a primer.
 | |
| 
 | |
| -----------
 | |
|  Basic Use
 | |
| -----------
 | |
| 
 | |
| Mdev has two primary uses: initial population and dynamic updates.  Both
 | |
| require sysfs support in the kernel and have it mounted at /sys.  For dynamic
 | |
| updates, you also need to have hotplugging enabled in your kernel.
 | |
| 
 | |
| Here's a typical code snippet from the init script:
 | |
| [1] mount -t sysfs sysfs /sys
 | |
| [2] echo /bin/mdev > /proc/sys/kernel/hotplug
 | |
| [3] mdev -s
 | |
| 
 | |
| Of course, a more "full" setup would entail executing this before the previous
 | |
| code snippet:
 | |
| [4] mount -t tmpfs mdev /dev
 | |
| [5] mkdir /dev/pts
 | |
| [6] mount -t devpts devpts /dev/pts
 | |
| 
 | |
| The simple explanation here is that [1] you need to have /sys mounted before
 | |
| executing mdev.  Then you [2] instruct the kernel to execute /bin/mdev whenever
 | |
| a device is added or removed so that the device node can be created or
 | |
| destroyed.  Then you [3] seed /dev with all the device nodes that were created
 | |
| while the system was booting.
 | |
| 
 | |
| For the "full" setup, you want to [4] make sure /dev is a tmpfs filesystem
 | |
| (assuming you're running out of flash).  Then you want to [5] create the
 | |
| /dev/pts mount point and finally [6] mount the devpts filesystem on it.
 | |
| 
 | |
| -------------
 | |
|  MDEV Config   (/etc/mdev.conf)
 | |
| -------------
 | |
| 
 | |
| Mdev has an optional config file for controlling ownership/permissions of
 | |
| device nodes if your system needs something more than the default root/root
 | |
| 660 permissions.
 | |
| 
 | |
| The file has the format:
 | |
| 	<device regex> <uid>:<gid> <octal permissions>
 | |
| For example:
 | |
| 	hd[a-z][0-9]* 0:3 660
 | |
| 
 | |
| The config file parsing stops at the first matching line.  If no line is
 | |
| matched, then the default of 0:0 660 is used.  To set your own default, simply
 | |
| create your own total match like so:
 | |
| 	.* 1:1 777
 | |
| 
 | |
| If you also enable support for executing your own commands, then the file has
 | |
| the format:
 | |
| 	<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
 | |
| The special characters have the meaning:
 | |
| 	@ Run after creating the device.
 | |
| 	$ Run before removing the device.
 | |
| 	* Run both after creating and before removing the device.
 | |
| 
 | |
| The command is executed via the system() function (which means you're giving a
 | |
| command to the shell), so make sure you have a shell installed at /bin/sh.
 | |
| 
 | |
| For your convenience, the shell env var $MDEV is set to the device name.  So if
 | |
| the device 'hdc' was matched, MDEV would be set to "hdc".
 | |
| 
 | |
| ----------
 | |
|  FIRMWARE
 | |
| ----------
 | |
| 
 | |
| Some kernel device drivers need to request firmware at runtime in order to
 | |
| properly initialize a device.  Place all such firmware files into the
 | |
| /lib/firmware/ directory.  At runtime, the kernel will invoke mdev with the
 | |
| filename of the firmware which mdev will load out of /lib/firmware/ and into
 | |
| the kernel via the sysfs interface.  The exact filename is hardcoded in the
 | |
| kernel, so look there if you need to want to know what to name the file in
 | |
| userspace.
 |