OTG配置为USB盘之二

   在前面一节中,描述了otg配置U盘时涉及到的知识点,本篇用统一的脚本完成。

  目标

   将3588开发板子配置为一个U盘。

  配置文件和脚本

   配置文件

默认配置文件路径: cat /etc/profile.d/usbdevice.sh   

说明:

  1)USB_FUNCS是将开发板配置为什么类型的设备,例如u盘,配置ums等等。

   2)UMS_FILE 即对应的具体存储设备,本文就着重讲解此处的应用。

      存储设备可以是

      a. 一个文件,里面在内存或者磁盘上创建一个img文件。

      b. 一个分区

#!/bin/sh

# The env variables below can be overridden

# option: adb acm hid mtp ntb rndis uac1 uac2 ums uvc
#export USB_FUNCS="adb"
export USB_FUNCS="ums"

#export UMS_FILE=/userdata/ums_shared.img
#export UMS_FILE=/dev/mmcblk0p7
export UMS_FILE=/dev/sda5
#export UMS_SIZE=1024M
export UMS_SIZE=7G
export UMS_FSTYPE=ntfs
export UMS_MOUNT=0
export UMS_MOUNTPOINT=/mnt/ums
export UMS_RO=0

设置u盘脚本

脚本运行 usbdevice start等参数

#!/bin/sh 

# Uncomment below to see more logs
# set -x

# Load default env variables from profiles
. /etc/profile

LOG_FILE=/tmp/usbdevice.log
USB_FUNCS_FILE=/tmp/.usbdevice

alias usb_enable='touch $USB_FUNCS_FILE'
alias usb_disable='rm -f $USB_FUNCS_FILE'
alias usb_is_enabled='[ -f $USB_FUNCS_FILE ]'
alias usb_set_started='echo $USB_FUNCS > $USB_FUNCS_FILE'
usb_get_started()
{
	usb_is_enabled || return 0
	cat $USB_FUNCS_FILE
}

CONFIGFS_DIR=/sys/kernel/config
USB_GROUP=rockchip
USB_STRINGS_ATTR=strings/0x409
USB_GADGET_DIR=$CONFIGFS_DIR/usb_gadget/$USB_GROUP
USB_GADGET_STRINGS_DIR=$USB_GADGET_DIR/$USB_STRINGS_ATTR
USB_FUNCTIONS_DIR=$USB_GADGET_DIR/functions
USB_CONFIGS_DIR=$USB_GADGET_DIR/configs/b.1
USB_CONFIGS_STRINGS_DIR=$USB_CONFIGS_DIR/$USB_STRINGS_ATTR

# Make sure that we own this session (pid equals sid)
if ! ps x -o cmd,pid,sid | grep -wq "$$$"; then
	setsid $0 $@
	exit $?
fi

# ---- helper functions
usb_msg()
{
	logger -t $(basename $0) "[$$]: $@"
	echo "[$(date +"%F %T")] $@"
}

usb_pid()
{
	case $1 in
		ums)		echo 0x0000;;
		mtp)		echo 0x0001;;
		uvc)		echo 0x0005;;
		adb)		echo 0x0006;;
		adb_mtp)	echo 0x0011;;
		adb_ums)	echo 0x0018;;
		adb_uvc)	echo 0x0015;;
		ntb_uvc)	echo 0x0017;;
		acm)		echo 0x1005;;
		*)		echo 0x0019;;
	esac
}

usb_instances()
{
	for func in $@; do
		VAR=$(echo $func | tr 'a-z' 'A-Z')_INSTANCES
		eval echo "\${$VAR:-$func.gs0}"
	done
}

usb_run_stage()
{
	for f in $1_pre_$2_hook $1_$2 $1_post_$2_hook; do
		type $f >/dev/null 2>/dev/null || continue

		usb_msg "Run stage: $f"
		eval $f || break
	done
}

usb_wait_files()
{
	for i in `seq 200`;do
		fuser -s $@ 2>/dev/null && break
		sleep .01
	done
}

usb_release_files()
{
	for i in `seq 200`;do
		fuser -s -k $@ 2>/dev/null || break
		sleep .01
	done
}

# usage: usb_mount <src> <mountpoint> <options>
usb_mount()
{
	mkdir -p $2
	mountpoint -q $2 || mount $@
}

usb_umount()
{
	mountpoint -q $1 || return 0
	usb_release_files -m $1
	umount $1
}

usb_symlink()
{
	mkdir -p $1
	[ -e $2 ] || ln -s $1 $2
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值