一、/proc/devices 和 /dev/

敲命令cat /proc/devices可以显示系统中已注册的char和block设备
第一列是major设备号,第二列是设备name
  1. [root@local kernel_mpme_ppc_linux_2_6_24]# cat /proc/devices
  2. Character devices:
  3.   1 mem
  4.   4 /dev/vc/0
  5.   4 tty
  6.   4 ttyS
  7.   5 /dev/tty
  8.   5 /dev/console
  9.   5 /dev/ptmx
  10.   6 lp
  11.   7 vcs
  12.  10 misc
  13.  13 input
  14.  29 fb
  15.  36 netlink
  16.  ..................
上面两列数据哪来的?从下面函数里来的:
  1. 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
  1. -bash-3.2# mknod /dev/todel c 255 0
  2. -bash-3.2# ll /dev/todel
  3. crw-r--r-- 1 root root 255, 0 Jan 1 08:39 /dev/todel

使用awk工具可以从/proc/devices 文件中获取设备号并创建节点,脚本文件如下:
  1. #xxx为设备名
  2. module=xxx
  3. major=`awk "\\$2==\"$module\" {print \\$1}" /proc/devices`
  4. insmod xxx.ko
  5. 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
02-08 05:30