迅為iMX6ULL開發板移植 ssh 服務
硬體平臺:i.MX6UULL開發板
轉自:迅為i.MX6UULL開發板使用手冊第七十五章
整個移植過程是比較簡單的,而且我們沒有做任何協議方面的瞭解,只是“配置”+“編譯”就完成了整個工作,現在大家應該對移植開源軟體有了基本的瞭解。本章節使用的資料已經放到了開發板網盤資料中,路徑為:11_Linux系統開發進階\75_章節使用資料。
入門視訊教程中,給Windows 系統安裝了 ssh 客戶端,給 Ubuntu 安裝了 ssh 伺服器,這樣就可以通過 ssh 在 Windows 和虛擬機器 Ubuntu 之間傳輸檔案。其實在開發板上也是可以移植和安裝 ssh 伺服器,這樣就可以通過網路,在 Windows 和開發板之間傳輸檔案。
我們要完成的目標是能夠通過ssh 在開發板在 Windows 和開發板之間傳輸檔案,當然也是可以使用ssh 控制檯。
這個實驗比前面的“串列埠檔案傳輸工具”教程在工程(實用性)上是更加有用的,假如在實際的產品中,執行的是根檔案系統,沒有介面,如果資料需要在開發板和 Windows 傳輸資料,對於普通使用者來說,是一個很好的選擇,操作起來比較簡單,只需要登陸然後直接將檔案拖來拖去即可。
這個實驗的難度要比“串列埠檔案傳輸工具”要大一點,ssh 伺服器需要依賴其他的庫檔案,所以需要開發者先移植完成所有依賴的庫檔案,最後才能移植 ssh 伺服器。
75.1 SSH官網和下載地址
本小節的地址在作者沒有代理的情況下,測試可用。
OpenssL 下載官網地址,如下所示。就是羅永浩捐過 100 萬的那個開源組織。
https://www.openssl.org/source/
OpenssL 的 github 下載地址,如下所示。
https://github.com/openssl/openssl
ssh 開源組織官網地址,如下所示。
http://www.openssh.com/
HXng KXng(o 用 X 替代,以防文件上傳之後被遮蔽)的 ssh 下載地址,測試可以用,
如下所示。
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
zlib 官網地址,如下所示。
http://www.zlib.net/
75.2
原始碼使用迅為下載好的,編譯器使用“arm-2009q3”。
作者是在“/home/topeet/project/ssh-arm/”目錄下,放三個需要移植的檔案,移植檔案的安裝目錄是“/home/topeet/project/ssh-arm/”目錄下的“install”資料夾。install 下新建兩個資料夾 “openssl-0.9.8h”和“zlib-1.2.3”,後面編譯之後需要安裝到這個目錄下。
75.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” 資料夾,如圖 75.2.1.1
Ø接著使用命令“./configure --prefix=/home/topeet/project/ssh-arm/install/zlib-1.2.3”,設定配置檔案,如圖 75.2.1.1 所示。
Ø使用命令“vim Makefile”修改編譯引數,將所有 gcc 修改為“arm-none-linux-gnueabi-gcc”,
如圖75.2.1.3 所示。
Ø接著使用編譯命令“make”,如圖 75.2.1.4 所示。
Ø執行make 無報錯後,接著使用安裝命令“make install”,如圖 75.2.1.5 所示。
Ø現在已經安裝好了zlib 庫,在後面編譯 SSH 的時候,需要用到 zlib 庫,作者這裡的路徑是 “/home/topeet/project/ssh-arm/install”,後面配置的時候需要對應生成的庫檔案,如圖 75.2.1.6所示。
Ø
這部分移植其實就是修改了編譯器,修改編譯器之後編譯出的檔案和不修改編譯出來的檔案是不一樣的。在移植過程中,可能因為沒有將編譯器配置為目標系統的編譯器,那麼編譯出來的一定執行不了。
這裡可以通過linux 的 strings 命令檢視非文字檔案中的可讀內容(libz.a),通常可以和 grep 命令搭配使用。
如下圖所示,使用命令“strings -a /home/topeet/project/ssh-arm/install/zlib-
1.2.3/lib/libz.a”可以檢視到所有可讀資訊,可讀資訊比較多,可以儲存為文字再檢視,使用
命令“strings -a /home/topeet/project/ssh-arm/install/zlib-1.2.3/lib/libz.a > log.my”重定位一下輸出即可。
這裡需要用到的命令是“strings -a /home/topeet/project/ssh-arm/install/zlib-
1.2.3/lib/libz.a | grep “GCC””,如圖 75.2.1.8 所示。
如上圖所示,可以看到編譯器版本是“2009q3-67-4.4.1”的,說明這個庫是使用我們設定的編譯編譯的,編譯出的庫檔案當然也是 arm 上使用的。
75.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”資料夾,如圖 75.2.2.1所示。
Ø接著使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-
gnueabi-gcc' --prefix=/home/topeet/project/ssh-arm/install/openssl-0.9.8h”配置編譯檔案, 如圖 75.2.2.2 所示。
配置完成,如圖75.2.2.3 所示。
Ø使用編譯命令“make”編譯完成,如圖 75.2.2.4 所示。
Ø最後使用安裝命令“make install”,編譯完成,如圖 75.2.2.5 所示。
如圖75.2.2.6所示,可以看到生成了後面移植ssh 需要的對應的庫檔案。
和前面libz.a 小節類似,可以使用命令檢視一下編譯出來的檔案到底有沒有配置正確。
75.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”資料夾,如圖 75.2.3.1所示。
Ø這裡看一下ssh 的 configure 的幫助檔案,如圖 75.2.3.2所示,使用“ ./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/topeet/project/ssh-arm/install/zlib-1.2.3
--with-ssl-dir=/home/topeet/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
配置編譯檔案,如圖75.2.3.3 所示。
配置完成,如圖75.2.3.4 所示
Ø使用編譯命令“make”,編譯完成,如圖 75.2.3.5 所示
Ø編譯完成,最後肯定是需要安裝到開發板上的,如下圖所示。最後在目錄下
“/home/topeet/project/ssh-arm/openssh-4.6p1”有這幾個二進位制檔案“scp 、sftp 、ssh、 sshd、 ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安裝到開發板上。最終編譯出來的二進位制檔案,可 以使用 file 命令檢視檔案屬性,如圖 75.2.3.6所示,使用命令“file scp”,可以看到“scp”檔案是 32 位 ARM 上使用的可執行檔案
關注公眾號“迅為電子” 持續更新行業乾貨!
迅為:http://topeetboard.com