web-dev-qa-db-ja.com

ARMのOpenSSHをクロスコンパイルします

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
14
arian

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

Arm cross compilerをインストールします 例---(arm-linux-gccとは何か、これをubuntuにインストールする方法

ダウンロード:

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

41
jaguzu

使用したボードは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
_

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

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

まず、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_が_/usr_ではなく_$ROOTFS/usr_に設定されていることに注意してください。その理由は、_--prefix_を_$ROOTFS/usr_に設定すると、存在しないMini6410のランタイムで_$ROOTFS/usr_の構成ファイルにアクセスしようとするためです。 Makefileで指定されているインストールパスは_$INSTALL_PREFIX/$PREFIX_であるため、_$ROOTFS_には_$INSTALL_PREFIX_を使用します。

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

  1. _./confgure --Host=$Host --prefix=/usr_
  2. Makefileのルールinstallの変数_STRIP_OPT_および_check-config_を削除します。
  3. _make && make DESTDIR=$ROOTFS install_
  4. Mini6410を起動し、コマンド_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 ""
_
10
Che-Hsun Liu

私はこれが好きです

 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 
1
caentist