使用ボードは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
次にHOST
、ROOTFS
との 3 つの環境変数を定義しますSYSROOT
。HOST
arm-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 をコンパイルします。
./confgure --host=$HOST --prefix=/usr
- Makefileのルール内の変数
STRIP_OPT
とを削除します。check-config
install
make && make DESTDIR=$ROOTFS install
- Mini6410 を起動し、コマンドを使用
ssh-keygen
してホスト キーを生成します。
/usr
forを使う理由--prefix
はOpenSSLと同じです。を指定--prefix=$ROOTFS/usr
するとコマンドを実行できなくなりますscp
。
STRIP_OPT
/usr/bin/install
x86-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 ""