PS:要转载请注明出处,本人版权所有。

PS: 这个只是基于《我自己》的理解,

如果和你的原则及想法相冲突,请谅解,勿喷。

前置说明

  本文作为本人csdn blog的主站的备份。(BlogID=041)

  本文发布于 2017-09-20 09:59:43,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=041)

环境说明

  HOST:

    Linux 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

  TARGET:

    arm-hisiv400-linux-gnueabi 工具链,GLIBC-Kernel

前言


  最近有个项目是使用的hisiv3520d的片子,按照官方SDK移植好了glibc-kernel之后,准备进行后期的开发。但是这块板子只有一个调试串口,多个同事就不能够同时使用这块板子,所以,就有了移植openssh的想法。

移植Openssh


  1. 首先配置好官方的SDK,工具链必须是hisiv400的,这个工具链是glibc版本的,同时为了保持和内核的兼容性。

  2. 首先找到当前openssh的稳定版本,下载地址为下面的地址,版本为7.5p1

    ftp://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/

    下载解压后,这里有一个文件希望大家在移植前先读一读根目录下一个叫做INSTALL的文本文件,特别是关于依赖的zlib和openssl兼容版本部分(下图已圈出重点)。下面是截图:

  友情提示:一定要选择 《 版本合适 》 的zlib和openssl,不然最后编译不过openssh,我就是踩了这个坑。

  1. 移植openssl-1.0.2l,下载地址(https://www.openssl.org/source/)。这里很多网上的交叉编译方法答案都比较的乱,个人感觉有点复杂,都没有仔细的去读INSTALL文件。

  其实直接执行:

./config no-asm shared --prefix=/home/sky/hisi3520d/Work/install --cross-compile-prefix=arm-hisiv400-linux-gnueabi-

  我就不对这些参数一一说明了,这些参数的说明来自于Configure和INSTALL这个文件。非常全,下面是节选的部分说明。

# --prefix      prefix for the OpenSSL include, lib and bin directories
# --cross-compile-prefix Add specified prefix to binutils components.
# no-asm do not use assembler
# shared In addition to the usual static libraries, create # shared libraries on platforms where it's supported.

  这里,我们需要查找自己要移植的芯片的arm架构版本,并且修改.config里面的有个叫做GUESSOS的变量。我看它脚本里面写的TARGET名字的规则(如下图),就自己定义一个合理的值给GUESSOS(这里很烦的,这个东西猜不准我的目标架构)

  比如我给的值就是GUESSOS=armv7-hisi-3520d-linux2,中间的随意填,只要注意他的命名规则就好了

  然后,make ,make install 就好了(其实有兴趣的可以去研究那个叫做Configure的文件,并直接执行这个脚本就可以配置完成了,但是在linux下,这样不推荐,config脚本也是调用的Configure的那个脚本)

2019/5/17更新

  关于交叉编译,其实其INSTALL文件中有一段说明:

  意思就是让我们直接修改Configure脚本,然后得到自己想要的架构的库。经过一番研究发现,大概需要如下步骤:

    1 首先查看适合你的架构

  这里的话,我板子是armv7的,所以我选择linux-armv4,如果是64位的,就选择linux-aarch64.

  但是这样还不够,因为我们还需要指定编译相关的工具名字,这里需要直接去修改Cofigure脚本。

    2 修改如下:

    3 然后执行:./Configure linux-armv4 --prefix=xxx shared

    4 make -j 16 && make install

  1. 移植zlib-1.2.11,下载地址(http://www.zlib.net/),这个我没有找到好的方法,只有通过原始的改Makefile来实现。首先
./config --prefix=/.../.../.../zlib_install

  把makefile里面的CC,LDSHARED,CPP,AR,RANLIB等变量中编译链接相关的东西,改为交叉工具链中对应的东西。然后make,make install

  1. 开始正题。
./configure --host=arm-hisiv400-linux-gnueabi --with-libs --with-zlib=/home/sky/hisi3520d/Work/install --with-ssl-dir=/home/sky/hisi3520d/Work/install --disable-etc-default-login CC=arm-hisiv400-linux-gnueabi-gcc AR=arm-hisiv400-linux-gnueabi-ar

  然后make就可以了。最终生成的openssh相关的可执行程序在根目录。

特此说明:configure 脚本可通过--prefix参数来配置实际的安装目录,编译生成的程序写死这个目录,若不想使用默认的配置,建议使用此参数配置

最后相关的安装步骤在:http://blog.csdn.net/u011728480/article/details/78969958

后记


  无

参考文献


打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。

移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇)的更多相关文章

  1. windows 下编译 OpenSSL1.0.2l 版

    1.需要的软件工具: microsoft visual studio2013(或2010以后其他版本) Perl 软件, 版本为strawberry - perl - 5.26.0.1 - 64bit ...

  2. 移植openssh到nuc951 evb板

    移植openssh到nuc951 evb板 一 应用环境: 硬件:nuc951evb 软件:linux2.6.35 bsp 二 交叉编译openssl openssh 1.下载 openssl-1.0 ...

  3. 移植openssh到arm linux

    一.在移植之前需要准备做一些前期准备: 1.移植zlib库 1.1获取zlib源码 1.2解压 tar xvf zlib-1.2.11.tar.xz 1.3交叉编译 1.3.1 指定交叉编译器 exp ...

  4. python3 安装 #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz RHEL 8 install Python 3 or Python 2 using yum 编译安装 python3.7.4 . OpenSSL 1.0.2 or 1.1. Consequently, OpenSSL 0.9.8 and 1.0

    #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz Modules/Setup.dist https://askubuntu ...

  5. OpenSSL 1.0.2e 3 Dec 2015

    目录: 1,交叉编译openssl 2,win32  vc9 编译 openssl 1,交叉编译openssl [原]交叉编译openssl不修改Makefile的方法 http://blog.chi ...

  6. vs2008环境nmake编译 apache 2.2.29 openssl 1.0.1g mod_ssl 不知道如何生成“"..\..\srclib\openssl\inc32\openssl\store.h"”

    问题: vs2008环境nmake编译 apache 2.2.29 openssl 1.0.1g mod_ssl 不知道如何生成“"..\..\srclib\openssl\inc32\op ...

  7. OpenSSL 1.0.0生成p12、jks、crt等格式证书的命令个过程(转)

    OpenSSL 1.0.0生成p12.jks.crt等格式证书的命令个过程   此生成的证书可用于浏览器.java.tomcat.c++等.在此备忘!     1.创建根证私钥命令:openssl g ...

  8. OpenSSL 1.0.0生成p12、jks、crt等格式证书的命令个过程 -参考自http://lavasoft.blog.51cto.com/62575/1104993/

    OpenSSL 1.0.0生成p12.jks.crt等格式证书的命令个过程   此生成的证书可用于浏览器.java.tomcat.c++等.在此备忘!     1.创建根证私钥命令:openssl g ...

  9. centos下从源码安装openssl 1.0.1g

    cd /usr/srcwget https://www.openssl.org/source/openssl-1.0.1g.tar.gz -O openssl-1.0.1g.tar.gz tar -z ...

  10. 2014年第一季度Oracle PSU更新(包括10.2.0.4+版本号全部PSU信息)

    2014年第一季度的PSU更新主要是3个版本号:12.1.11.2.0.4.11.2.0.3以及11.1.0.7. 在第2季度Oracle 将公布12.1.0.2,同一时候11.2.0.4版本号也将是 ...

随机推荐

  1. Linux 进程卡住了怎么办?

    在我们使用 Linux 系统时,如果网络或者磁盘等 I/O 出问题,会发现进程卡住了,即使用 kill -9 也无法杀掉进程,很多常用的调试工具,比如 strace, pstack 等也都失灵了,是怎 ...

  2. mit6.824lab2D-Debug记录

    1.死锁 要提交快照的时候由于没有人取走applyCh通道里面的东西,导致死锁. 具体解释: 2D的测试代码中在日志达到一定大小时会调用snapshot,该函数需要申请rf.mu这个互斥锁.而在提交普 ...

  3. 零基础入门学习Java课堂笔记 ——day02

    流程控制 1.Scanner对象 来源:java.util.Scanner 我们可以通过Scanner类来获取用户的输入输出 用户交互Scanner 通过new关键词创建Scanner对象 Scann ...

  4. MySQL架构体系介绍

    一.MySQL的完整架构体系 MySQL完整的架构体系: (1)Connectors 指的是不同语言中与SQL的交互. (2)Connection Pool 管理缓冲用户连接,线程处理等需要缓存的需求 ...

  5. 用set做一轮无重复纯随机

    前端时间面腾讯的时候,一位老师问了一个相当有趣的问题:假设存在一个音乐播放器,里面有一个100首歌的歌单.现在需要做一个随机播放功能,要求不重复的随机播放完一百首歌.当时脑子短路了没想出来,几天突然意 ...

  6. NC15445 wyh的吃鸡

    题目链接 题目 题目描述 最近吃鸡游戏非常火,你们wyh学长也在玩这款游戏,这款游戏有一个非常重要的过程,就是要跑到安全区内,否则就会中毒持续消耗血量,我们这个问题简化如下 假设地图为n*n的一个图, ...

  7. nginx 配置stream模块代理并开启日志配置

    前言 nginx 1.20.1nginx从1.9.0开始,新增加了一个stream模块确保nginx 安装时开启stream模块 ./configure \ -- \--with-stream \ - ...

  8. java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

    前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...

  9. STC12硬件SPI驱动MAX7219点阵LED

    max7219是一个用于驱动8位7段数字LED或者8x8点阵LED的驱动芯片, 以列扫描的方式, 用16个pin管理64个发光点, 显示8个数字时刷新率为500-1300Hz, 典型值为800Hz. ...

  10. Oracle正则表达式实战

    原文链接:http://oracle-base.com/articles/misc/regular-expressions-support-in-oracle.php Introduction Exa ...