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
-
首先配置好官方的SDK,工具链必须是hisiv400的,这个工具链是glibc版本的,同时为了保持和内核的兼容性。
-
首先找到当前openssh的稳定版本,下载地址为下面的地址,版本为7.5p1
ftp://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/
下载解压后,这里有一个文件希望大家在移植前先读一读根目录下一个叫做INSTALL的文本文件,特别是关于依赖的zlib和openssl兼容版本部分(下图已圈出重点)。下面是截图:
![rep_img](https://flyinskyin2013.github.io/ImageBed0/blogs/blog_idx_041/install.png)
友情提示:一定要选择 《 版本合适 》 的zlib和openssl,不然最后编译不过openssh,我就是踩了这个坑。
- 移植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,中间的随意填,只要注意他的命名规则就好了
![rep_img](https://flyinskyin2013.github.io/ImageBed0/blogs/blog_idx_041/guess_os.png)
然后,make ,make install 就好了(其实有兴趣的可以去研究那个叫做Configure的文件,并直接执行这个脚本就可以配置完成了,但是在linux下,这样不推荐,config脚本也是调用的Configure的那个脚本)
2019/5/17更新
关于交叉编译,其实其INSTALL文件中有一段说明:
![rep_img](https://flyinskyin2013.github.io/ImageBed0/blogs/blog_idx_041/install1.png)
意思就是让我们直接修改Configure脚本,然后得到自己想要的架构的库。经过一番研究发现,大概需要如下步骤:
1 首先查看适合你的架构
![rep_img](https://flyinskyin2013.github.io/ImageBed0/blogs/blog_idx_041/arch.png)
这里的话,我板子是armv7的,所以我选择linux-armv4,如果是64位的,就选择linux-aarch64.
但是这样还不够,因为我们还需要指定编译相关的工具名字,这里需要直接去修改Cofigure脚本。
2 修改如下:
![rep_img](https://flyinskyin2013.github.io/ImageBed0/blogs/blog_idx_041/arch1.png)
3 然后执行:./Configure linux-armv4 --prefix=xxx shared
4 make -j 16 && make install
- 移植zlib-1.2.11,下载地址(http://www.zlib.net/),这个我没有找到好的方法,只有通过原始的改Makefile来实现。首先
./config --prefix=/.../.../.../zlib_install
把makefile里面的CC,LDSHARED,CPP,AR,RANLIB等变量中编译链接相关的东西,改为交叉工具链中对应的东西。然后make,make install
- 开始正题。
./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
后记
无
参考文献
- 无
![qrc_img](https://flyinskyin2013.github.io/ImageBed0/blogs/qrcode_for_wx_official_account.jpg)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。