linux arm上实现插入U盘自动运行的设计

前言

之前写过在ubuntu上实现插入U盘自动运行的程序,即autorun,但是在arm 上并不能实现。即仅仅是修改U盘上的文件或者权限,无法提供插入u盘时自动运行这个效果。在嵌入式编程的一个思路是,修改硬件层的程序,运行U盘检测程序,然后U盘检测程序检测出相应程序调用U盘里的程序,在这里是十分不正常的方式,实现了插入U盘自动更新的设计。

修改mount.sh

在mount.sh上添加执行检测U盘的程序。mount.sh在U盘插入时执行的脚本,在”add”分之中,添加如下语句:

if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
if [ -x "$PMOUNT" ]; then
$PMOUNT $DEVNAME 2> /dev/null
elif [ -x $MOUNT ]; then
$MOUNT $DEVNAME 2> /dev/null
fi

# If the device isn't mounted at this point, it isn't configured in fstab
# 20061107: Small correction: The rootfs partition may be called just "rootfs" and not by
# its true device name so this would break. If the rootfs is mounted on two places
# during boot, it confuses the heck out of fsck. So Im auto-adding the root-partition
# to /etc/udev/mount.blacklist via postinst
cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount
sh /home/test/checkUdisk   #这里是我加上的语句,检测U盘的程序checkUdisk放在了/home/test/
#下,如果更改checkUdisk目录,这个地方也要做相应更改

fi

添加的语句sh /home/test/checkUdisk,是执行检测U盘的脚本,在插入U盘后,系统会自动执行到add分支,转而会运行该语句。

编写自动检测U盘的程序

首先确定自己U盘的安装路径,在arm上的U盘默认安装是在/media/sda1/,如果使用多个U盘,或者当前文件夹使用时,会使用sdb1,依次类推,故检测程序应能忽略插入U盘时,不同文件夹的影响,首先就是检测U盘所在的文件夹,本程序中是检测U盘中的执行程序来确定U盘所在目录,相应程序如下:

#/bin/sh
for var in "a" "b" "c" "d" "e" "f" "g" "h"
do  
   for j in 1 2 3 4 
    do
     PATH="/media/sd$var$j/copy.sh” #copy.sh是自动更新脚本,检测其存在,则跳出循环
     #echo $PATH
    if [  -s $PATH ];then
    echo "opendevice ${PATH}" 
        break;
    fi
    done
if [  -s $PATH ];then   
    break;  
fi
done
if [  -s $PATH ];then
   /bin/sh $PATH     #执行copy.sh脚本, /bin/sh使用绝对路径可以确保程序执行
fi

写好后,相应的程序应提取权限:chmod 755 checkUdisk ,checkUdisk是相应的文件名。

放在U盘里的程序

本文中将放在U盘里的程序为shell 脚本,其他程序的要相应地在相应的系统下编译运行尝试过才能放到U盘下。

#/bin/sh
/bin/cp  /media/sda1/test1 /home/test/test1 #这里最好使用绝对路径,否则会出错

同时退该文件设置权限:chmod 755 test

测试一下应该就成功了

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值