首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Tiny4412 開發板 NFS 掛載完整步驟:網絡配置、服務端搭建、客戶端掛載、開機自啟動

     編輯:關於C語言

硬件連接

  • 交叉網線(或同一交換機)連接 PC 與開發板
  • 串口線(調試終端)
  • USB 線(可選,ADB/文件傳輸)
  • 電源適配器

網絡配置(雙方同網段)

PC 端 (Ubuntu)

# 設置靜態 IP(示例)
sudo ip addr add 169.254.9.78/16 dev eth0
# 或修改 /etc/network/interfaces / Netplan 配置持久化

關鍵:關閉 WiFi,僅保留有線連接,避免路由衝突。

開發板端 (Tiny4412 Linux)

# 修改網卡配置文件
vi /etc/eth0-setting
# 內容示例:
IP=169.254.9.100
MASK=255.255.0.0
GATEWAY=169.254.255.255
DNS=169.254.255.255
MAC=00:11:22:33:44:55  # 保持原 MAC

# 重啟網絡或重啟開發板
reboot

# 驗證
ifconfig eth0
ping 169.254.9.78  # ping PC

PC 端搭建 NFS 服務端

1. 安裝套件

sudo apt update
sudo apt install nfs-kernel-server nfs-common rpcbind

2. 配置導出目錄

mkdir -p /home/user/nfs_share
chmod 777 /home/user/nfs_share

sudo vi /etc/exports
# 添加一行:
/home/user/nfs_share *(rw,sync,no_subtree_check,no_root_squash)

# 重啟服務
sudo systemctl restart rpcbind
sudo systemctl restart nfs-kernel-server

# 查看導出
showmount -e localhost

3. 本機測試

mkdir -p /mnt/test
sudo mount -t nfs localhost:/home/user/nfs_share /mnt/test
echo "test" > /mnt/test/hello.txt
ls /mnt/test
sudo umount /mnt/test

開發板端掛載 NFS

關鍵參數:`-o nolock`

嵌入式 Linux 常無 `rpc.statd`/`rpc.lockd`,掛載需加 `nolock` 禁用文件鎖,否則掛載卡死或報錯。

# 掛載命令
mount -t nfs -o nolock 169.254.9.78:/home/user/nfs_share /mnt

# 驗證
ls /mnt
cp /mnt/hello.txt /tmp/
# 可在 /mnt 直接運行交叉編譯的可執行文件

常見錯誤與修正

| 錯誤 | 原因 | 修正 | |------|------|------| | `Permission denied` | 導出目錄權限或 `no_root_squash` 缺失 | `chmod 777` + `exports` 加 `no_root_squash` | | `Connection timed out` | 防火牆攔截 / IP 不通 | `ufw allow from 169.254.0.0/16` / 檢查 `ping` | | `Stale file handle` | 服務端重啟後客戶端未重掛載 | `umount -f` 後重新 `mount` | | 掛載卡住無響應 | 缺少 `nolock` 參數 | **必須加 `-o nolock`** |

實現開機自動掛載與自啟動應用

1. 修改 `/etc/fstab`(可選,嵌入式常用啟動腳本)

# /etc/fstab 添加:
169.254.9.78:/home/user/nfs_share /mnt nfs nolock,defaults 0 0

2. 修改啟動腳本 `/etc/init.d/rcS`(推薦)

vi /etc/init.d/rcS
# 文件末尾添加:
mount -t nfs -o nolock 169.254.9.78:/home/user/nfs_share /mnt
# 然後啟動自己的應用:
/mnt/my_app

3. 將編譯好的應用放入 NFS 共享目錄

# PC 端交叉編譯
arm-linux-gcc -o my_app main.c
cp my_app /home/user/nfs_share/

# 開發板端即可直接運行
/mnt/my_app

工作流總結

  1. PC 修改代碼 → 交叉編譯 → 複製到 NFS 共享目錄
  2. 2. 開發板串口終端運行 `/mnt/my_app` 即時測試 3. 無需反覆燒錄 SD 卡 / 使用 TFTP / ADB push,**極大提升開發效率**

進階:NFS over TCP vs UDP

  • 默認 UDP,低延遲但不可靠
  • 穩定性優先:`mount -t nfs -o nolock,proto=tcp ...`
  • 高吞吐:`rsize=32768,wsize=32768` 調大讀寫塊

總結

Tiny4412 NFS 掛載關鍵點:

  1. 同網段靜態 IP(PC 與開發板)
  2. 服務端 `no_root_squash` + `sync`
  3. 客戶端必加 `-o nolock`
  4. rcS 腳本實現開機自掛載 + 自啟動應用

建立此流程後,嵌入式開發進入「編譯即運行」高效模式,專注於業務邏輯而非部署細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved