1. 程式人生 > >嵌入式Linux中tftp和nfs的筆記

嵌入式Linux中tftp和nfs的筆記

一、tftp

我用的ubuntu14.04已經安裝好tftp服務,這裡記錄下網上的安裝方法:
1、伺服器安裝tftp,
apt-get install tftpd-hpa, tftp-hpa
我沒有安裝xinetd,能夠成功從伺服器下載檔案到開發板。
2、配置TFTP伺服器:

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/root/hi3518/tftpboot"  #伺服器端的tftp目錄
TFTP_ADDRESS="0.0.0.0:69"
#TFTP_OPTIONS="--secure"  
TFTP_OPTIONS="-l -c -s"

3、重啟tftp服務service tftpd-hpa restart

看看服務是否開啟
netstat -a | grep tftp
顯示結果為
udp 0 0 :tftp :*
表明服務已經開啟,就表明tftp配置成功了。
4、在伺服器端測試tftp:
tftp
get “filename”
但我這步沒有成功。

下面是在開發板上測試tftp
“需要注意的的是設定開發板的serverip與伺服器的ip設定一樣”
“關閉防火牆”
“開發板在編譯核心時應該把tftp選中,編譯進核心中”
1、在開發板進入Linux系統後,busybox中的tftp命令為:

# tftp
BusyBox v1.16.1 (2015-04-01 19:35:12 HKT) multi-call binary.
Usage: tftp [OPTIONS] HOST [PORT]
Transfer a file from/to tftp server
Options:
        -l FILE Local FILE (本地檔案)
        -r FILE Remote FILE (遠端伺服器上tftp目錄下的檔案)
        -g      Get file  (下載檔案)
        -p      Put file  (上傳檔案到伺服器)
        -b SIZE
Transfer blocks of SIZE octets
#

2、下載檔案到當前目錄tftp -g -r

# ls
hello    hello.c  world.c
# rm hello   
# ls
hello.c  world.c
# rm hello.c
# rm world.c
# ls
# tftp -g -r hello.c 192.168.1.105
hello.c              100% |**************************|   512  --:--:-- ETA
# cat hello.c
#include<stdio.h>
main(){
  printf("hello\r\n");
}
# tftp -g -r hello 192.168.1.105
hello                100% |*************************|  5120  --:--:-- ETA
# ./hello
-sh: ./hello: Permission denied
# ls -l hello
-rw-r--r--    1 root     root          4681 Jan  1 00:13 hello
# chmod 777 hello
# ./hello
hello
# 

3、uboot中也帶有tftp服務,其命令格式與busybox中的不一樣
在uboot命令下tftp下載伺服器檔案到ram中的確定的地址
mw.b 82000000 ff 100000 (擦除一定空間大小)
tftp 0x82000000 (下載檔案到此地址中)

這樣可方便的下載編譯好的核心和檔案系統,如果在Windows系統下用tftp需要tftpd32軟體,把在Linux系統中編譯好的檔案複製到Windows下,比較麻煩。

二、nfs

1、伺服器端nfs的配置,網上很多
配置檔案:etc目錄下的exports檔案,最後面新增下面一句:
/root/hi3518/nfs *(insecure,rw,sync,no_root_squash)
前面的目錄自己設定,*表示所有ip都可以訪問這個目錄,若要指定Ip可以這樣寫
/root/hi3518/nfs 192.168.1.*(insecure,rw,sync,no_root_squash)
開啟nfs
/etc/init.d/portmap start //用service portmap stasrt也可以
/etc/init.d/nfs start 或者service nfs start也可以

nfs掛載有兩種,一是把伺服器端的完整的檔案系統作為開發板的跟檔案系統掛載,
參考嵌入式linux之NFS啟動根檔案系統
二是把伺服器nfs目錄掛載在開發板上的一個目錄上。
linux nfs配置

# ls
nfs   tftp
# cd nfs
# cd ..
# mount -t nfs -o nolock 192.168.1.105:/root/hi3518/nfs nfs
# cd nfs
# ls
hello        hello.c      ircut        ko           redled       sample_venc
# cd ..
# ls
nfs   tftp
# umount -t nfs 192.168.1.105:/root/hi3518/nfs
umount: can't umount 192.168.1.105:/root/hi3518/nfs: No such file or directory
# ls
nfs   tftp
# cd nfs
# ls
#