ARM用OpenSSHをクロスコンパイルする方法を誰かが知っていますか?これは私がやったことです:
まず、Zlibのソースコードをダウンロードし、解凍し、ビルドして、次のコマンドラインを使用してインストールしました。
# ./configure --prefix=/usr/local/cross/arm
# make
# make install
しかし、ARMターゲットボードのOpenSSHをコンパイルしようとすると、./configure
処理する:
# Sudo LDFLAGS=-L/usr/local/cross/arm/lib CC=arm-none-linux-gnueabi-gcc PATH=$PATH:/home/arishop/arm-tool-chain/arm-fsl-linux-gnueabi/bin/ ./configure --Host=arm-linux --with-zlib=/usr/local/cross/arm/ --prefix=/usr/local/cross/arm/openssh
ARM(私の場合はmini2440)のopenSHHをクロスコンパイルするには、次のようにしました。
Arm cross compilerをインストールします 例---(arm-linux-gccとは何か、これをubuntuにインストールする方法 )
ダウンロード:
Zlibをビルドします。
cd zlib-1.2.7
CC=arm-linux-gnueabi-gcc
./configure --prefix=$HOME/zlibArm
make
make install
OpenSSLを構築します。
export cross=arm-linux-gnueabi-
cd openssl-1.0.1c
./Configure dist --prefix=$HOME/opensslArm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install
OpenSSHをビルドします。
./configure --Host=arm-linux --with-libs --with-zlib=$HOME/zlibArm --with-ssl-dir=$HOME/opensslArm --disable-etc-default-login CC=gcc-arm-linux-gnueabi-gcc AR=gcc-arm-linux-gnueabi-ar
make
詳細は http://code.google.com/p/openssh4mini2440/wiki/HowTo 、ソースをダウンロードして「build.sh」を読んでください
使用したボードはMini6410です。 OpenSSHの要件には、zlibとOpenSSLが含まれます。準備する
私のツールチェーンはcrosstool-NG 1.15.2で構築されています。以下のツールチェーン構成は、arm-unknown-linux-gnueabiから変更されています。
_Arch: armv6
CPU: arm1176jzf-s
FPU: vfp
Linux kernel: 2.6.38.8
binutils: 2.19.1a
gcc: 4.6.3
glibc: 2.11
gmp: 4.3.2
mpfr: 3.0.1
ppl: 0.11.2
cloog: 0.15.11
mpc: 0.9
_
次に、Host
、ROOTFS
、SYSROOT
の3つの環境変数を定義します。 Host
はarm-unknown-linux-gnueabiです。 ROOTFS
は明らかにルートファイルシステムです。 SYSROOT
は、ツールチェーンのヘッダーとライブラリのルートディレクトリとしてのディレクトリです。
CFLAGS
と_LD_LIBRARY_PATH
_をルートファイルシステムを指すように追加して、クロスコンパイラがインストールしたものを見つけられるようにすることができます。ただし、私はこれらの変数を設定しないことを好みます。別の方法として、これらのライブラリをSYSROOT
とROOTFS
の両方にインストールします。
_AR=$Host-ar CC=$Host-gcc RANLIB=$Host-ranlib ./configure --prefix=$ROOTFS/usr
make
make install
_
_./Configure linux-armv4 shared zlib-dynamic --prefix=/usr
make CC=$Host-gcc AR="$Host-ar r" RANLIB=$Host-ranlib
make CC=$Host-gcc AR="$Host-ar r" RANLIB=$Host-ranlib INSTALL_PREFIX=$ROOTFS install
_
_--prefix
_が_/usr
_ではなく_$ROOTFS/usr
_に設定されていることに注意してください。その理由は、_--prefix
_を_$ROOTFS/usr
_に設定すると、存在しないMini6410のランタイムで_$ROOTFS/usr
_の構成ファイルにアクセスしようとするためです。 Makefileで指定されているインストールパスは_$INSTALL_PREFIX/$PREFIX
_であるため、_$ROOTFS
_には_$INSTALL_PREFIX
_を使用します。
./confgure --Host=$Host --prefix=/usr
_install
の変数_STRIP_OPT
_および_check-config
_を削除します。make && make DESTDIR=$ROOTFS install
_ssh-keygen
_を使用してホストキーを生成します。_/usr
_に_--prefix
_を使用する理由は、OpenSSLと同じです。 _--prefix=$ROOTFS/usr
_を指定すると、コマンドscp
を実行できなくなります。
ARMでバイナリを取り除くためにx86-64で_STRIP_OPT
_を使用することは不可能であるため、_/usr/bin/install
_を削除する必要があります。ルール_check-config
_は、生成されたsshd
をホスト上で実行するため、これを回避する必要があります。
最後のステップで、Makefileをチェックして、ルール_Host-key
_を見つけます。そして、次の行は@if [ -z "$(DESTDIR)" ] ; then
です。これは、$(DESTDIR)
の長さがゼロ以外の場合は何もしないことを意味します。したがって、Mini6410でこれらのキーを手動で生成する必要があります。
_ssh-keygen -t rsa1 -f /usr/etc/ssh_Host_key -N ""
ssh-keygen -t dsa -f /usr/etc/ssh_Host_dsa_key -N ""
ssh-keygen -t rsa -f /usr/etc/ssh_Host_rsa_key -N ""
ssh-keygen -t ecdsa -f /usr/etc/ssh_Host_ecdsa_key -N ""
_
私はこれが好きです
CC = arm-none-linux-gnueabi-gcc RANLIB = arm-none-linux-gnueabi-ranlib ./Configure linux-armv4 --prefix = $ OPENSSLARM --openssldir = $ OPENSSLARM make CC = arm-none-linux-gnueabi-gcc AR = "arm-none-linux-gnueabi-ar r" RANLIB = "arm-none-linux-gnueabi-ranlib" make install