嵌入式学习小组
直播中

感谢相遇

9年用户 944经验值
擅长:嵌入式技术 制造/封装 控制/MCU
私信 关注

如何将mini2440嵌入式开发板移植到OpenSSH上去呢

如何将mini2440嵌入式开发板移植到OpenSSH上去呢?有哪些移植步骤呢?

回帖(1)

张桂兰

2021-12-27 12:06:44

  • 一、说明

移植对象:mini2440开发板(linux-kernel_6.2.32.2文件系统)
编译环境:deepin20.1
二、移植步骤

1. 下载

下载以下文件并解压:

2. 编译

编译总流程概述:先编译zlib和openssl,编译后会得到头文件和库文件,再用这些头文件和库文件辅助openssh编译,最后得到我们需要的移植程序。
这里,编译zlib和openssl可以得到动态链接库文件,也可以得到静态库链接文件,本文采取的是静态编译,即使用的是.a文件来辅助openssh编译。
2.1 找路径

2.2 zlib编译

编译说明:本文会在zlib文件夹中创建一个tmp目录,将zlib编译结果放入其中备用。
进入zlib解压后的目录,命令如下:
cd zlib-1.2.11/./configure --prefix=$PWD/tmp 配置完毕后,修改Makefile文件如下(…为省略后文):
CC=gcc           改为:CC=arm-linux-gccLDSHARED=gcc ... 改为:LDSHARED=arm-linux-gcc ...CPP=gcc -E       改为:CPP=arm-linux-gcc -EAR=ar            改为:AR=arm-linux-arRANLIB=ranlib    改为:RANLIB=arm-linux-ranlib 修改完后保存退出,先用make编译,之后再make install:
makemake install 之后就可以在zlib目录下看到一个tmp目录,打开如下:

进入lib目录:

进入include目录:

2.3 openssl编译

同理,openssl的编译流程也与zlib一样。
配置Makefile文件如下:
cd openssl-1.0.1d/./config --prefix=$PWD/tmp os/compiler:arm-linux-gcc 修改Makefile文件如下:

保存修改,退出,开始编译:
makemake install 同样生成tmp目录:
lib目录下:

include目录下:

2.4 openssh编译

openssh的编译需要用到前两步生成的文件。
补充:此处configure命令参数较多,可以使用./configure --help命令查看参数配置详情,如下:

以下编译命令可以告诉openssh在编译的时候到指定目录下寻找需要的文件:
./configure --host=arm-linux --with-libs --with-zlib=/home/hui/code/openssh/zlib-1.2.11/tmp --with-ssl-dir=/home/hui/code/openssh/openssl-1.0.1d/tmp --disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar
可以看到,通过–with-zlib 和 --with-ssl-dir就可以指定openssh编译需要的文件的路径了。
配置结束后,同样需要修改Makefile文件,如下:

要将Makefile中的CC,LD,AR,RANLIB改为上图中红色箭头所示。红色下划线的位置可以看出我们在configure命令中配置的路径已写入Makefile,openssh在编译过程中会去这里取用需要的头文件、库文件。
配置完毕,开始编译,注意:这里不要install
make make之后,就会在openssh文件目录下(当前目录)下生成移植openssh需要的所有文件,可以用以下命令查看:
ls scp sftp ssh sshd ssh-add ssh-keygen ssh-keyscan ssh-agent moduli ssh_config sshd_config sftp-server ssh-keysign  可看到:

3. 移植

移植过程就需要在开发板的linux系统上进行了。
3.1 创建文件夹

确保在开发板上有以下目录,没有的创建:
/usr/local/bin/usr/local/etc/usr/libexec/var/run/var/empty 在开发板上进行目录权限及所属设置(以下命令在开发板上运行):
chmod 755 /var/emptychown root:root /var/empty
3.2 复制文件

说明:由于当前开发板使用的是文件系统,使用了NFS挂载的方式,移植过程其实就是将文件复制到文件系统目录中而已。读者根据自己的情况,把以下指定的文件传到开发板指定目录即可。
1. 将之前openssh编译生成的 `scp sftp ssh sshd ssh-add ssh-agent ssh-keygen ssh-keyscan`   共8个文件传到mini2440开发板的`/usr/local/bin`目录下。
2. 将`moduli ssh_config sshd_config`共3个文件传到开发板的`/usr/local/etc`目录下。
3. 将`sftp-server ssh-keysign`共2个文件传到开发板的`/usr/libexec`目录下。
3.3 生成密钥文件

复制完文件后,回到开发板的/usr/local/bin目录下,依次执行以下四个命令:
注意:命令输入后等待时间稍长,不报错或没有Aborted的话,就等着命令执行完。
./ssh-keygen -t rsa -f ssh_host_rsa_key -N ""./ssh-keygen -t dsa -f ssh_host_dsa_key -N ""./ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""./ssh-keygen -t dsa -f ssh_host_ed25519_key -N "" 命令执行完毕,会有如下打印:

四个命令都执行完后,得到8个文件,在开发板的当前目录(/usr/local/bin)下,执行以下命令:
mv ssh_host* ../etc 该命令将以上四个命令生成的密钥文件移动到了开发板的/usr/local/etc目录下。

3.4 配置ssh

将开发板的/usr/local/etc目录下的sshd_config文件里的一句注释打开,以允许root登录,如下:

检查开发板上的/etc/passwd文件:

这里要用sh,不能用bash。
原因:我们开发板使用的是busybox,在开发板的/bin目录可以看到busybox提供的是sh命令,不是bash:

最后,在开发板上执行以下命令设置root用户登录密码:
passwd root
3.5 试登录ssh

先在开发板上运行sshd程序,执行以下命令:
/usr/local/bin/sshd 执行完后使用ps命令可查看sshd是否在运行:

开发板上sshd运行起来后,查看开发板的IP地址用来ssh登录:

在deepin(linux系统即可)的一个终端窗口执行以下命令即可通过ssh登录开发板了:
ssh -v root@192.168.10.45 输入命令后,如果能正常登录,第一次登录的时候就会出现是否确认登录,选yes;然后输入之前设置的root账号的密码即可登录了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分