萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

uClinux 系統 Shell 配置指南:BusyBox Msh 為最佳選擇,移植與 Tab 補全啟用實戰

uClinux 針對無 MMU CPU 優化,常用 C 庫為 mC-libc/mClibc。內核 make menuconfig 可選 Shell:sash、minix-shell、nwsh、bash、Other (BusyBox 內建)。

各 Shell 適用性評估

  • minix-shell:兩庫均可編譯,功能基礎
  • nwsh:可編譯但無法進入提示符
  • bash:兩庫均編譯失敗,結構不適配 uClinux
  • BusyBox 內建 Shell:最佳選擇

BusyBox 內建四種 Shell 對比

Shell大小特性評價
Lash~10KB管道/重定向,無 Bourne 語法,不能執行腳本極簡
Hush~18KB支援 Bourne 語法 if/then/else/fi,無 for/case 循環基礎腳本可用
Msh~30KB支援 for/do/done、case/esac,幾乎完整 Bourne 功能,用 vfork 創建進程,極適合 uClinux推薦
Ash~60KB最完整但無法在 uClinux 編譯通過不可用

移植步驟

  1. make menuconfig:取消 sash,啟用 BusyBox → shell → msh: Minix shell MSH is /bin/sh
  2. 選擇常用獨立命令:clear、mkdir、ping、cat、cp、ln、ls、ifconfig (含子選項)
  3. 編譯修復 msh.c 缺 _NSIG 錯誤:添加 #define _NSIG 255
  4. 生成 uClinux-Samsung/user/busybox/busybox.exe

部署與使用

複製 busybox.exe 至 uClinux-Samsung/romfs/home,重新編譯內核 (無需再配置)。下載運行後,建立符號鏈接使用 (romfs 唯讀,僅 /tmp /var 可寫):

ln -s /bin/busybox /tmp/ls
/tmp/ls  # 以 ls 命令運行

啟用 Tab 鍵補全

編輯 uClinux-dist/config/config.in:

# 將
bool 'sh: tab completion' CONFIG_USER_BUSYBOX_TAB_COMPLETION
bool 'sh: username completion' CONFIG_USER_BUSYBOX_USERNAME_COMPLETION
# 改為
bool 'sh: tab completion' CONFIG_USER_BUSYBOX_COMMAND_TAB_COMPLETION
bool 'sh: username completion' CONFIG_USER_BUSYBOX_COMMAND_USERNAME_COMPLETION

重新 make menuconfig 選中 BusyBox Shell 特性 → 編譯 → 下載運行,即獲 Tab 補全功能。

可進一步擴展如 ls 彩色顯示等特性。

copyright © 萬盛學電腦網 all rights reserved