博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入设备节点自动生成
阅读量:4058 次
发布时间:2019-05-25

本文共 4622 字,大约阅读时间需要 15 分钟。

内核使用 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跟文件系统里,可以设置当这些事件发生之后,接收该事件的程序。

转载地址:http://yczji.baihongyu.com/

你可能感兴趣的文章
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>