因为项目需要把数据上传到阿里云,我们的采集设备是ARM平台的,就要移植OSS SDK到我们的ARM平台,我们的设备用的是TI3354,LINUX 3.14,弄了两天终于弄好了,记录一下,原创文章,请勿转载!
交叉编译 OSS SDK 步骤
1.首先编译libcurl库
源码:https://curl.haxx.se/download.html,我下载的curl-7.32.0
curl
chmod 0777 configure
./configure --prefix=$PWD/../build_lib --host=arm-linux --target=arm-linux CC=arm-arago-linux-gnueabi-gcc
make
make install
2.编译apr-1.5.2
apr-1.5.2
./configure
make
cp -a tools/gen_test_char ../
make clean
./configure --prefix=$PWD/../build_lib --host=arm-linux CC=arm-arago-linux-gnueabi-gcc CXX=arm-arago-linux-gnueabi-g++ ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes apr_cv_tcp_nodelay_with_cork=yes ap_void_ptr_lt_long=no
cp -a ../gen_test_char tools/
Vim Makefile
134 行
OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
屏蔽
#OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
目的是不生成新的gen_test_char文件
8 vi include/apr_want.h 第93行 #ifndef APR_IOVEC_DEFINED 替换成#if 0
make
make install
3.编译apr-util-1.5.4
./configure --prefix=$PWD/../build_lib --host=arm-linux CC=arm-arago-linux-gnueabi-gcc CXX=arm-arago-linux-gnueabi-g++ --with-apr=$PWD/../build_lib/ --with-expat=$PWD/../build_lib/
make
make install
4.minixml,我用的mxml-2.9
./configure --prefix=$PWD/../build_lib --host=arm-linux CC=arm-arago-linux-gnueabi-gcc CXX=arm-arago-linux-gnueabi-g++
make
出错,不管,把so文件和.h文件拷贝走
4.下载oss sdk,百度一下阿里云OSS SDK,下载3.5.0
修改CMakeLists.txt如下
cmake . -DCMAKE_INSTALL_PREFIX=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib -DCURL_INCLUDE_DIR=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/include/curl -DCURL_LIBRARY=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/lib -DAPR_INCLUDE_DIR=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/include/apr-1 -DAPR_LIBRARY=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/lib/libapr-1.a -DAPR_UTIL_INCLUDE_DIR=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/include/apr-1 -DAPR_UTIL_LIBRARY=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/lib/libaprutil-1.a -DMINIXML_INCLUDE_DIR=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/include/mxml/ -DMINIXML_LIBRARY=/home/stone/work/darma/temp/examples/uart_rcv/oss_arm/build_lib/lib/libmxml.so.1.5
make
make install
如果需要MD5校验,我发现很有必要做MD5校验,否则上传上去的文件会有不完整的情况。OSS SDK的MD5校验码制作方法有点麻烦,最后自己写了个工具来搞。
OSS CONTENT-MD5计算方法
md5sum xxx.dat 生成md5码
简单直接的方法:
echo -e -n "\xa8\x2b\xea\x08\xdc\x5d\x94\x81\x2a\xe3\x39\xe2\xdd\x06\xe6\xeb" | base64
正规的用法:
md5sum raw.dat | awk '{print $1}' | xxd -r -ps | base64
qCvqCNxdlIEq4zni3Qbm6w==
xxd移植不了,busybox中的参数不同,自己写了一个tcu_xxd来用
最后
#!/bin/sh
crc=`md5sum raw-data-129-201809130533.dat | awk '{print $1}'`
md5=`./tcu_xxd $crc | base64`
echo $md5
最后又搞定了断点续传,完美!
最后打下广告,有需要工控终端嵌入式设备的联系我啊,QQ:7972418 :)