敲命令cat /proc/devices可以显示系统中已注册的char和block设备
第一列是major设备号,第二列是设备name
- [root@local kernel_mpme_ppc_linux_2_6_24]# cat /proc/devices
- Character devices:
- 1 mem
- 4 /dev/vc/0
- 4 tty
- 4 ttyS
- 5 /dev/tty
- 5 /dev/console
- 5 /dev/ptmx
- 6 lp
- 7 vcs
- 10 misc
- 13 input
- 29 fb
- 36 netlink
- ..................
- devno =MKDEV(dbg_major,0); //dbg_major就是major设备号
result = register_chrdev_region(devno,1, name); //name就是显示在/proc/devices里的名字
/dev/下的设备文件是通过mknod加上去的,用户这里的文件来访问驱动。
格式:mknod device1 c/b major minor
- -bash-3.2# mknod /dev/todel c 255 0
- -bash-3.2# ll /dev/todel
- crw-r--r-- 1 root root 255, 0 Jan 1 08:39 /dev/todel
使用awk工具可以从/proc/devices 文件中获取设备号并创建节点,脚本文件如下:
- #xxx为设备名
- module=xxx
- major=`awk "\\$2==\"$module\" {print \\$1}" /proc/devices`
- insmod xxx.ko
- mknod /dev/xxx c $major 0
二、/dev/mem 和/dev/kmem 的区别
/dev/mem:
物理内存的全镜像。可以用来访问物理内存。
用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO。
用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存,用来实现用户空间和驱动共享内存
/dev/kmem:
kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容
一般可以用来查看kernel的变量,或者用作rootkit之类的
/dev/mem可能需要手动创建 mknod /dev/mem c 1 1
详见此贴 http://blog.chinaunix.net/space.php?uid=24148050&do=blog&id=359666