uClinux操作系統下的shell功能配置方法
uClinux操作系統是標准Linux的一個分支,是專門針對沒有MMU(存儲管理單元)的CPU而配制的操作系統,並且專為嵌入式系統做了許多小型化的工作。目前uClinux常用的應用程序庫是mC-libc和mClibc.
通過make menuconfig來配置uClinux時,可以看到,這裡可供選擇的Shell有:sash、minix -shell、nwsh、bash、Other.
其中 sash對應的代碼為uClinux-Samsung/user/sash,minix-shell對應的代碼為uClinux-Samsung /user/sh,nwsh對應的代碼為uClinux-Samsung/user/nwsh,bash對應的代碼為uClinux-Samsung /user/bash,Other則表示可選擇其它的Shell,主要是指Busybox裡面的幾個Shell.
其中:
minix-shell在mC- libc和mClibc下都可以編譯通過,且都可以較好地使用,但功能不是很強;nwsh在mC-libc和mClibc下都可以編譯通過,但都工作不正常,無法進入命令行提示符;bash則無論在mC-libc還是mClibc下都無法編譯通過,其結構不適合uClinux.本文主要討論如何使用 Busybox中的Shell.
Busybox中的shell
Busybox最早為Debian Linux的安裝盤所寫,並將大量Linux下的工具集成到一個可執行文件中。目前Busybox提供了100多個命令的功能,但它的可執行文件只有幾百 KB,為嵌入式系統提供了一個比較完整而且體積較小的POSIX運行環境。不過這些命令的參數選項要比原來完整的GNU命令少。
Busybox中集成進去的Shell有以下幾個。
①Lash:很小,加起來有10k,非常適合執行命令,支持管道和重定向,但不支持Bourne Shell語法,無法解釋腳本。
②Hush:也非常小, 18k左右,支持Bourne Shell語法,能夠很好地處理if/then/else/fi結構語句,但是處理不了像for/do/done或者case/esac等循環語句。
③Msh:加起來有30k左右,能夠處理for/do/done、case/esac等循環語句。只要是Bourne shell能夠做的,Msh一般都能做到,它的語法與Bourne Shell語法可能不完全相同,但大多數Bourne Shell語法都能被Msh解釋。Msh是用vfork來創建新進程的,所以適於uClinux操作系統。
④Ash:在默認配置下大約有60k左右,是 Busybox裡最完整的Shell,但無法在uClinux 上編譯通過。
綜上所述,Busybox裡的Msh是目前uClinux下最好的Shell.
移植:
make menuconfig,重新配置uClinux內核。