需求背景
在进行ufs等scsi device测试时,需要进行power mode切换等测试,因此需要有一个简单地工具集来向scsi device(ufs接口)发送scsi命令,比如 scsi reset命令等。在网上调研后发现sg3_utils是一个比较全面的工具。 但是sg3_utils需要在android上运行还要依赖很多动态库。因此本文介绍一种方法,将sg3_utils编译为静态可执行程序,然后adb push到arm64设备端,无需依赖任何so即可执行。
下载sg3_utils-1.46并解压
运行configure命令
./configure CFLAGS=-static LDFLAGS=-static --prefix=/home/alex/Projects/sg3_utils-1.46/out/ --host=aarch64-linux-gnu LD=aarch64-linux-gnu-ld CC=aarch64-linux-gnu-gcc
交叉编译设置
./configure CFLAGS=-static LDFLAGS=-static --prefix=/home/alex/Projects/sg3_utils-1.46/out/ --host=aarch64-linux-gnu LD=aarch64-linux-gnu-ld CC=aarch64-linux-gnu-gcc
上述命令执行后,会生成Makefile和src/Makefile
修改src/Makefile中的libtool 在link mode时,生成静态可执行程序;这样libtool在生成脚本时会加入-static 来做静态链接。
注意
(1)-all-static 只能加载gcc后面,并且在libtool中使用;
(2)gcc不支持-all-static选项(这是libtool的选项)。不要添加。
make & make install
运行玩上述命令后, 可执行文件会被安装在prefix指定的目录下。可通过file命令,确认可执行文件的类型。