OpenWRT(MIPS)交叉編譯OpenSSL
引言
因為很多嵌入式模組需要 libssl 和 libcrypto 庫,所以編寫此文。本文是使用mips編譯器編譯OpenSSL,並安裝在/usr/local/mips
,編譯安裝好後以後可以直接引用。
1、下載和配置
下載和解壓:
cd /opt/
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
tar zxf openssl-1.0.2l.tar.gz
cd openssl-1.0.2l
2、配置
這裡的配置會分為兩種方法。
方法一
configure
配置成不要有ASM程式碼:
./configure no-asm shared --prefix=/usr/local/mips
OR
./config no-asm shared --prefix=/usr/local/mips
--prefix
為指定make install
安裝路徑。
修改Makefile
修改CC
、AR
、RANLIB
、NM
等路徑,指向MISP編譯器:
假設 toolchain 路徑為:/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-gcc
# 1、修改CC
CC= /opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-gcc
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -O3 -Wall
DEPFLAG = -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST
PEX_LIBS=
EX_LIBS= -ldl
EXE_EXT=
ARFLAGS=
# 2、修改AR
AR= /opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-ar $(ARFLAGS) r
# 3、修改RANLIB
RANLIB= /opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-ranlib
# 4、修改NM
NM= /opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion --record-size=10240
MAKEDEPPROG= gcc
LIBDIR=lib
# 註釋下面這一行
#SHARED_LDFLAGS=-m64
修改完成儲存。
如果是mips交叉編譯,後仍需要將此 Makefile 檔案中的-m64
字尾全部去掉。在VIM環境下可以使用/-m64
回車查詢,然後按下n
查詢下一個,全文應該只有兩處!
方法二
這個方法我覺得比較通用,應該不止適用於編譯OpenSSL,但是無論怎樣最後最好都檢查一下Makefile
。
首先配置環境變數:
$ export PATH=/opt/openwrt-toolchain/mips/bin:$PATH
$ echo $PATH
/opt/openwrt-toolchain/mips/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lzq/.local/bin:/home/lzq/bin
配置編譯器,這樣執行config
時候就會換為這些工具了:
export CC=/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-gcc
export CPP=/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-g++
export AR=/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-ar
export LD=/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-ld
export RANLIB=/opt/openwrt-toolchain/mips/bin/mips-openwrt-linux-ranlib
因為是使用export
匯入環境變數,所以關閉會話視窗後就失效了,所以不用考慮修改回來。設定好環境變數後可以輸入$CC -v
檢查一下。
之後同方法一的config
配置一樣
./config no-asm shared --prefix=/usr/local/mips
配置好之後還要修改Makefile,這一次只需要查詢全文刪掉-m64
關鍵字即可。
3、編譯
注意:編譯的時候可能還需要設定STAGING_DIR
變數。
export STAGING_DIR=/opt/openwrt-toolchain/mips/
然後可以執行make
make
列印以下資訊即表示編譯成功:
...
making all in tools...
make[1]: Entering directory `/opt/openssl-1.0.2d/tools'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/opt/openssl-1.0.2d/tools'
然後可以在根目錄下看到動態庫libcrypto.so
、libcrypto.so.1.0.0
、libssl.so
、libssl.so.1.0.
和靜態庫libcrypto.a
、libssl.a
。
安裝:
sudo make install
最後列印資訊如下表示安裝成功:
cp libcrypto.pc /usr/local/mips/lib/pkgconfig
chmod 644 /usr/local/mips/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/mips/lib/pkgconfig
chmod 644 /usr/local/mips/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/mips/lib/pkgconfig
chmod 644 /usr/local/mips/lib/pkgconfig/openssl.pc
4、引用
以後需要引用,修改如下配置即可
libssl 和 libcrypto 庫路徑:/usr/local/mips/lib/
$ ls /usr/local/mips/lib/
engines libcrypto.so libssl.a libssl.so.1.0.0
libcrypto.a libcrypto.so.1.0.0 libssl.so pkgconfig
標頭檔案路徑:/usr/local/mips/include/
$ ls /usr/local/mips/include/openssl/
aes.h cmac.h dso.h hmac.h obj_mac.h rand.h ssl23.h ui.h
asn1.h cms.h dtls1.h idea.h ocsp.h rc2.h ssl2.h whrlpool.h
asn1_mac.h comp.h ebcdic.h krb5_asn.h opensslconf.h rc4.h ssl3.h x509.h
asn1t.h conf_api.h ecdh.h kssl.h opensslv.h ripemd.h ssl.h x509v3.h
bio.h conf.h ecdsa.h lhash.h ossl_typ.h rsa.h stack.h x509_vfy.h
blowfish.h crypto.h ec.h md4.h pem2.h safestack.h symhacks.h
bn.h des.h engine.h md5.h pem.h seed.h tls1.h
buffer.h des_old.h e_os2.h mdc2.h pkcs12.h sha.h ts.h
camellia.h dh.h err.h modes.h pkcs7.h srp.h txt_db.h
cast.h dsa.h evp.h objects.h pqueue.h srtp.h ui_compat.h