insmod xxx.ko 加载模块
lsmod 查看模块
rmmod xxx.ko 卸载模块
ls /dev/xxx 查看dev下是否安装了此设备 xxx为设备名
如 ls /dev/led*
# ls /dev/led*
/dev/led1 /dev/led2 /dev/led3 /dev/leds
cat proc/devices 查看主设备号
mknod /dev/xxx c 250 0 手动指定主设备号和次设备号,也可以在代码中调用函数创建
ls /sys/class 查看sys中是否有该设备命名的类
ls /sys/class/xxx -l 查看该类下的设备
例如
# ls /sys/class/leds -l
看到的信息如下,其中leds是设备名
drwxr-xr-x 2 0 0 0 Jan 1 01:19 led1
drwxr-xr-x 2 0 0 0 Jan 1 01:19 led2
drwxr-xr-x 2 0 0 0 Jan 1 01:19 led3
drwxr-xr-x 2 0 0 0 Jan 1 01:19 leds
进一步查看
# ls /sys/class/leds/led1
dev subsystem uevent
继续查看
# cat /sys/class/leds/led1/dev
231:1
# cat /sys/class/leds/led2/dev
231:2
# cat /sys/class/leds/led3/dev
231:3
# cat /sys/class/leds/leds/dev
231:0
其中leds设备可以是三个led合在一起操作,而led1,led2,led3可以分别操作每个led
为什么在代码中调用MKDEV就会自动生成这些设备呢?是因为下面的脚本文件
vi /etc/init.d/rcS
可以看到该脚本内容
#!/bin/sh
ifconfig eth0 192.168.1.17
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
if [ ! -e /etc/pointercal ]
then
/bin/ts_cal.sh
fi
/bin/qpe.sh &
~
~
~
~
~
~
~
~
~
~
- /etc/init.d/rcS 13/13 100%
insmod和rmmod时相当于热插拔,根据该脚本,热插拔就会调用/sbin/mkdev创建设备和卸载设备
man 2 open 查看调用open函数必须用到的头文件
注意设备名和模块名是不一样的.
register_chrdev(LED_MAJOR, "device_name", &s3c24xx_leds_fops);
"device_name" 在cat /proc/devices中可以看到
leds_class = class_create(THIS_MODULE, "led_class");
"led_class"在ls /sys/class 中可以看到,是一个目录名
leds_class_devs[0] = class_device_create(leds_class, NULL, MKDEV(LED_MAJOR, 0), NULL, "leds"); /* /dev/leds */
"leds"在 ls /dev/leds -l 中可以看到,并且可以看到主设备号次设备号