15

OpenSSH を ARM 用にクロスコンパイルする方法を知っている人はいますか? これは私がやったことです:

最初に、Zlib のソース コードをダウンロードし、解凍し、ビルドして、次のコマンド ラインを使用してインストールしました。

   # ./configure --prefix=/usr/local/cross/arm

   # make 

   # make install

しかし、ARM ターゲット ボード用に OpenSSH をコンパイルしようとすると、./configureプロセス中に「zlib missing」というエラーが表示されます。

  # 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
4

3 に答える 3

42

ARM(私の場合はmini2440)用のopenSHHをクロスコンパイルするには、次のことを行いました。

arm クロス コンパイラをインストールします - (例: arm-linux-gcc とは何か、これを ubuntu にインストールする方法)

ダウンロード:

  • ズリブ
  • OpenSSL
  • OpenSSH

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」を読んでください。

于 2013-01-26T20:12:08.630 に答える
11

使用ボードはMini6410です。OpenSSH の要件には、zlib と OpenSSL が含まれます。準備する

  • zlib 1.2.8
  • OpenSSL 1.0.1e
  • OpenSSH 6.4p1

私のツールチェーンは 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

次にHOSTROOTFSとの 3 つの環境変数を定義しますSYSROOTHOSTarm-unknown-linux-gnueabi です。ROOTFS明らかにルートファイルシステムです。SYSROOTツールチェーンのヘッダーとライブラリのルート ディレクトリとしてのディレクトリです。

クロス コンパイラがインストール済みのものを見つけられるように、ルート ファイルシステムを追加CFLAGSしてポイントすることができます。LD_LIBRARY_PATHただし、私はこれらの変数を設定しないことを好みます。SYSROOT別の方法は、これらのライブラリを と の両方にインストールすることROOTFSです。

まず、zlib をコンパイルします。

AR=$HOST-ar CC=$HOST-gcc RANLIB=$HOST-ranlib ./configure --prefix=$ROOTFS/usr
make
make install

次に、OpenSSL をコンパイルします。

./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設定されていることに注意してください。その理由は、に設定すると、存在しない Mini6410 の実行時に構成ファイルにアクセスしようとするためです。Makefile で指定するインストール パスはであるため、 for を使用します。/usr$ROOTFS/usr--prefix$ROOTFS/usr$ROOTFS/usr$INSTALL_PREFIX/$PREFIX$ROOTFS$INSTALL_PREFIX

最後に、OpenSSH をコンパイルします。

  1. ./confgure --host=$HOST --prefix=/usr
  2. Makefileのルール内の変数STRIP_OPTとを削除します。check-configinstall
  3. make && make DESTDIR=$ROOTFS install
  4. Mini6410 を起動し、コマンドを使用ssh-keygenしてホスト キーを生成します。

/usrforを使う理由--prefixはOpenSSLと同じです。を指定--prefix=$ROOTFS/usrするとコマンドを実行できなくなりますscp

STRIP_OPT/usr/bin/installx86-64 で使用して ARM でバイナリを削除することはできないため、削除する必要があります。ルールはホスト上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 ""
于 2014-01-12T07:56:35.517 に答える
1

私はこれが好きです

CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib ./linux-armv4 を設定 --prefix=$OPENSSLARM --openssldir=$OPENSSLARM

make CC=arm-none-linux-gnueabi-gcc AR="arm-none-linux-gnueabi-ar" RANLIB="arm-none-linux-gnueabi-ranlib"

インストールする
于 2012-09-18T15:27:37.480 に答える