1、自动挂载与卸载脚本优化:
放在目录/etc/下:
root@u12d32:/opt/qy_test/qy_avserver/a3518_80/create_auto_start# cat sd_card_removing
#!/usr/bin/env sh
#Author : kj
#Timer : 2014-08-22
#Function : mount mmc device
sync
umount /mmc_mnt/
ret=$?
while [ "$ret" -ne "$succeed" ]
do
echo "umount fialed"
sleep 1
umount /mmc_mnt
ret=$?
echo $ret
done
rm -rf /mmc_mnt/*
echo "umount succeed , and exit the umount shell !"
root@u12d32:/opt/qy_test/qy_avserver/a3518_80/create_auto_start# cat sd_card_inserting
#!/usr/bin/env sh
#Author : kj
#Timer : 2014-08-22
#Function : mount mmc device
succeed=0
mount /dev/mmcblk0p1 /mmc_mnt/
ret=$?
while [ "$ret" -ne "$succeed" ]
do
echo "mount fialed"
umount /mmc_mnt
sleep 1
mount /dev/mmcblk0p1 /mmc_mnt/
ret=$?
echo $ret
done
echo "mount succeed , and exit the mount shell !"
root@u12d32:/opt/qy_test/qy_avserver/a3518_80/create_auto_start# cat mdev.conf
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
root@u12d32:/opt/qy_test/qy_avserver/a3518_80/create_auto_start#
之前有这篇文章:
http://blog.csdn.net/lanmanck/archive/2009/09/17/4558500.aspx
后来发现这个更详细:
http://blog.chinaunix.net/u3/97319/showart_2099947.html
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mdev –s
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
sd[a-z] [0-9] 0:0 666 @ /etc/usb/usb_inserting
sd[a-z] 0:0 666 $ /etc/usb/usb_removing
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
#!/bin/sh
sync
umount /mnt/sd
mdev的使用在busybox中的mdev.txt文档已经将得很详细了。但作为例子,我简单讲讲我的使用过程:
(1)在编译时加上对mdev的支持(我是使用的是busybox1.10.1):
Linux System Utilities --->
mdev
Support /etc/mdev.conf
Support command execution at device addition/removal
我在自己创建的根文件系统(nfs)中的/linuxrc文件中添加了如下指令:
#挂载/sys为sysfs文件系统
echo "----------mount /sys as sysfs"
/bin/mount -t tmpfs mdev /dev
/bin/mount -t sysfs sysfs /sys
echo "----------Starting mdev......"
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
注意:是/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug,并非/bin/echo /bin/mdev > /proc/sys/kernel/hotplug。
(3)在你的驱动中加上对类设备接口的支持。
在驱动程序的初始化函数中,使用下述的类似语句,就能在类设备目录下添加包含设备号的名为“dev”的属性文件。并通过mdev在/dev目录下产生gpio_dev0的设备节点文件。
my_class = class_create(THIS_MODULE, "gpio_class");
if(IS_ERR(my_class)) {
printk("Err: failed in creating class./n");
return -1;
}
/* register your own device in sysfs, and this will cause mdev to create corresponding device node */
class_device_create(my_class, NULL, MKDEV(gpio_major_number, 0), NULL, "gpio_dev%d" ,0);
在驱动程序的清除程序段,加入以下语句,以完成清除工作。
class_device_destroy(my_class, MKDEV(gpio_major_number, 0));
class_destroy(my_class);
需要的头文件是linux/device.h,因此程序的开始应加入下句
#include <linux/device.h>
另外,my_class是class类型的结构体指针,要在程序开始时声明成全局变量。
struct class *my_class;
上述程序中的gpio_major_number是设备的主节点号。可以换成需要的节点号。gpio_dev是最终生成的设备节点文件的名子。%d是用于以相同设备自动编号的。gpio_class是建立的class的名称,当驱动程序加载后,可以在/sys/class的目录下看到它。
上述语句也不一定要在初始化和清除阶段使用,可以根据需要在其它地方使用。
关于mdev的使用方法,我在网上找到一篇中文版的。大家可以到我上传的资源中下载。
为mdev的运行准备环境
mdev需要改写/dev和/sys两个目录。所以必须保证这两个目录是可写的(一般会用到sysfs,tmpfs。所以要重新编译内核)。
然后在你的启动脚本文件中加入
/bin/mdev -s
·/etc/fstab
这是mount -a要读取的文本。根据需要编写。