iTOP-4412開發板-實戰教程-ssh服務器移植到arm開發板


本文轉自迅為開發板:http://www.topeetboard.com

 

在前面實戰教程中,移植了“串口文件傳輸工具”,整個移植過程是比較簡單的,而且我

們沒有做任何協議方面的了解,只是“配置”+“編譯”就完成了整個工作,現在大家應該對

移植開源軟件有了基本的了解。

入門視頻教程中,給 Windows系統安裝了 ssh 客戶端,給 Ubuntu 安裝了 ssh 服務器,

這樣就可以通過 ssh Windows和虛擬機 Ubuntu 之間傳輸文件。其實在開發板上也是可以

移植和安裝 ssh 服務器,這樣就可以通過網絡,在 Windows和開發板之間傳輸文件。

“實戰教程-ssh 服務器移植到開發板”,我們要完成的目標是能夠通過 ssh 在開發板在

Windows和開發板之間傳輸文件,當然也是可以使用 ssh 控制台。

這個實驗比前面的“串口文件傳輸工具”教程在工程(實用性)上是更加有用的,假如在

實際的產品中,運行的是根文件系統,沒有界面,如果數據需要在開發板和 Windows傳輸數

據,對於普通用戶來說,是一個很好的選擇,操作起來比較簡單,只需要登陸然后直接將文件

拖來拖去即可。

這個實驗的難度要比“串口文件傳輸工具”要大一點,ssh 服務器需要依賴其他的庫文

件,所以需要開發者先移植完成所有依賴的庫文件,最后才能移植 ssh 服務器。

 

 

1 ssh官網和下載地址

本小節的地址在作者沒有代理的情況下,測試可用。

OpenssL 下載官網地址,如下所示。就是羅永浩捐過 100 萬的那個開源組織。

https://www.openssl.org/source/

OpenssL github 下載地址,如下所示。

https://github.com/openssl/openssl

ssh 開源組織官網地址,如下所示。

http://www.openssh.com/

HXng KXngo X 替代,以防文檔上傳之后被屏蔽)的 ssh 下載地址,測試可以用,

如下所示。

https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

zlib 官網地址,如下所示。

http://www.zlib.net/

 

2 詳細移植過程

源碼使用迅為下載好的,編譯器使用arm-2009q3”。作者是在

/home/project/ssh-arm/”目錄下,解壓編譯配置這三個需要移植的文件,用戶如果在其

它目錄下,配置文件需要根據實際情況修改,安裝目錄是/home/project/ssh-arm/”目錄

下的install”文件夾,如下圖所示。

 

 

 

 

 

 

 

如下圖所示,安裝目錄install”下新建兩個文件夾“openssl-0.9.8h”和“zlib-1.2.3”,后面編譯之后需要安裝到這個目錄下。

 

 

 

 

 

 

 

2.1 移植zlib

拷貝zlib-1.2.3.tar.gz”到 Ubuntu 系統,使用命令“tar -vxf zlib-1.2.3.tar.gz”解

壓,得到zlib-1.2.3”文件夾,使用命令“cd zlib-1.2.3”進入“zlib-1.2.3”文件夾,如下

圖所示。

 

 

 

 

 

接着使用命令./configure --prefix=/home/project/ssh-arm/install/zlib-1.2.3”,設

置配置文件,如下圖所示。

 

 

 

 

 

使用命令vim Makefile”修改編譯參數,將所有 gcc 修改為“arm-none-linux-gnueabi-gcc”,如下圖所示。

 

 

 

 

 

 

接着使用編譯命令make”,如下圖所示。

 

 

 

 

 

接着使用安裝命令make install”,如下圖所示。

 

 

 

 

 

在后面編譯 SSH 的時候,需要用到 zlib 庫,作者這里的路徑是“/home/project/ssh-arm/install”下后面配置的時候需要對應,生成的庫文件,如下圖所示。

 

 

 

 

 

 

這部分移植其實就是修改了編譯器,修改編譯器之后編譯出的文件和不修改編譯出來的文

件是不一樣的。在移植過程中,可能因為沒有將寄存器配置為目標系統的編譯器,那么編譯出

來的一定運行不了。這里可以通過 linux strings 命令查看非文本文件中的可讀內容,通常

可以和 grep 命令搭配使用。

如下圖所示,使用命令strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a”可以查看到所有可讀信息,可讀信息比較多,可以保存為文本再查看,使用

命令strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a > log.my”重定位一

下輸出即可。

 

 

 

 

 

 

 

這里需要用到的命令是strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a | grep GCC””,如下圖所示。

 

 

 

 

 

 

 

如上圖所示,可以看到編譯器版本是2009q3-67-4.4.1”的,說明這個庫是使用我們設

置的編譯編譯的,編譯出的庫文件當然也是 arm 上使用的。

2.2 移植openssl

接着來移植 openssl 庫,拷貝“openssl-0.9.8h.tar.gz”到 Ubuntu 系統,使用命令

tar -vxf openssl-0.9.8h.tar.gz”解壓,得到“openssl-0.9.8h”文件夾,使用命令“cd

openssl-0.9.8h”進入“openssl-0.9.8h”文件夾,如下圖所示。

 

 

 

 

 

 

 

接着使用命令./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/project/ssh-arm/install/openssl-0.9.8h”配置編譯文件,

如下圖所示。

 

 

 

 

 

 

配置完成,如下圖所示。

 

 

 

 

 

 

 

使用編譯命令make”,如下圖所示。

 

 

 

 

 

 

編譯完成,如下圖所示。

 

 

 

 

 

 

最后使用安裝命令make intall”,如下圖所示。

 

 

 

 

 

編譯完成,如下圖所示。

 

 

 

 

 

如下圖所示,可以看到生成了對應的庫文件,這是后面移植 ssh 需要的。

 

 

 

 

 

 

和前面 libz.a 小節類似,可以使用命令查看一下編譯出來的文件到底有沒有配置正確。

 

2.3 移植ssh

接着來移植 openssh,拷貝“openssh-4.6p1.tar.gz”到 Ubuntu 系統,使用命令“tar

-vxf openssh-4.6p1.tar.gz”解壓,得到“openssh-4.6p1”文件夾,使用命令“cd

openssh-4.6p1/”進入“openssh-4.6p1”文件夾,如下圖所示。

 

 

 

 

這里看一下 ssh configure 的幫助文件,如下圖所示,使用“ ./configure --help”。

 

 

 

 

 

 

ssh configure 文件中需要配置的參數

 

--host 表示編譯出來要運行的平台

--with-libs 表示需要的額外的庫文件;

--with-zlib 表示庫文件 zlib instal 路徑 l

--with-ssl-dir 表示 OpenSSl 文件的 install 路徑;

--disable-etc-default-login 表示不使用當前環境變量的編譯器,所以后面配置參數

時,最后直接配置 CC AR 這兩個編譯器;

CC 表示設置使用的編譯器;

AR 表示設置使用的編譯器的路徑(蠻奇怪,配置文件中似乎沒有這個參數,用戶可以執

行驗證下)。

接着使用配置命令,命令比較長,作者使用顏色給大家分段:

./configure --host=arm-none-linux --with-libs --with-zlib=/home/project/ssh-arm/install/zlib-1.2.3 --with-ssl-dir=/home/project/ssh-arm/install/openssl-0.9.8h--disable-etc-default-login CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar

配置編譯文件,如下圖所示。

 

 

 

 

 

 

配置完成,如下圖所示。

 

 

 

 

 

 

使用編譯命令make”,如下圖所示。

 

 

 

 

 

 

 

編譯完成,如下圖所示。

 

 

 

 

 

 

編譯完成,最后肯定是需要安裝到開發板上的,如下圖所示。最后在目錄下

/home/project/ssh-arm/openssh-4.6p1”有這幾個二進制文件“scp sftp ssh

sshdssh-addssh-agentssh-keygenssh-keyscan”需要安裝到開發板上。最終編譯

出來的二進制文件,可以使用 file 命令查看文件屬性,如下圖所示,使用命令“file scp”,

可以看到scp”文件是 32 ARM 上使用的可執行文件。

 

 

 

 

 

 

3 安裝測試

3.1 基本文件的安裝

在開發板上新建/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三個目

錄,使用命令mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下圖所示。

 

 

 

 

 

 

 

在虛擬機 Ubuntu 上,將 openssh-6.6p1 下的生成“scp sftpsshsshdssh-addssh-agentssh-keygenssh-keyscan”可執行文件拷貝到開發板的

/usr/local/bin”目錄下,拷貝完成,如下圖所示。

 

 

 

 

 

 

 

modulissh_configsshd_config”拷貝到開發板的“/usr/local/etc”目錄下,

拷貝完成,如下圖所示。

 

 

 

 

 

 

 

sftp-serverssh-keysign”拷貝到開發板的“/usr/libexec”目錄下,拷貝完成,

如下圖所示。

 

 

 

 

 

 

 

 

3.2 生成key文件,並安裝

使用ssh-keygen”生成是個 key 文件“ssh_host_rsa_key”“ssh_host_dsa_key

ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。

在虛擬機 Ubuntu 控制台,“/home/project/ssh-arm/openssh-4.6p1”目錄下,使用

命令ssh-keygen -t rsa -f ssh_host_rsa_key -N ""”,可以生成“ssh_host_rsa_key ”文

件,如下圖所示。

 

 

 

 

 

 

 

接着使用剩下的三條命令:

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 ""

 

 

執行完成之后,生成的文件如下圖所示。

 

 

 

 

 

將生成的ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”和

ssh_host_ed25519_key”文件,拷貝到開發板的“/usr/local/etc/”目錄,然后將其權限

修改為 600,如下圖所示。

 

 

 

 

3.3 修改目標板秘鑰文件

在開發板串口控制台中,使用命令vi /etc/passwd”,打開 ssh 秘鑰文件,在

/etc/passwd”文件底行添加以下內容:

sshd:x:74:74:Privilege-separated

SSH:/var/empty/sshd:/sbin/nologin

添加完成之后,如下圖所示,然后保存,秘鑰文件修改完成。

 

 

 

 

 

 

3.4 測試

作者的開發板鏈接路由器,PC 機的 Windows系統也是鏈接路由器,所以首先要確保開

發板和 PC 機是可以 Ping 通的,如下圖所示。

作者的 PC IP 為:192.168.2.12,如下圖所示。

 

 

 

 

 

 

 

開發板的 IP 為:192.168.2.230,如下圖所示。

 

 

 

 

 

 

 

使用 ping命令測試,如下圖所示,網絡通暢,另外按鍵“Ctrl+c 可以結束 ping

作。

 

 

 

 

 

 

 

接着在開發板上新建 root 賬戶,如下圖所示,使用命令“passwd root”,它會提示輸

入密碼,需要重復輸入兩次以防輸錯。

 

 

 

 

 

 

然后在開發板上運行 sshd 二進制文件,使用命令“/usr/local/bin/sshd”,如下圖所

示,雖然報錯了,但是不影響使用。如果提示缺少動態庫,前面的庫文件如果拷貝不全,可能

出現這種問題,如果用戶使用迅為電子的根文件系統,經過測試各種文件都拷貝沒有錯誤,一

般是不會提示缺少什么庫的。

 

 

 

 

 

 

接着使用ps”命令,查看一下 sshd 是否在運行,如下圖所示,可以看到 sshd 已經運

行了。

 

 

 

 

然后使用工具 ssh 測試是否和 PC 聯通能否正常通信,如下圖所示,使用命令

/usr/local/bin/ssh 192.168.2.12”,這里的 IP 是作者 PC IP

 

 

 

 

接着在 PC 上使用 ssh 工具連接開發板,使用方法和連接 Ubuntu 上的 ssh 類似,如下圖

所示。

 

 

 

 

 

 

然后傳一個文件測試下,如下圖所示。

 

 

 

 

 

 

然后通過 ssh 直接拖到到 pc 上,如下圖所示,內容不變,說明成功完成了文件傳輸移植

工作。

 

 

 

 

ssh 控制台也是可以使用的,如下圖所示,登陸方法和 PC 連接虛擬機 Ubuntu ssh

樣。

 

 

 

 

 

另外在安裝部分,也可以將其拷貝到文件系統的源碼中對應目錄,重新打包編譯,生成直

接支持 ssh 的鏡像。

到這里,部分用戶可能會有疑惑,第一個人是如何知道 ssh 需要這兩個庫文件的呢?首

先,開發 ssh 軟件的大神,做了這個東西會提供編譯和使用 demo,這樣就有了基礎的英文移

植文檔,然后慢慢的會有中文版的,接着 ssh 流傳開了之后,通過網絡搜索 ssh 移植到 arm

的方法的文檔和博客,就隨處可見了。

當然,假如將來大家工作有移植的需求,找不到中文教程,需要直接使用某個開源軟件的

demo,首先就需要英文過關,然后還需要有移植的基礎知識。在編譯的過程中,它會提示缺

少各種庫,通過編譯,也是可以一步一步找出依賴庫的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM