From bcc1f7e6ef8d1cb497f69924c39f454b9ea3583c Mon Sep 17 00:00:00 2001 From: Alexander Ivchenko Date: Tue, 19 Nov 2013 09:21:08 -0700 Subject: Improve ADB support for Android --- ChangeLog | 8 ++++++++ baseboards/androideabi.exp | 29 ++++++++++++++++++++++------- config/adb.exp | 6 ++++-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 038d3b7..36d02b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,6 +11,14 @@ * doc/ref.xml (remote_reboot, standard_reboot): Document procedures. * doc/dejagnu.texi: Regenerate. +2013-10-15 Alexander Ivchenko + + * baseboards/androideabi.exp (process_multilib_options): Add option. + * config/adb.exp: Remove hardcoded -static option. + (adb_load): Add the possibility to change the temp directory. Also + handle permission potential problems. + (adb_exec): Do cd to android_tmp_dir first. + 2013-10-05 Jose E. Marchesi * baseboards/unix.exp: Add gdb settings to not use hardware diff --git a/baseboards/androideabi.exp b/baseboards/androideabi.exp index 4ba2d63..e84d150 100644 --- a/baseboards/androideabi.exp +++ b/baseboards/androideabi.exp @@ -16,6 +16,8 @@ # along with DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. +process_multilib_options "" + load_generic_config "adb" # We need this for find_gcc and *_include_flags/*_link_flags. @@ -25,18 +27,21 @@ set_board_info compiler "[find_gcc]" # We may need -mandroid. set_board_info cflags "-mandroid" - -# Currently the dynamic linker does not support weak-references in -# shared libraries. So we need to workaround using -static -set_board_info ldflags "-mandroid -static" +set_board_info ldflags "-mandroid" # # load PROG to DEST and run it with ARGS using adb # proc adb_load { dest prog args } { - # This directory uses tmpfs, so it is the best place to run + # Default directory uses tmpfs, so it is the best place to run # tests to avoid excessive wear of flash. - set android_tmp_dir "/mnt/sdcard/.android_secure" + global android_tmp_dir + if { $android_tmp_dir != "" } { + verbose -log "android temporary directory is set to $android_tmp_dir" 3 + } else { + set android_tmp_dir "/mnt/sdcard/.android_secure" + verbose -log "android temporary directory will be used by default $android_tmp_dir" 3 + } if { [llength $args] > 0 } { set pargs [lindex $args 0] @@ -58,12 +63,22 @@ proc adb_load { dest prog args } { } if [is_remote $dest] { + set localfile "./[file tail $prog].[pid]" set remotefile "$android_tmp_dir/[file tail $prog].[pid]" set remotefile [remote_download $dest $prog $remotefile] if { $remotefile == "" } { verbose -log "Download of $prog to [board_info $dest name] failed." 3 return "unresolved" } + set retval [remote_exec $dest "test -x $remotefile"] + if { $retval != "0 {}" } { + # Android doesn't support symbolic input for chmod, therefore set executable permission by number + set retval [remote_exec $dest "chmod 755 $remotefile"] + if { $retval != "0 {}" } { + verbose -log "Setting executable permissions of $prog on [board_info $dest name] failed." 3 + return "unresolved" + } + } if [board_info $dest exists remote_link] { if [[board_info $dest remote_link] $remotefile] { verbose -log "Couldn't do remote link" @@ -73,7 +88,7 @@ proc adb_load { dest prog args } { return "unresolved" } } - set status [remote_exec $dest $remotefile $pargs $inp] + set status [remote_exec $dest $localfile $pargs $inp] remote_exec $dest rm $remotefile } else { set status [remote_exec $dest $prog $pargs $inp] diff --git a/config/adb.exp b/config/adb.exp index a679e6a..b5e5d6c 100644 --- a/config/adb.exp +++ b/config/adb.exp @@ -128,7 +128,7 @@ proc adb_file {dest op args} { } proc adb_upload {desthost srcfile destfile} { - set status [catch "exec adb [adb_serial] pull $srcfile $destfile" output] + set status [catch "exec adb [adb_serial] pull $srcfile $destfile |& cat" output] if { $status == 0 } { verbose "Copied $srcfile to $destfile" 2 return $destfile @@ -165,7 +165,9 @@ proc adb_exec { boardname cmd args } { verbose "Executing $boardname:$cmd $pargs < $inp " - set status [catch "exec cat $inp | adb [adb_serial] shell \( $cmd $pargs \) \\; echo XYZ\\\$\\\{\?\\\}ZYX |& cat" output] + # Execute commands only from temporary folder, therefore do "cd" first + global android_tmp_dir + set status [catch "exec cat $inp | adb [adb_serial] shell cd $android_tmp_dir \&\& \( $cmd $pargs \) \\; echo XYZ\\\$\\\{\?\\\}ZYX |& cat" output] # `status' doesn't mean much here other than adb worked ok. # What we want is whether $cmd ran ok. -- cgit v1.1