Cross compiler OpenSSH pour ARM

est-ce que quelqu'un sait comment je peux croiser OpenSSH pour ARM? C'est ce que j'ai fait:

tout d'abord, j'ai téléchargé le code source de Zlib, Je l'ai démonté, Je l'ai construit et installé en utilisant les lignes de commande suivantes:

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

   # make 

   # make install

mais ensuite quand J'essaie de compiler OpenSSH pour la cible ARM, cela donne l'erreur "zlib missing" pendant le ./configure processus:

  # 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
12
demandé sur lvella 2012-08-07 12:24:15

3 réponses

Pour la compilation croisée des openSHH pour les BRAS (dans mon cas un mini2440) je n'ai suivantes:

installer arm cross compiler - (eg. qu'est-arm-linux-gcc et comment l'installer dans ubuntu)

Téléchargement:

  • Zlib
  • OpenSSL
  • OpenSSH

Construire Zlib:

cd zlib-1.2.7
CC=arm-linux-gnueabi-gcc
./configure --prefix=$HOME/zlibArm
make 
make install

Build 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

Build 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

plus d'info au http://code.google.com/p/openssh4mini2440/wiki/HowTo, Télécharger la source et lire "build.sh"

39
répondu jaguzu 2017-05-23 12:25:49

la planche utilisée est Mini6410. L'exigence D'OpenSSH inclut zlib et OpenSSL. Je prépare

  • zlib 1.2.8
  • OpenSSL 1.0.1 e
  • OpenSSH 6.4p1

ma chaîne d'outils est construite par crosstool-NG 1.15.2. La configuration de la chaîne d'outils ci-dessous est modifiée à partir de 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

Ensuite, j'ai de définir trois variables d'environnement HOST,ROOTFS et SYSROOT. HOST est arm-unknown-linux-gnueabi. ROOTFS est le système de fichiers racine évidemment. SYSROOT est le répertoire que le répertoire racine pour les en-têtes et les bibliothèques dans la chaîne d'outils.

Vous pouvez ajouter CFLAGS et LD_LIBRARY_PATH pointant vers votre système de fichiers racine pour que le compilateur croisé puisse trouver ce que vous avez installé. Cependant, je préfère ne pas fixer ces variables. L'alternative est d'installer ces bibliothèques dans les deux SYSROOT et ROOTFS.

d'abord, compiler zlib

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

Deuxièmement, compiler 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

Notez que --prefix est réglé sur /usr au lieu de $ROOTFS/usr. La raison en est que si vous définissez --prefix$ROOTFS/usr, il va tenter d'accéder aux fichiers de configuration $ROOTFS/usr en runtime sur Mini6410, qui n'existe pas. Le chemin d'installation spécifié dans Makefile est $INSTALL_PREFIX/$PREFIX, de sorte que nous utilisons $ROOTFS$INSTALL_PREFIX.

enfin, compiler OpenSSH

  1. ./confgure --host=$HOST --prefix=/usr
  2. Supprimer la variable STRIP_OPT et check-config dans la règle install dans Makefile.
  3. make && make DESTDIR=$ROOTFS install
  4. Démarrage de votre Mini6410 et l'utilisation de la commande ssh-keygen pour générer les clés de l'hôte.

La raison à l'aide de /usr--prefix est identique à OpenSSL. Si vous spécifiez --prefix=$ROOTFS/usr, vous ne pourrez pas exécuter la commande scp.

STRIP_OPT être supprimé car il est impossible à utiliser /usr/bin/install sur x86-64 pour démonter les binaires sur ARM. La règle check-config exécutera lesshd sur l'hôte, donc nous devons éviter cela.

dans la dernière étape, vérifiez Makefile et trouvez la règle host-key. Et La ligne suivante est @if [ -z "$(DESTDIR)" ] ; then, ce qui signifie qu'il ne fait rien si la longueur de $(DESTDIR) est différente de zéro. Ainsi, nous devons générer ces clés manuellement sur 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 ""
9
répondu Che-Hsun Liu 2014-01-13 08:24:03

je fais comme ceci

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
répondu caentist 2012-09-18 15:27:37