ari*_*ian 14 openssl arm openssh zlib cross-compiling
有谁知道如何跨ARM编译OpenSSH?这就是我所做的:
首先,我已经下载了Zlib源代码,解压缩它,构建它并使用以下命令行安装它:
# ./configure --prefix=/usr/local/cross/arm
# make
# make install
Run Code Online (Sandbox Code Playgroud)
但是当我尝试为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
Run Code Online (Sandbox Code Playgroud)
jag*_*uzu 41
为了交叉编译openSHH for ARM(在我的例子中是mini2440),我做了以下操作:
安装arm交叉编译器 - (例如什么是arm-linux-gcc以及如何在ubuntu中安装它)
下载:
构建Zlib:
cd zlib-1.2.7
CC=arm-linux-gnueabi-gcc
./configure --prefix=$HOME/zlibArm
make
make install
Run Code Online (Sandbox Code Playgroud)
构建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
Run Code Online (Sandbox Code Playgroud)
构建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
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请访问http://code.google.com/p/openssh4mini2440/wiki/HowTo,下载源代码并阅读"build.sh"
Che*_*Liu 10
使用的主板是Mini6410.OpenSSH的要求包括zlib和OpenSSL.我准备
我的工具链是由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
Run Code Online (Sandbox Code Playgroud)
接下来我定义三个环境变量HOST
,ROOTFS
和SYSROOT
.HOST
是arm-unknown-linux-gnueabi.ROOTFS
显然是根文件系统.SYSROOT
是作为工具链中的标头和库的根目录的目录.
您可以添加CFLAGS
并LD_LIBRARY_PATH
指向根文件系统,以便交叉编译器可以找到您已安装的内容.但是,我不想设置这些变量.另一种方法是安装在这两个图书馆SYSROOT
和ROOTFS
.
AR=$HOST-ar CC=$HOST-gcc RANLIB=$HOST-ranlib ./configure --prefix=$ROOTFS/usr
make
make install
Run Code Online (Sandbox Code Playgroud)
./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
Run Code Online (Sandbox Code Playgroud)
请注意,--prefix
设置为/usr
而不是$ROOTFS/usr
.原因是,如果设置--prefix
为$ROOTFS/usr
,它将尝试$ROOTFS/usr
在Mini6410上运行时访问配置文件,这是不存在的.Makefile中指定的安装路径是$INSTALL_PREFIX/$PREFIX
,我们$ROOTFS
用于$INSTALL_PREFIX
.
./confgure --host=$HOST --prefix=/usr
STRIP_OPT
并在Makefile check-config
中的规则install
中.make && make DESTDIR=$ROOTFS install
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 ""
Run Code Online (Sandbox Code Playgroud)
我喜欢这个
CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib ./配置 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" 进行安装
归档时间: |
|
查看次数: |
45481 次 |
最近记录: |