1.
cd /dev
设备文件(也叫设备节点)点如下:
1 char Memory devices
1 = /dev/mem Physical memory access
2 = /dev/kmem Kernel virtual memory access
3 = /dev/null Null device
4 = /dev/port I/O port access
5 = /dev/zero Null byte source
6 = /dev/core OBSOLETE - replaced by /proc/kcore
7 = /dev/full Returns ENOSPC on write
8 = /dev/random Nondeterministic random number gen.
9 = /dev/urandom Faster, less secure random number gen.
10 = /dev/aio Asynchronous I/O notification interface
11 = /dev/kmsg Writes to this come out as printk's
12 = /dev/oldmem Used by crashdump kernels to access
the memory of the kernel that crashed.
2.查看当前已经加载的设备驱动程序的主设备号
root@ubuntu:/dev# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
6 lp
7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
99 ppdev
108 ppp
116 alsa
128 ptm
136 pts
180 usb
188 ttyUSB
189 usb_device
216 rfcomm
226 drm
251 hidraw
252 bsg
253 watchdog
254 rtc
Block devices:
1 ramdisk
2 fd
259 blkext
7 loop
8 sd
9 md
11 sr
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
252 device-mapper
253 virtblk
254 mdp
3.主设备号与次设备号的关系,阅读 linux - 3.1_TQ2416\Documentation\devices.txt文件。可以理解为分类,例如猫,然后分成短毛猫,加菲猫等。
例如:主设备号为19(应该是串口设备吧),设备类型是字符设备,次设备号=文件名
19 char Cyclades serial card
0 = /dev/ttyC0 First Cyclades port
...
31 = /dev/ttyC31 32nd Cyclades port
14 char Open Sound System (OSS)
0 = /dev/mixer Mixer control
1 = /dev/sequencer Audio sequencer
2 = /dev/midi00 First MIDI port
3 = /dev/dsp Digital audio
4 = /dev/audio Sun-compatible digital audio
6 =
7 = /dev/audioctl SPARC audio control device
8 = /dev/sequencer2 Sequencer -- alternate device
16 = /dev/mixer1 Second soundcard mixer control
17 = /dev/patmgr0 Sequencer patch manager
18 = /dev/midi01 Second MIDI port
19 = /dev/dsp1 Second soundcard digital audio
20 = /dev/audio1 Second soundcard Sun digital audio
33 = /dev/patmgr1 Sequencer patch manager
34 = /dev/midi02 Third MIDI port
50 = /dev/midi03 Fourth MIDI port
有上面可以知道为什么要有主设备号和次设备号,为了更好的分类。
3.
类unix系统对设备的访问都是基于文件形式的。
在类unix系统中,你要访问一个硬件设备。一般和访问一个普通文件差不多。
因此,/dev下的设备节点就被作为这样的一类特殊文件来存在。
在驱动程序中同样需要实现各种文件的操作调用,如open,release,read,write,ioctl等。
应用程序通过open("/dev/xxx",O_RDWR)这样的代码来打开设备。
驱动程序通过这样的节点向应用程序提供各种服务:如read,write,ioctl等。
一般讲驱动程序开发的书都先讲字符设备驱动,通常是写一个简单的驱动,然后insmod加载模块,mknod创建设备节点。
但是讲到设备文件系统的时候,说2.6内核引进udev设备文件系统,实现动态创建和删除文件节点,就是不用手动去mknod。
为什么就节点,体会一下,例如竹子的节,关节等。