您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式Linux自动挂载U盘
在ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是实现的步骤:1、确认Busybox做的根文件系统如下选项有选中:LinuxSystemUtilities---[*]mdev[*]Support/etc/mdev.conf[*]Supportcommandexecutionatdeviceaddition/removal2、由于是利用到Linux内核的hotplug功能,要确定CONFIG_HOTPLUG=y。3、修改根文件系统里面的etc/init.d/rcS文件,添加如下内容:mount-ttmpfsmdev/devmount-tsysfssysfs/sysmkdir/dev/ptsmount-tdevptsdevpts/dev/pts#mdevfor/devecho/sbin/mdev/proc/sys/kernel/hotplugmdev-secho***************Startingmdev.........[OK]4、添加对热插拔事件的相应,支持U盘自动挂载:修改根文件系统中的etc/mdev.conf文件,内容如下:sd[a-z][0-9]0:0666@/etc/mdev/udisk_insertsd[a-z]0:0666$/etc/mdev/udisk_remove注:@表示是在插入(创建设备结点)后执行后面的脚本,$表示在拔出(删除设备结点)前执行后面的脚本。5、添加对应的脚本文件:根文件系统中的etc/mdev/udisk_insert文件内容:#!/bin/shif[-d/sys/block/*/$MDEV];thenmkdir-p/media/$MDEVmount/dev/$MDEV/media/$MDEV-tvfat-outf8=1fi根文件系统中的etc/mdev/udisk_remove文件内容:#!/bin/shumount-l/media/$MDEVrm-rf/media/$MDEV至此,就可以实现自动的插拔挂载。1)确保内核支持热插拔#cdlinux-2.6.30.4#vi.configCONFIG_KALLSYMS=y#CONFIG_KALLSYMS_ALLisnotset#CONFIG_KALLSYMS_EXTRA_PASSisnotset#CONFIG_STRIP_ASM_SYMSisnotsetCONFIG_HOTPLUG=y//确保这项为yCONFIG_PRINTK=yCONFIG_NET=y//确保这项也为y确保以上两项都选上,不然/proc/sys/kernel/目录不会出现hotplug文件!2)确保busybox支持mdevmdev是busybox中udev设备文件系统的精简版#makemenuconfig确保以下几项被选中:LinuxSystemUtilities---mdevSupport/etc/mdev.confSupportsubdirs/symlinksSupportregularexpressionssubstitutionswhenrenamingdevSupportcommandexecutionatdeviceaddition/removalSupportloadingoffirmwares3)根文件系统etc/fatab文件的内容为:proc/procprocdefaults00sysfs/syssysfsdefaults00tmpfs/vartmpfsdefaults00tmpfs/tmptmpfsdefaults00tmpfs/devtmpfsdefaults00etc/init.d/rcS添加如下的内容:mount-amkdir/dev/ptsmount-tdevptsdevpts/dev/ptsecho/sbin/mdev/proc/sys/kernel/hotplugmdev-s4)解析执行mdev-s:以-s为参数调用位于/sbin目录下的mdev(其实mdev是个软链接,其作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block目录中所有的类设备目录,如果在类设备目录中含有名为dev的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev目录下创建设备节点文件。一般只在启动时才执行一次mdev-s。热插拔事件:由于启动时执行了命令:echo/sbin/mdev/proc/sys/kernel/hotplug,那么当有热插拔事件产生时,内核就会调用位于/sbin目录下的mdev。这时mdev通过环境变量中的ACTION和DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那一个类设备目录。接着会看看这个类设备目录中是否有名为dev的文件,如果有就利用这些信息为这个设备在/dev目录下创建或删除设备节点文件并执行相应的动作ACTION。5)添加对热插拔事件的响应,实现U盘和SD卡的自动挂载与缷载#vi/etc/mdev.conf内容为:sd[a-z][0-9]0:0666@/etc/hotplug/usb/udisk_insertsd[a-z]0:0666$/etc/hotplug/usb/udisk_removemmcblk[0-9]p[0-9]0:0666@/etc/hotplug/sd/sd_insertmmcblk[0-9]0:0666$/etc/hotplug/sd/sd_remove#vi/etc/hotplug/usb/udisk_insert内容为:#!/bin/shmkdir-p/media/udiskmount/dev/sda/media/udisk#vi/etc/hotplug/usb/udisk_remove内容为:#!/bin/shumount/media/udisk为以上两个脚本加上可执行权限:#chmod+x/etc/hotplug/usb/udisk_insert#chmod+x/etc/hotplug/usb/udisk_remove以下是转贴,仅供参考我的项目中,主要是参考了友善之臂官网根文件系统中的/etc/mdev.conf和/bin/hotplug.sh。对于有些U盘和SD卡,mini2440开发板自带的Linux系统不能有效的自动挂载在文件系统里面,这是因为mini2440的/etc/mdev.conf和/bin/hotplug.sh这两个文件写的不太完善,我经过测试,发现其中的内容需要改进,在/etc/mdev.conf文件中,只需将以下内容写至末尾即可:mmcblk[0-9]0:00666=sdcard*/bin/hotplug.shsd[a-z][0-9]0:00666=udisk*/bin/hotplug.sh在/bin/hotplug.sh文件中则需要把以下内容加在“case$MDEVin”的后面:sd[a-z][1-9])DEVNAME=udiskMOUNTPOINT=/udisk;;mmcblk[0-9]p[0-9])DEVNAME=sdcardMOUNTPOINT=/sdcard;;mmcblk[0-9])DEVNAME=sdcardMOUNTPOINT=/sdcard;;这样再重启系统就可以自动挂载任何U盘或SD卡了!
本文标题:嵌入式Linux自动挂载U盘
链接地址:https://www.777doc.com/doc-2440205 .html