移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇)

2024-06-16 07:08

本文主要是介绍移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷
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的想法。

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

###Second
首先找到当前openssh的稳定版本,下载地址为下面的地址,版本为7.5p1
ftp://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/
下载解压后,这里有一个文件希望大家在移植前先读一读根目录下一个叫做INSTALL的文本文件,特别是关于依赖的zlib和openssl兼容版本部分(下图已圈出重点)。下面是截图:

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

###Third
移植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
###Fourth
移植zlib-1.2.11,下载地址(http://www.zlib.net/),这个我没有找到好的方法,只有通过原始的改Makefile来实现。
首先

./config --prefix=/.../.../.../zlib_install

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

###Fifth
开始正题。

./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:要转载请注明出处,本人版权所有.

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

这篇关于移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065781

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

Golang test编译使用

创建文件my_test.go package testsimport "testing"func TestMy(t *testing.T) {t.Log("TestMy")} 通常用法: $ go test -v -run TestMy my_test.go=== RUN TestMyTestMy: my_test.go:6: TestMy--- PASS: TestMy (0.