检查局域网内未使用的IP。可以参考https://jingyan.baidu.com/article/e6c8503ca1dd67e54e1a1841.html;
或者 使用命令,arp -a; 这一步是为了后面设置sshd服务器内网ip 的时候不会和局域网内的其他ip冲突。
例如arp -a 之后局域网内所有的ip如下:
usernamedeMacBook-Pro:~ panxiaogong$ arp -a
? (192.168.0.1) at 94:d9:b3:d1:6a:60 on en0 ifscope [ethernet]
? (192.168.0.101) at 58:6b:14:53:d4:5b on en0 ifscope [ethernet]
? (192.168.0.103) at 34:ab:37:33:db:3e on en0 ifscope [ethernet]
? (192.168.0.105) at ac:e4:b5:7e:42:cd on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
所以可以设置hi3516 的 ip 为未占用的192.168.0.106 等等
在系统 /etc/profile 或者 用户目录下的 .bashrc 中设置CXX 和 CC;例如 想要生成在hi3516运行的程序,设置为
export CC=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
export CXX=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
这一步的目的是为了后面configure 编译脚本时,自动添加为想要使用的编译器;记得如果想要生成编译环境自身可以运行的程序,例如ubuntu上的可运行程序,记得注释掉 上面的两条。
另外一种建议的编译方式是:不修改编译工具,直接查看ssh 下载下来的 configure 文件,并进行编译环境的修改。
1. zlib-1.2.11.tar.gz
2.openssl-1.1.1
3.openssh
注意:建议先下载openssh,然后阅读openssh 对应版本的文档指导,查看支持的zlib 和 openssl 版本。zlib 和 openssl 都是编译openssh 需要用到的。
./configure --prefix=/home/panxiaogong/work/3516/3rdparty/install
这一步中的--prefix 是为了将安装路径设置在想要安装的同意路径
./configure 操作会生成编译用的makefile,使用vim 查看这个文件是否将环境变量设置的正常:
CC=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
# -Wstrict-prototypes -Wmissing-prototypes
SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1
CROSS=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-
LDFLAGS= -L. libz.a
LDSHARED=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc -E
STATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.4
SHAREDLIBM=libz.so.1
LIBS=$(STATICLIB) $(SHAREDLIB) $(SHAREDLIBV)
AR=$(CROSS)ar rc
RANLIB=$(CROSS)ranlib
由于ssh是别比较常见的命令,为了在登录失败或者连接失败的时候,想知道更加详细的信息可以使用以下方式查看链接过程:
ssh -vvv [email protected]
这样会打印详细的链接日志;注意v 的个数决定了ssh 链接时的日志等级,即日志的详细程度。这个参数的详细内容可以通过
man ssh
其中最重要的检查:CC,AR,RANLIB NM;我参考了别人的做法,设置一个自定义的make 变量CROSS;更改之后编译即可:
make -j6 #设置运行线程
make install
编译ssl
./config no-asm no-async shared --prefix=/home/panxiaogong/work/3516/3rdparty/install --cross-compile-prefix=arm-himix200-linux-
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。
shared :生成动态连接库。
zlib : 支持压缩库
--prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)
参考:https://www.jianshu.com/p/5f260723f5f8
对config 生成的makeFIle 进行修改
CROSS=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-
CC= /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
CFLAG= -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -O3 -Wall
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
PEX_LIBS=
EX_LIBS= -ldl -lz
EXE_EXT=
ARFLAGS=
AR= $(CROSS)ar $(ARFLAGS) r
RANLIB= $(CROSS)ranlib
RC= windres
NM= $(CROSS)nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG= /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
对zlib 的文件路径进行修改
-I/home/panxiaogong/work/3516/3rdparty/install/include
注意,这里的-I 是否需要加上,我这里需要加上
由于我编译的时候发生如下错误:
error: unrecognized command line option '-m64
找到CFLAGS 删掉这个即可
编译openssh
./configure --host=arm-linux --with-libs --with-zlib=/home/panxiaogong/work/3516/3rdparty/install --with-ssl-dir=/home/panxiaogong/work/3516/3rdparty/install --disable-etc-default-login --prefix=/home/panxiaogong/work/3516/3rdparty/install
--with-zlib 这个参数的目的时添加刚刚生成的zlib,
1. 下载需要的源码,直接google最新的版本吧 mkdir -p ~/arm/fs ;mkdir -p ~/arm/source 下载zlib: zlib-1.2.3.tar.gz 下载ssl : openssl-0.9.8d.tar.gz 下载ssh : openssh-4.6p1.tar.gz
2. 编译
make -j9
注意,建议使用zlib 和 openssl 的静态库,如果是动态库需要通过以下方法将zlib 和 ssl 库拷贝到目标机器上
#将安装路径install 里面的 动态库,压缩成lib.tar
#这一步的目的是防止动态库之间的链接文件关系失效
tar -cvf lib.tar *
#然后将 lib.tar 使用tftp 放到目标板上并解压
tar -xvff lib.tar
make 完之后发现,make install 失败,不要在意,可以手动拷贝生成的可执行文件,其中包括 :
scp
sftp
sftp-server
ssh
ssh-add
ssh-agent
ssh-keygen
ssh-keyscan
ssh-keysign
ssh_config
sshd
sshd_config
将sshd 拷贝到 3516 的 /usr/sbin 目录
将以下文件拷贝到3516 的 /usr/local/bin
scp
sftp
ssh
ssh-add
ssh-agent
ssh-keygen
ssh-keyscan
拷贝 sftp-server ssh-keysign 到3516 /usr/local/libexec
在目标板3156 下: mkdir -p /usr/local/etc/;将sshd_config , ssh_config 拷贝到该目录下
制作日志目录
mkdir -p /var/run
mkdir -p /var/empty/sshd
chmod 755 /var/empty
设置环境变量
vi ~/.profile
export PATH=$PATH:/usr/local/bin
生成密钥
本地的机器上面执行
ssh-keygen -q -t ed25519 -f ssh_host_ed25519_key -C '' -N ''
ssh-keygen -q -t rsa -f ssh_host_rsa_key -C '' -N ''
ssh-keygen -q -t dsa -f ssh_host_dsa_key -C '' -N ''
chmod 600 ssh_host_ed25519_key
chmod 644ssh_host_ed25519_key.pub
chmod 600 ssh_host_rsa_key
chmod 644 ssh_host_rsa_key.pub
chmod 600 ssh_host_dsa_key
chmod 644 ssh_host_dsa_key.pub
4.测试
目标板启动sshd:
首先在 3516上面
adduser sshd
然后需要设置板子的ip
ifconfig eth0 172.10.10.83 netmask 255.255.255.0
route add default gw 172.10.10.1#网关
其中网关地址172.10.10.1 和想进行ssh 登陆3516 的本机网关一致,可以通过ipconfig 或者ifconfig 查看
# /usr/sbin/sshd -f /usr/local/etc/sshd_config &
//在开发板上运行这个命令的时候可能会提示 //Privilege separation user sshd does not exist //需要在开发板的系统里adduser shhd //或者在 /etc/passwd 中添加下面这一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
主机: $ ssh [email protected](开发板的ip) //root密码就是你本机上root的密码
移植完成了 目标板启动sshd: # /usr/sbin/sshd 主机: $ ssh -v [email protected] 但是有点问题会报一大堆错,高手告诉我要删掉 /root/.ssh/known_hosts