RV1109开发板ssh服务器移植到arm开发板
RV1109開發板ssh服務器移植到arm開發板
ssh功能移植到RV1109開發板的,由于RV1109的SDK中,沒有telnet功能,有時候adb功能在量產中需要關閉,避免造成設備留有漏洞,造成安全隱患。所以將ssh功能移植到開發板,方便以后現場檢查設備問題或者查詢故障。
1、下載ssh的源碼文件
移植openssh需要三個包:openssh、openssl 和 zlib,地址如下:
zlib官方下載:http://www.zlib.net/
openssl官方下載:http://www.openssl.org/source
openssh官網下載:http://www.openssh.com/portable.html
因為它們之間不同版本存在依賴關系,為了保證編譯通過,選用較舊的版本。本文以openssh-6.1p1.tar.gz、openssl-1.0.1c.tar.gz、strace-4.19.tar.gz、zlib-1.2.3.tar.gz這個版本為例。
2、準備
虛擬機環境:VMware Workstation 15 Pro、ubuntu18.04
在虛擬機中創建/opt/ssh的文件夾,在ssh文件夾中創建compressed install source 這三個文件夾。
注:
compressed 壓縮文件目錄
source 解壓文件目錄
install 安裝文件目錄
解壓
cd /opt/ssh/compressed
tar zxvf zlib-1.2.3.tar.gz -C …/source/
tar zxvf openssl-1.0.1c.tar.gz -C …/source
tar zxvf openssh-6.1p1.tar.gz -C …/source
3、交叉編譯
3.1 移植zlib
由于RV1109開發板使用的交叉編譯工具為arm-linux-gnueabihf-gcc
cd /opt/ssh/source/zlib-1.2.3 //進入zlib-1.2.3 ./configure --prefix=/opt/ssh/zlib-1.2.3 Vim Makefile makemake install
在后面編譯 SSH 的時候,需要用到 zlib 庫,作者這里的路徑是
/usr/local/include/zlib.h
/usr/local/include/zconf.h
下后面配置的時候需要對應,生成的庫文件,如下圖所示。
這部分移植其實就是修改了編譯器,修改編譯器之后編譯出的文件和不修改編譯出來的文件是不一樣的。在移植過程中,可能因為沒有將寄存器配置為目標系統的編譯器,那么編譯出來的一定運行不了。這里可以通過 linux 的 strings 命令查看非文本文件中的可讀內容,通常可以和 grep 命令搭配使用。如下圖所示,使用命令“strings -a /opt/ssh/source/zlib-1.2.3/ibz.a”
可以查看到所有可讀信息,可讀信息比較多,可以保存為文本再查看,使用命令“trings -a /opt/ssh/source/zlib-1.2.3/ibz.a > log.my”重定位一下輸出即可。
這里需要用到的命令是“strings -a /opt/ssh/source/zlib-1.2.3/libz.a |grep “GCC””,如下圖所示。
如上圖所示,可以看到編譯器版本是“8.3-2019.03 (arm-rel-8.36) 8.3.0”的,說明這個庫是使用我們設置的編譯編譯的,編譯出的庫文件當然也是 arm 上使用的。
3.2 移植openssl
接著來移植 openssl 庫,如下圖所示
cd /opt/ssh/source/openssl-1.0.1c ./Configure –prefix=/opt/ssh/source/openssl-1.0.1c os/compiler:arm-linux-gnueabihf-gcc注:其中/opt/ssh/source/openssl-1.0.1c是openssl的絕對路徑
os/compiler:為固定格式
arm-linux-gnueabihf-gcc為開發板的交叉編譯工具鏈(根據開發板自行修改)
完成配置如圖所示:
進行修改makefile:
執行命令:vim Makefile
添加:
CROSS_COMPILE=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
注:路徑是交叉編譯工具鏈的絕對路徑,可根據各自開發板路徑自行修改
修改:
CC= $(CROSS_COMPILE)gcc
AR= $(CROSS_COMPILE)ar $(ARFLAGS) r
RANLIB= $(CROSS_COMPILE)ranlib
NM= $(CROSS_COMPILE)nm
修改完成如下:
退出makefile后,使用編譯命令“make”,如下圖所示。
make
make install
執行過程中,出現/usr/bin/pod2man錯誤
原因分析:這是由于openssl-1.0.1c 與 系統不兼容。
解決方法:
刪除 pod2man文件:
sudo rm /usr/bin/pod2man
再次執行make install,成功運行如下圖所示
3.3 移植openssh
接著來移植 openssh 庫,如下圖所示
cd /opt/ssh/source/openssh-6.1p1
ssh 的 configure 的幫助文件,如下圖所示,使用“ ./configure --help”。
ssh 的 configure 文件中需要配置的參數
–host 表示編譯出來要運行的平臺
–with-libs 表示需要的額外的庫文件;
–with-zlib 表示庫文件 zlib 的 instal 路徑 ;
–with-ssl-dir 表示 OpenSSl 文件的 install 路徑;
–disable-etc-default-login 表示不使用當前環境變量的編譯器,所以后面配置參數時,最后直接配置 CC 和 AR 這兩個編譯器;
CC 表示設置使用的編譯器;
AR 表示設置使用的編譯器的路徑
接著使用配置命令,命令比較長,作者給大家分段:
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/usr/local/include/ --with-ssl-dir=/opt/ssh/source/openssl-1.0.1c --disable-etc-default-login CC=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc AR=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ar
配置完成,如下圖所示。
編譯完成,最后肯定是需要安裝到開發板上的,如下圖所示。最后在目錄下“/opt/ssh/source/openssh-6.1p1”有這幾個二進制文件“scp 、sftp 、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安裝到開發板上。
最終編譯出來的二進制文件,可以使用 file 命令查看文件屬性,如下圖所示。使用命令“file scp”,可以看到“scp”文件是 32 位 ARM 上使用的可執行文件。
4 安裝測試
4.1 基本文件安裝
在開發板上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三個目
錄,使用命令“mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下圖所示。
在虛擬機 Ubuntu 上,將 openssh-6.1p1 下的生成“scp 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”可執行文件拷貝到開發板的“/usr/local/bin”目錄下,拷貝完成,如下圖所示。
將“moduli、ssh_config、sshd_config”拷貝到開發板的“/usr/local/etc”目錄下,拷貝完成,如下圖所示。
將“sftp-server、ssh-keysign”拷貝到開發板的“/usr/libexec”目錄下,拷貝完成,如下圖所示。
4.2 生成key文件,并安裝
使用“ssh-keygen”生成是個key文件“ssh_host_rsa_key”
“ssh_host_dsa_key”“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。
在虛擬機 Ubuntu 控制臺,“/opt/ssh/source/openssh-6.1p1”目錄下,
使用命令“ssh-keygen -t rsa -f ssh_host_rsa_key -N “””,可以生成“ssh_host_rsa_key ”文件,如下圖所示。
接著使用剩下的三條命令:
執行完成之后,生成的文件如下圖所示。
將生成的“ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”
和“ssh_host_ed25519_key”文件,拷貝到開發板的“/usr/local/etc/”目錄,然后將其權限修改為 600。(注意:這個權限一定要改成600,否則移植到開發板系統會報錯)如下圖所示。
4.3 修改目標板秘鑰文件
在開發板串口控制臺中,使用命令“vi /etc/passwd”,打開 ssh 秘鑰文件,在“/etc/passwd”文件底行添加以下內容:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin添加完成之后,如下圖所示,然后保存,秘鑰文件修改完成。
4.4 測試
作者的開發板鏈接路由器,PC 機的 Windows系統也是鏈接路由器,所以首先要確保開發板和 PC 機是可以 Ping 通的,如下圖所示。作者的 PC 的 IP 為:192.168.25.66,如下圖所示。
開發板的 IP 為:192.168.25.160,如下圖所示。
使用 ping命令測試,如下圖所示,網絡通暢,另外按鍵“Ctrl”+c 可以結束 ping動作。
接著在開發板上新建 root 賬戶,如下圖所示,使用命令“passwd root”,它會提示輸入密碼,需要重復輸入兩次以防輸錯。
然后在開發板上運行 sshd 二進制文件,使用命令“/usr/local/bin/sshd”,如下圖所示,雖然報錯,但是不影響使用。如果提示缺少動態庫,前面的庫文件如果拷貝不全,可能出現這種問題,如果用戶使用迅為電子的根文件系統,經過測試各種文件都拷貝沒有錯誤,一般是不會提示缺少什么庫的。
然后使用工具 ssh 測試是否和 PC 聯通能否正常通信,如下圖所示,使用命令“/usr/local/bin/ssh 192.168.25.66”,這里的IP 是作者PC 的IP。
接著在 PC 上使用 ssh 工具連接開發板,使用方法和連接 Ubuntu 上的 ssh 類似,如下圖所示。
成功連接進入開發板內部,如圖所示
到這里,開發板的ssh功能已經全部移植完成,在這次移植中作者參考了許多的文章,例如:https://www.cnblogs.com/topeet/p/9037563.html,非常感謝:topeet 的無私奉獻。 在前人的肩膀上進行移植,會少踩很多坑,再次感謝相關的開發者
作者:原風
時間:20220426
總結
以上是生活随笔為你收集整理的RV1109开发板ssh服务器移植到arm开发板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作为硬件开发,你一定要知道开发板是个什么
- 下一篇: DS18B20数字温度传感器及单总线协议