USB composite 设计

来源:互联网 发布:数据分析可以考的证书 编辑:程序博客网 时间:2024/05/22 14:01

下面的表显示了每个接口是如何被设置的调用流程。调用流程只显示了串行接口是如何被使能的,但是所有的一些功能

驱动都是以一种相似的方式被使能的。这一连串的操作序列是在一个1被写入到使能系统文件中后被唤醒的。

 

   USB接口调用流程

8.1 安卓USB composition框架

 Linux内核3.0开始,主要的变化包括USB composition是如何被定义的和使能的。在更早些时候,USB composition信息,例如, PID/VID ,功能列表,等被定义在内核空间。在linux内核3.0以后,这些都是通过执行用户空间的命令来完成的。因此,定义是在用户空间的文件中被处理的。

下面是一个从<apps root>/system/core/rootdir/etc/init.qcom.usb.rc文件中捕获的片段

on

property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb

write /sys/class/android_usb/android0/enable 0

write /sys/class/android_usb/android0/idVendor 05C6

write /sys/class/android_usb/android0/idProduct 9025

write /sys/class/android_usb/android0/f_diag/clients diag

write /sys/class/android_usb/android0/f_serial/transports smd,tty

write /sys/class/android_usb/android0/f_rmnet/transports smd,bam

write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage

write /sys/class/android_usb/android0/enable 1

start adbd

setprop sys.usb.state $sys.usb.config

Init.qcom.usb.rc 包含每个USB composition的声明。当setprop命令被传递时,这一套顺序命令被执行。安卓用户现在通过adb shell可以轻易的执行setprop命令来改变composition;例如:

>adb shell

# setprop persist.sys.usb.config diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb

注意:System.setProperty()不能被从Java应用那里唤醒来改变USB compositionSystem.setProperty()只会影响正在运行的进程并且不能修改实际的系统属性。

 

为了设置默认的启动时间USB配置,参考<apps root>/system/core/rootdir/etc/init.qcom.usb.sh文件。你将会看到一些调用,例如setprop persist.sys.usb.config diag,serial_smd,serial_tty, rmnet_bam, mass_storage, adb,等。

设置默认的启动composition取决于socinfo和基带。如果persist.sys.usb.config已经被设置了,socinfo和基带过滤器不会被执行。

Persist.sys.usb.config 在电源 电量周期/重启后仍然是之前设置的值。如果你修改了sys.usb.config,这个只是暂时的修改,它会在下一次电源重启或者电量周期cycle后丢失。

8.2 LE composition 框架

 LE 编译有一个可执行的二进制文件来帮助管理可以得到的在系统里的USB compositions

/usr/bin/usb_composition

通过这个可执行的文件用户可以设置默认的composition 例如:

boot hsusb composition: 9025

boot hsic composition: empty

Choose Composition by Pid:

901D - DIAG + ADB

9021 - DIAG + QMI_RMNET (Android)

9022 - DIAG + ADB + QMI_RMNET (android)

9024 - RNDIS + ADB [Android]

9025 - DIAG + ADB + MODEM + NMEA + QMI_RMNET + Mass Storage (Android)

902B - RNDIS + ADB + Mass Storage

902D - RNDIS + DIAG + ADB [Android]

9049 - DIAG + ADB + DUN + RMNET + Mass Storage + QDSS [Android]

904A - DIAG + QDSS [Android]

9056 - DIAG + ADB + SERIAL + RMNET + Mass Storage + Audio [Android]

9057 - RNDIS : ECM

9059 - DIAG+ADB+RNDIS : ECM

905B - MBIM

9060 - DIAG + QDSS + ADB

9063 - RNDIS : ECM : MBIM

9064 - DIAG + ADB + MODEM + QMI_RMNET : ECM : MBIM

9067 - Mass storage + QMI_RMNET : Mass Storage + MBIM

9084 - DIAG + QDSS + ADB + RMNET

9085 - DIAG+ADB+MBIM+GNSS

9091 - DIAG + MODEM + QMI_RMNET + ADB

90A1 - DIAG + ADB + (multiplexed) QMI_RMNET (Android)

90A9 - DIAG + ADB + MODEM + NMEA + QDSS (bulk in) + RMNET : ECM : MBIM

90AD - DIAG + ADB + MODEM + NMEA + QMI_RMNET + Mass Storage + DPL

90B1 - ECM

F000 - Mass Storage

empty -这个被用来允许hsichsusb都完全没有composition(必须重启后才能生效).

hsic_next -

hsusb_next -

 

 

Pid number : 901D

Choose core:  y - hsic , n - hsusb ?(y/nn

Would you like it to be the default composition ? (y/n)y

Would you like the composition to change immediately? (y/n)y

Are you performing the composition switch from adbd? (y/n)n

Switching to composition number 0x901D

这个可执行的二进制文件从一个目录里读出系统里所有可得到的compositions并列出来。这些位于目录里的文件都是一些bash脚本,这些脚本执行文件系统写操作到安卓USB文件以设置compositionPID,VID,等。

Composition 目录

在编译目录 ---- <apps root>/system/core/usb/compositions/

在设备这边 ---- /usr/bin/usb/compositions

9025

Run_9x25( ){

if [ $from_adb = "n" ]

then

pkill -x `which adbd`

fi

echo 0 > /sys/class/android_usb/android$num/enable

echo 9024 > /sys/class/android_usb/android$num/idProduct

echo 05C6 > /sys/class/android_usb/android$num/idVendor

echo rndis,adb > /sys/class/android_usb/android$num/functions

echo 1 > /sys/class/android_usb/android$num/remote_wakeup

echo 1 > /sys/class/android_usb/android0/f_rndis/wceis

sleep $delay

echo 1 > /sys/class/android_usb/android$num/enable

if [ $from_adb = "n" ]

then

/etc/init.d/adbd start

fi

}

用户能够通过创建一个bash脚本使用之前存在的composition作为一个框架或者指南来创建他们自己的compositions。在定义了composition后,用户能够添加这个composition<apps root>/system/core/usb/

compositions/ 来编译包含最新添加的composition的系统镜像。

8.3 USB composition 系统文件

8-1 系统文件和可能的值

 

 

 

 

 

 

8.4 默认的USB compositions

默认的USB composition被用于每个平台。看8-2,8-3,8-4来获得详细的信息。

8-2 接口字符串到transport的变换表(只对MSM

 

 

 

 

8.4.1基于MSM的产品

 

 

8.4.2 基于MDM LE的产品

 

Rmnet_gsi是一个完全不同的USB功能驱动。在这个case中没有要求Echoingtransports文件

原创粉丝点击