本文共 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/