输入设备节点自动生成

本文介绍了如何通过内核事件机制,结合udev或mdev自动创建设备文件。当内核抛出事件时,通过设置hotplug参数调用mdev程序,动态生成设备节点。在启动脚本中,挂载必要文件系统,如tmpfs,确保/dev为临时文件系统,避免写入Flash。然后执行echo /sbin/mdev > /proc/sys/kernel/hotplug和mdev -s命令。同时,文章展示了/etc/fstab配置和开机脚本,用于挂载分区和安装驱动模块。最后,展示了mdev配置文件/etc/mdev.conf的规则,以及加载驱动后的设备节点变化,验证了设备节点的自动创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核使用 event(事件)机制向外抛出消息,在应用层由udev/mdev接收到事件后,根据规则自动创建设备文件。

但是内核有事件时需要调用 一个程序,以执行接下来的操作,故一般使用

echo /sbin/mdev > /proc/sys/kernel/hotplug 

mdev -s

但前提是必须要挂载一些文件系统,如将/dev挂为临时文件系统,这样就不需要向Flash写数据了。

好了,先从/etc/fstab说起

/home/zhangshaoyan/ftpdir # cat /etc/fstab
proc            /proc   proc    defaults        0       0
sysfs           /sys    sysfs   defaults        0       0

/dev/mmcblk0p1  /       ext3    defaults        0       0
/dev/mmcblk0p2 /media    ext3   defaults        0       0
devpts          /dev/pts        devpts  defaults        0       0
tmpfs   /var    tmpfs   defaults        0       0
tmpfs   /tmp    tmpfs   defaults        0       0
tmpfs   /dev    tmpfs   defaults        0       0

再来看看开机脚本

/home/zhangshaoyan/ftpdir # cat /etc/init.d/rcS                                                                                                               
#!/bin/bash                                                                                                                                                   

#this file is used to initial local runtime environment,                                                                                                      
#includes set environment variable,create necessary files,                                                                                                    
#dynamic install device driver module,etc.                                                                                                                    
#July 15,2014 by shell.albert.                                                                                                                                
#Contact me with 13522296239.                                                                                                                                 
#Copyright(C) 2014~2016,oristartech.com                                                                                                                       
#DO NOT CHANGE THE WHOLE SOFT-ARCHITECTURE!                                                                                                                   
#KEEP ORIGINAL DIRECTORY STRUCTURE.                                                                                                                           
#THANKS!                                                                                                                                                      

#mount partitions                                                                                                                                             
#this will use /etc/fstab                                                                                                                                     
mkdir /dev/pts -p                                                                                                                                             
mount -t devpts devpts /dev/pts                                                                                                                               
mount -a                                                                                                                                                      

echo /sbin/mdev > /proc/sys/kernel/hotplug                                                                                                                    
mdev -s    
                                                                                                                                                   


#set environment variable                                                                                                                                     
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/home/zhangshaoyan/bin                                                                                                     
export PATH                                                                                                                                                   
LD_LIBRARY_PATH=/lib:/home/zhangshaoyan/lib                                                                                                                   
export LD_LIBRARY_PATH                                                                                                                                        

#install necessary driver module file.                                                                                                                        
HOME_DIR=/home/zhangshaoyan                                                                                                                                   
DRVS_DIR=$HOME_DIR/drivers                                                                                                                                    
DRVS_LIST=(\                                                                                                                                                  
imx5_msp430_driver.ko \                                                                                                                                       
imx5_cspi_driver.ko \                                                                                                                                         
imx5_led_driver.ko \                                                                                                                                          
imx5_ds3234_driver.ko \                                                                                                                                       
imx5_ds3650_driver.ko \                                                                                                                                       
imx5_ecspi2_vnic_driver.ko \                                                                                                                                  
);                                                                                                                                                            

#loop to install                                                                                                                                              
for file_ko in ${DRVS_LIST[*]}                                                                                                                                
do                                                                                                                                                            







done                                                                                                                                                          

#create device files                                                                                                                                          
#already created in /dev through static mknod command.                                                                                                        
#mknod /dev/imx5_led1 c 1987 1                                                                                                                                
#mknod /dev/imx5_led2 c 1987 2                                                                                                                                
#mknod /dev/imx5_led3 c 1987 3                                                                                                                                
#mknod /dev/imx5_led4 c 1987 4                                                                                                                                
#mknod /dev/imx5_led5 c 1987 5                                                                                                                                
#mknod /dev/imx5_led6 c 1987 6                                                                                                                                

#mknod /dev/imx5_ds3234 c 1988 0                                                                                                                              
#mknod /dev/imx5_cspi c 1990 0                                                                                                                                
#mknod /dev/imx5_ds3650 c 1991 0                                                                                                                              

#supply by ecspi1_vnic.ko                                                                                                                                     
#mknod /dev/imx5_ecspi1 c 1989 0                                                                                                                              
#mknod /dev/imx5_ecspi2 c 1992 0                                                                                                                              

#ipaddress for eth0                                                                                                                                           
#fixed or dhcp                                                                                                                                                
#be sure /usr/share/udhcpc/default.script file                                                                                                                
#must exists before using dhclient.                                                                                                                           
#udhcpc
#ifconfig eth0 172.23.146.119 netmask 255.255.252.0

#ip,mac for vnic.
ifconfig zvnic0 hw ether 00:00:19:87:09:01
ifconfig zvnic0 192.168.10.53
ifconfig zvnic0

#start dropbear sshd service
mkdir -p /etc/dropbear
cd /etc/dropbear
if [ ! -f "/etc/dropbear/dropbear_rsa_host_key" ];then
        dropbearkey -t rsa -f dropbear_rsa_host_key
fi
if [ ! -f "/etc/dropbear/dropbear_dss_host_key" ];then
        dropbearkey -t dss -f dropbear_dss_host_key
fi
dropbear &

#start ftp service
tcpsvd -vE 0.0.0.0 21 ftpd -w /home/zhangshaoyan/ftpdir &

#change login directory
cd /home

#start sm
#sleep 5
#/mnt/imbsm_new/bin/zsy.sh

#the end of file,tagged by ZSY.

再来看看当mdev程序执行时,读到的配置规则文件:

/home/zhangshaoyan/ftpdir # cat /etc/mdev.conf
# system all-writable devices
full            0:0     0666
null            0:0     0666
ptmx            0:0     0666
random          0:0     0666
tty             0:0     0666
zero            0:0     0666

# console devices
tty[0-9]*       0:5     0660
vc/[0-9]*       0:5     0660

# serial port devices
s3c2410_serial0 0:5     0666    =ttySAC0
s3c2410_serial1 0:5     0666    =ttySAC1
s3c2410_serial2 0:5     0666    =ttySAC2
s3c2410_serial3 0:5     0666    =ttySAC3

# loop devices
loop[0-9]*      0:0     0660    =loop/

# i2c devices
i2c-0           0:0     0666    =i2c/0
i2c-1           0:0     0666    =i2c/1

# frame buffer devices
fb[0-9]         0:0     0666

# input devices
mice            0:0     0660    =input/
mouse.*         0:0     0660    =input/
event.*         0:0     0660    =input/
ts.*            0:0     0660    =input/

# rtc devices
rtc0            0:0     0644    >rtc
rtc[1-9]        0:0     0644


好,现在我加载驱动看看。

/home/zhangshaoyan/ftpdir # ls -l /dev/input/
total 0
crw-rw----    1 root     root       13,  64 Jan  1 00:00 event0
crw-rw----    1 root     root       13,  63 Jan  1 00:00 mice
/home/zhangshaoyan/ftpdir # insmod imx6_key_drv.ko
input: imx6_key_drv as /devices/virtual/input/input2
/home/zhangshaoyan/ftpdir # i'm running!!!!!

/home/zhangshaoyan/ftpdir # ls -l /dev/input/
total 0
crw-rw----    1 root     root       13,  64 Jan  1 00:00 event0
crw-rw----    1 root     root       13,  65 Jan  1 00:09 event1
crw-rw----    1 root     root       13,  63 Jan  1 00:00 mice
/home/zhangshaoyan/ftpdir # cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="da9052-onkey"
P: Phys=da9052-onkey/input0
S: Sysfs=/devices/platform/imx-i2c.0/i2c-0/0-0048/da9052-onkey/input/input0
U: Uniq=
H: Handlers=kbd event0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="imx6_key_drv"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=kbd event1
B: EV=3
B: KEY=281 0 0 0

/home/zhangshaoyan/ftpdir #

看到了吧,设备节点生成了!!!

 内核中使用input_register_device注册输入设备时,由内核抛出信息,hotplug机制,将引发调用应用层程序mdev,并将消息传递给它。mdev根据这些信息生成设备文件。
sys跟文件系统里,可以设置当这些事件发生之后,接收该事件的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值