|
本文介绍,如何在开发板上开启ADB功能,方便后期的文件上传,等功能。毕竟,ADB功能较多,调试更为方便。
包括如下步骤:
1)kernel开启ADB相关的CONFIG配置宏
1.1)yocto recipes目录结构
1.2)USB gadget相关配置宏
- CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
- CONFIG_USB_MON=y
- USB_GADGET_DEBUG=y
- CONFIG_USB_GADGET_DEBUG=y
- CONFIG_USB_GADGET_DEBUG_FILES=y
- CONFIG_USB_GADGET_DEBUG_FS=y
- CONFIG_USB_CONFIGFS=y
- CONFIG_USB_FUNCTIONFS=m
- CONFIG_USB_G_SERIAL=m
- CONFIG_USB_U_ETHER=y
- CONFIG_USB_F_ECM=y
- CONFIG_USB_F_SUBSET=y
- CONFIG_USB_F_RNDIS=y
- CONFIG_USB_F_MASS_STORAGE=y
- CONFIG_USB_CONFIGFS_SERIAL=y
- CONFIG_USB_CONFIGFS_ACM=y
- CONFIG_USB_CONFIGFS_OBEX=y
- CONFIG_USB_CONFIGFS_NCM=y
- CONFIG_USB_CONFIGFS_ECM=y
- CONFIG_USB_CONFIGFS_ECM_SUBSET=y
- CONFIG_USB_CONFIGFS_RNDIS=y
- CONFIG_USB_CONFIGFS_EEM=y
- CONFIG_USB_CONFIGFS_MASS_STORAGE=y
- CONFIG_USB_CONFIGFS_F_LB_SS=y
- CONFIG_USB_CONFIGFS_F_FS=y
- CONFIG_USB_CONFIGFS_F_UAC1=y
- CONFIG_USB_CONFIGFS_F_MIDI=y
- CONFIG_USB_CONFIGFS_F_HID=y
- CONFIG_USB_CONFIGFS_F_UVC=y
- CONFIG_USB_CONFIGFS_F_PRINTER=y
复制代码 2)增加usb gadget相关的recipes文件
2.1)目录结构如下
增加usb-start_1.0.bb文件,用来编译以及打包usb gadget相关的配置。
2.2)由于当前开发板使用systemd管理开机自启服务,因此需要在usb-start_1.0.bb文件当中,也需要使用systemd管理开机自启服务。
2.3)usb-start_1.0.bb文件内容如下。
- #
- # USB composite device configuration
- #
- SUMMARY = "USB composite device configuration"
- SECTION = "examples"
- LICENSE = "CLOSED"
- SRC_URI = " \
- file://launch_adbd \
- file://usb_start.service \
- file://usb_start.sh \
- "
- S = "${WORKDIR}"
- do_install() {
- install -m 0755 usb_start.sh -D ${D}${sysconfdir}/init.d/usb_start.sh
- install -m 0755 launch_adbd -D ${D}${sysconfdir}/launch_adbd
- install -m 0644 usb_start.service -D ${D}${systemd_unitdir}/system/usb_start.service
- if [ ! -d ${D}${systemd_unitdir}/system/multi-user.target.wants ];then
- mkdir ${D}${systemd_unitdir}/system/multi-user.target.wants
- else
- echo ${D}${systemd_unitdir}/system/multi-user.target.wants exist
- fi
- ln -sf ${systemd_unitdir}/system/usb_start.service ${D}${systemd_unitdir}/system/multi-user.target.wants/usb_start.service
- }
- FILES_${PN} += "${systemd_unitdir}/system"
- FILES_${PN} += "${systemd_unitdir}/system/local-fs.target.wants/"
复制代码 2.4)launch_adbd文件内容如下
- #! /bin/sh
- #
- # Copyright (c) 2017, The Linux Foundation. All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are
- # met:
- # * Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above
- # copyright notice, this list of conditions and the following
- # disclaimer in the documentation and/or other materials provided
- # with the distribution.
- # * Neither the name of The Linux Foundation nor the names of its
- # contributors may be used to endorse or promote products derived
- # from this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
- export TERM=linux
- DAEMON="adbd"
- PIDFILE="/var/run/$DAEMON.pid"
- if [ -f /etc/default/adbd ]; then
- echo "/etc/default/adbd" > /dev/kmsg
- . /etc/default/adbd
- fi
- echo "Launch adb is starting adbd... "
- start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/usr/bin/adbd"
- # If UDC is not set up set it up.
- if [ -z /sys/kernel/config/usb_gadget/g1/UDC ]; then
- udcname=`ls -1 /sys/class/udc | head -n 1`
- echo -n "udcname $udcname" > /dev/kmsg
- echo $udcname > /sys/kernel/config/usb_gadget/g1/UDC
- fi
- echo -n "Launch adbd. done" > /dev/kmsg
- exit 0
复制代码 2.5)usb_start.service文件内容如下
- [Unit]
- Description=Renesas usb start
- After=auditd.service
- [Service]
- Type=simple
- RemainAfterExit=yes
- #Restart=on-failure
- #RestartSec=5s
- #Nice=-5
- ExecStart=/etc/init.d/usb_start.sh start
- ExecStop=/etc/init.d/usb_start.sh stop
- [Install]
- WantedBy=multi-user.target
复制代码 2.6)usb_start.sh文件内容如下
- #!/bin/sh
- DAEMON="start_usb"
- PIDFILE="/var/run/$DAEMON.pid"
- UpdateLog()
- {
- echo "${1}" 2>&1 | tee /dev/kmsg
- }
- run_usb_configfs() {
- usb_vid=0x0BB8
- usb_pid=0x5300
- manu_string="Renesas_Manufacturer"
- prod_string="Renesas_Product"
- usb_maxpower=500
- #serialnum=`devmem 0x5c005238`
- serialnum="123456789"
- #func_str="ecm.ecm,ffs.adb,gser.0,uac1.uac1,mass_storage.0,ncm.0,rndis.rndis"
- #func_str="ecm.ecm,ffs.adb,gser.0,uac1.uac1,mass_storage.0,ncm.0"
- #func_str="gser.0,gser.1,gser.2,gser.3,ffs.adb,uac1.uac1"
- #func_str="ecm.ecm,gser.0,ffs.adb,uac1.uac1"
- #func_str="ffs.adb,uac1.uac1"
- func_str="ffs.adb"
- UpdateLog "start adb"
- pkill adbd
- /etc/launch_adbd start
- sleep 1
- cd /sys/kernel/config/usb_gadget/g1
- echo $usb_vid > idVendor
- echo $usb_pid > idProduct
- echo 0xA0 > configs/c.1/bmAttributes
- echo "UAC_SER_RMNET" > configs/c.1/strings/0x409/configuration
- echo $manu_string > strings/0x409/manufacturer
- echo $prod_string > strings/0x409/product
- echo $serialnum > strings/0x409/serialnumber
- echo $usb_maxpower > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
- funcs=$(echo $func_str |tr "," "\n")
- func_index=1
- for func in $funcs
- do
- echo "ln $func $func_index"
- ln -s functions/$func configs/c.1/f$func_index
- func_index=$((func_index+1))
- done
- UpdateLog "binding UDC with Gadget ...\n" $1
- echo $1 > UDC
- cd /
- }
- start() {
- UpdateLog 'Starting %s: \n' $DAEMON
- #depmod
- #modprobe libcomposite
- #sleep 1
- #mount -t configfs none /sys/kernel/config
- if [ -d /sys/kernel/config/usb_gadget ];then
- UpdateLog "Configuring the USB gadget using ConfigFS"
- cd /sys/kernel/config/usb_gadget/
- mkdir g1
- cd g1
- mkdir strings/0x409
- mkdir configs/c.1
- mkdir configs/c.1/strings/0x409
- mkdir functions/mass_storage.0
- mkdir functions/mass_storage.1
- mkdir functions/ffs.adb
- mkdir functions/gser.0
- mkdir functions/gser.1
- mkdir functions/gser.2
- mkdir functions/gser.3
- mkdir functions/ncm.0
- mkdir functions/uac1.uac1
- mkdir functions/rndis.rndis
- mkdir functions/ecm.ecm
- if [ ! -s "/etc/adb_devid" ]; then
- #serialnum=`devmem 0x5c005238`
- serialnum="123456789"
- echo $serialnum > /etc/adb_devid
- sync
- fi
-
- udcname=`ls /sys/class/udc`
- UpdateLog "udcname=$udcname"
- run_usb_configfs $udcname &
- cd /
- fi
- #mount functionfs
- mkdir -p /dev/usb-ffs/adb
- mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb
- #mount -o remount,gid=5,mod=620 /dev/pts
- UpdateLog "usb.service initialized successfully"
- }
- stop() {
- UpdateLog 'Stopping %s: ' "$DAEMON"
- if [ -d /sys/kernel/config/usb_gadget ];then
- UpdateLog "Stop USB Android Gadget"
- echo none > /sys/kernel/config/usb_gadget/g1/UDC
- UpdateLog -n "usb.service stopped successfully"
- fi
- }
- restart() {
- stop
- sleep 1
- start
- }
- case "$1" in
- start|stop|restart)
- "$1";;
- reload)
- # Restart, since there is no true "reload" feature.
- restart;;
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
- esac
复制代码 3)打包usb-start相关的recipes文件到根文件系统当中
4)USB gadget ADB功能测试
|
|