1.本文章遵从” 署名-非商业性使用 2.5 中国大陆 (CC BY-NC 2.5 CN)” 2. 转载或引用本文档中的内容须注明 “资料来源:HB@ Technical Document” 字样 |
Sg3_utils包含各种可以从用户空间发命令到scsi设备, 这篇文章主要告诉大家如何移植sg3_utils到ARM平台上。 之前我们主要用sg3_utils是在台式机或者直接复制它到目标机上去编译, 但对于大多数嵌入式设备来说, 我们需要交叉编译,尤其是对于android系统, 如果external下面没有所需要的工具包时, 我们必须对它进行交叉编译。为什么要把sg3-utils的交叉编译写一篇文章呢?只要是在我自己交叉编译的过程中,发现了一些问题,这里只是作一个总结,以帮助后来者少走弯路。
Step1: Download sg3_utils source code
Sg3_utils的官网是在http://sg.danny.cz/sg/sg3_utils.html,你可以从这里读取第一手的关于sg3_utils的介绍, 我在这里就不啰嗦了。在这个页面的最下方有它的下载地址。对于熟悉github的朋友可以用git clone下载, 你也可以下载压缩版本的。
其中要说明的是,上面两个github的下载地址, 一个是来此SUSE公司的Hannes Reinecke, 另一个是来此SDC的Bart Van Assche, 他根据自己的需求有可能会在各自的分支上加入一些自己的应用,anyway, 这两个你可以认选一个,eg”
Git clone https://github.com/bvanassche/sg3_utils.git
注: 你也可以从我个人的github上下载:
https://github.com/beanhuo/sg3_utils.git sg3_utils-1.43-for-android
Step 2: Create Standalone Toolchain
这里要说明的是,如果你用linaro的gcc,编译出的来ELF可执行文件,所需要的interpreter的地址是/lib/ld-linux-aarch64.so,而android的interpreter是/system/bin/linker6。你可以把sg3_utils放到external下去编译,但这又需要一些时间。我的方法是构建自己的standalone toolchain来编译。
编译之前我们来下载NDK:
https://developer.android.com/ndk/downloads/older_releases.html#ndk-15c-downloads
这里有好多版本,我建议大家还是下载最新的版本,因为fix了一些之前版本的bug,相对稳定。
如果你用老一版本,很有可能在编译时,会出现下面的问题1:
./include/sg_linux_inc.h:14:25: fatal error: scsi/sg.h: No such file or directory #include <scsi/sg.h> |
他这这里描述的问题是一样的:https://karkhaz.github.io/tuscan/android/sg3_utils.html#162
具体为什么会出现上面的原因,这里我们就不多说了, 我们的最终目的是要编译通过。
OK,我这里下载的是Android NDK, Revision 15c (July 2017),一个最新的版本。
它是一个zip格式的压缩文件,没关系linux可以解压任何格式的压缩文件,只要你想的到。
unzipandroid-ndk-r15c-linux-x86_64.zip
解压完, 我们获得一个android-ndk-r15c的文件夹,它里面就是NDK的源文件。
关于如何创建standa