Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openssl 为ARM交叉编译OpenSSH_Openssl_Arm_Cross Compiling_Zlib_Openssh - Fatal编程技术网

Openssl 为ARM交叉编译OpenSSH

Openssl 为ARM交叉编译OpenSSH,openssl,arm,cross-compiling,zlib,openssh,Openssl,Arm,Cross Compiling,Zlib,Openssh,有人知道我如何交叉编译ARM的OpenSSH吗? 这就是我所做的: 首先,我下载了Zlib源代码,并使用以下命令行对其进行了卸载、构建和安装: # ./configure --prefix=/usr/local/cross/arm # make # make install 但是,当我尝试为ARM目标板编译OpenSSH时,它在/configure过程中给出了错误“zlib missing”: # sudo LDFLAGS=-L/usr/local/cross/ar

有人知道我如何交叉编译ARM的OpenSSH吗? 这就是我所做的:

首先,我下载了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
我确实喜欢这个

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 CC=arm-none-linux-gnueabi-gcc-RANLIB=arm-none-linux-gnueabi-RANLIB./Configure linux-armv4--prefix=$OPENSSLARM--openssldir=$OPENSSLARM 使CC=arm none linux gnueabi gcc AR=“arm none linux gnueabi AR r”RANLIB=“arm none linux gnueabi RANLIB” 安装
为了交叉编译ARM的openSHH(在我的例子中是mini2440),我执行了以下操作:

安装arm交叉编译器- (例如)

下载:

  • 兹利布
  • 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

更多信息请访问,下载源代码并阅读“build.sh”

使用的板是Mini6410。OpenSSH的需求包括zlib和OpenSSL。我准备

  • zlib 1.2.8
  • OpenSSL 1.0.1e
  • OpenSSH 6.4p1
我的工具链是由crosstool NG 1.15.2构建的。下面的工具链配置是从arm未知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
<代码>主机是arm未知的linux gnueabi
ROOTFS
显然是根文件系统
SYSROOT
是工具链中标题和库的根目录

您可以添加指向根文件系统的
CFLAGS
LD\u LIBRARY\u PATH
,以便交叉编译器可以找到您安装的内容。但是,我不想设置这些变量。另一种方法是在
SYSROOT
ROOTFS
中安装这些库

首先,编译zlib 第二,编译OpenSSL 请注意,
--prefix
设置为
/usr
,而不是
$ROOTFS/usr
。原因是,如果您将
--prefix
设置为
$ROOTFS/usr
,它将尝试在Mini6410上运行时访问
$ROOTFS/usr
中的配置文件,但该配置文件不存在。Makefile中指定的安装路径是
$INSTALL\u PREFIX/$PREFIX
,因此我们对
$INSTALL\u PREFIX
使用
$ROOTFS

最后,编译OpenSSH
  • /confgure--host=$host--prefix=/usr
  • 删除Makefile中规则
    install
    中的变量
    STRIP_OPT
    check config
  • make&&make DESTDIR=$ROOTFS安装
  • 启动Mini6410并使用命令
    ssh-keygen
    生成主机密钥 使用
    /usr
    作为
    --prefix
    的原因与OpenSSL相同。如果指定
    --prefix=$ROOTFS/usr
    ,将无法执行命令
    scp

    必须删除
    STRIP_OPT
    ,因为无法在x86-64上使用
    /usr/bin/install
    剥离ARM上的二进制文件。规则
    check config
    将在主机上运行生成的
    sshd
    ,因此我们必须避免这种情况

    在最后一步中,检查Makefile并找到规则
    主机键
    。下一行是
    @if[-z“$(DESTDIR)”;然后
    ,这意味着如果
    $(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 ""
    

    我认为您需要交叉编译zlib,以及+1极好的指令,并且工作得非常出色。(我的目标是
    arm linux Androidabi
    ,但过程几乎相同。)OpenSSL构建在我的Ubuntu系统上失败,不得不使用openssh 5.3p1将一行更改为
    export cross=arm linux gnueabi-
    (删除“gcc-”前缀),我必须包括ranlib
    /configure--host=arm-davinc-linux-gnueabi--libs--zlib=/opt/linux-2-6-31-xtools/x-tools/arm-davinci-linux-gnueabi/--ssl-dir=/opt/linux-2-6-31-xtools/x-tools/x-tools/arm-davinci-linux-gnueabi/--禁用etc默认登录CC=arm-davinci-linux-gnueabi gcc-AR=arm-davinc-linux-gnueabi-gnueabi-ARRANLIB=arm-davinc-linux-gnueabi-RANLIB
    zlib的第一个版本甚至没有使用arm编译器。这是有意的吗?如果我尝试用ARM编译器制作zlib,它会失败,因为crc32无法工作;导出BUILDMACH=i686 pc linux gnu;导出交叉=arm linux gnueabi;导出CC=${CROSS}-gcc;导出LD=${CROSS}-LD;导出为=${CROSS}-AS后来我为openssh交叉编译修改了下面的
    CC=arm-linux-gnueabi-gcc-AR=arm-linux-gnueabi-AR
    小插件,在使用选项配置openSSL时添加zlib位置:
    --使用zlib-include=$ROOTFS/usr/include--使用zlib=$ROOTFS/usr/lib
    这对我帮助很大。关于删除
    STRIP_OPT
    check config
    的部分本可以更清楚。此外,我还需要将
    ——使用zlib=$ROOTFS/usr
    添加到OpenSSH的配置中。
    ./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
    
    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 ""