最近專案需要用到armv8 cpu的嵌入式精簡的檔案系統,但是busybox生成的檔案系統只支援telnet,不支援ssh連線,而openssh的庫又很大,不符合精簡檔案系統,想到了輕量級的dropbear,下面就編譯dropbear的步驟和遇到的問題進行一下說明。
目標環境: nxp的armv8
交叉編譯鏈:aarch64-fsl-linux-gcc
涉及到的lib庫:
libz.so.1.2.8、libutil-2.20-2014.11.so、libcrypt-2.20-2014.11.so
由於本人交叉編譯鏈已經有相應的庫,這裡就不在對相應庫的交叉編譯進行說明了,如果交叉編譯鏈中沒有以上庫請先自行編譯。
將dropbear-2016.74.tar.bz2放到/home/freescale/test,解壓縮dropbear
tar -xvf dropbear-2016.74.tar.bz2
進入dropbear目錄,配置dropbear
cd dropbear-2016.74
./configure --prefix=/home/freescale/test/build/dropbear
修改生成的makefile
cc=aarch64-fsl-linux-gcc(根據所使用的交叉工具鏈修改)
ar=aarch64-fsl-linux-ar
ranlib=aarch64-fsl-linux-ranlib
編譯並安裝
make
make scp
make install
拷貝scp到安裝目錄
cp scp /home/freescale/test/build/dropbear/bin
strip所有的可執行檔案
aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/bin/*
aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/sbin/*
把所有bin目錄和sbin目錄檔案拷貝到精簡檔案系統對應的bin和sbin目錄中,拷貝上述涉及到的lib庫到精簡檔案系統的lib目錄,建立dropbear配置目錄,並生成金鑰
mkdir /etc/dropbear
cd /etc/dropbear
dropbearkey -t rsa -f dropbear_rsa_host_key
dropbearkey -t dss -f dropbear_dss_host_key
ln -s /bin/dbclient /bin/ssh
ln -s /lib/libz.so.1.2.8 /lib/libz.so.1
ln -s /lib/libutil-2.20-2014.11.so /lib/libutil.so.1
ln -s /lib/libcrypt-2.20-2014.11.so /lib/libcrypt.so.1
dropbear即為服務端,dbclient即為客戶端,新增系統啟動服務
vi /etc/init.d/rcs
新增/usr/sbin/dropbear
到此處dropbear準備工作已經完畢,重啟系統後,用pc通過ssh遠端登入
如果是正常檔案系統應該不會出現問題,但是筆者是自己做的精簡檔案系統,用ssh登入後,ssh要求輸入使用者名稱、密碼的介面出來了,發現輸入使用者名稱、密碼之後一直提示密碼錯誤。可以確定的是使用者名稱和密碼是一定沒有輸錯的。
而將dropbear前台啟動: /usr/bindropbear -e -f 發現單板一直列印不存在的使用者登入
原來是linux認證搞得鬼,此問題需要兩個檔案:
vi /etc/shells
新增/bin/sh
/bin/bash
/bin/bash64
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/bin/ksh
/bin/zsh
ln -s /lib/libnss_files-2.20-2014.11.so /lib/libnss_files.so.2
此問題的詳細說明請參考:
show下xz壓縮後的ext4 ramdisk精簡檔案系統大小:僅有2.6m
linux 核心交叉編譯
我使用執行make menuconfig配置核心。使用之前,先執行make mrproper,該命令會刪除核心源 中的.config檔案和.o檔案保證源 的乾淨。在執行make menuconfig時,這裡面會涉及到幾個資料夾 linux核心根目錄下的scripts資料夾 arch arch kco...
Linux之交叉編譯
交叉編譯 在乙個平台上生成另乙個平台的可執行 編譯 是在乙個平台上生成該平台的可執行程式 為什麼要交叉編譯 有的平台上不允許或者不能夠安裝我們所需要的編譯器比如c51。因為目的平台上的資源匱乏,無法執行我們所需要的編譯器。樹莓派是不是就不需要交叉編譯?錯。也要,樹莓派有時又是因為目的平台還沒建立,連...
Linux中交叉編譯libiio
1 toolchainfile.cmake 交叉編譯libiio,需要使用到cmake。而根據參考資料 1 中有關交叉編譯的說明,cmake此時需要乙個toolchainfile.cmake檔案 改為其它名字也行 根據參考資料 2 的說明,編輯toolchainfile.cmake的內容如下 thi...