;uClinux操作系統(tǒng)是標(biāo)準(zhǔn)Linux的一個分支,是專門針對沒有MMU(存儲管理單元)的CPU而配制的操作系統(tǒng),并且專為嵌入式系統(tǒng)做了許多小型化的工作 。目前uClinux常用的應(yīng)用程序庫是mC-libc和mClibc 。通過make menuconfig來配置uClinux時,可以看到,這里可供選擇的Shell有:sash、minix -shell、nwsh、bash、Other 。其中 sash對應(yīng)的代碼為uClinux-Samsung/user/sash,minix-shell對應(yīng)的代碼為uClinux-Samsung /user/sh,nwsh對應(yīng)的代碼為uClinux-Samsung/user/nwsh,bash對應(yīng)的代碼為uClinux-Samsung /user/bash,Other則表示可選擇其它的Shell,主要是指Busybox里面的幾個Shell 。其中: minix-shell在mC- libc和mClibc下都可以編譯通過,且都可以較好地使用,但功能不是很強(qiáng);nwsh在mC-libc和mClibc下都可以編譯通過,但都工作不正常,無法進(jìn)入命令行提示符;bash則無論在mC-libc還是mClibc下都無法編譯通過,其結(jié)構(gòu)不適合uClinux 。本文主要討論如何使用 Busybox中的Shell 。Busybox中的shell Busybox最早為Debian Linux的安裝盤所寫,并將大量Linux下的工具集成到一個可執(zhí)行文件中 。目前Busybox提供了100多個命令的功能,但它的可執(zhí)行文件只有幾百 KB,為嵌入式系統(tǒng)提供了一個比較完整而且體積較小的POSIX運行環(huán)境 。不過這些命令的參數(shù)選項要比原來完整的GNU命令少 。Busybox中集成進(jìn)去的Shell有以下幾個 。①Lash:很小,加起來有10k,非常適合執(zhí)行命令,支持管道和重定向,但不支持Bourne Shell語法,無法解釋腳本 。②Hush:也非常小,18k左右,支持Bourne Shell語法,能夠很好地處理if/then/else/fi結(jié)構(gòu)語句,但是處理不了像for/do/done或者case/esac等循環(huán)語句 。③Msh:加起來有30k左右,能夠處理for/do/done、case/esac等循環(huán)語句 。只要是Bourne shell能夠做的,Msh一般都能做到,它的語法與Bourne Shell語法可能不完全相同,但大多數(shù)Bourne Shell語法都能被Msh解釋 。Msh是用vfork來創(chuàng)建新進(jìn)程的,所以適于uClinux操作系統(tǒng) 。④Ash:在默認(rèn)配置下大約有60k左右,是 Busybox里最完整的Shell,但無法在uClinux 上編譯通過 。綜上所述,Busybox里的Msh是目前uClinux下最好的Shell 。移植: make menuconfig,重新配置uClinux內(nèi)核 。配置時選掉sash,然后選中以下幾項: BusyBox shell msh: Minix shell MSH is /bin/sh 去掉sash后,就必須在Busybox里面把原來sash下常用的一些內(nèi)部命令編譯進(jìn)來,例如ls、cp 等基本命令,這些原來是sash的內(nèi)部命令,現(xiàn)在換了Shell,就必須選用Busybox里面的命令作為獨立的小應(yīng)用程序來使用 。本文中選擇了以下的常用命令:clear、mkdir、ping、cat、cp、ln、ls、ifconfig等,其中的ls和ifconfig命令下面的幾項功能需要全部選擇 。編譯的時候有個錯誤,是指msh.c中沒有_NSIG這個定義,須在msh.c中加上這樣一句:#define _NSIG 255,之后可編譯通過 。編譯后,在uClinux-Samsunguserbusybox目錄下編譯出一個單個的獨立執(zhí)行程序,叫做 busybox.exe 。將編譯后的busybox.exe拷貝到uClinux-Samsungromfshome目錄下,重新編譯內(nèi)核(不用再配置內(nèi)核) 。將編譯好的uClinux操作系統(tǒng)內(nèi)核下載運行,使用Busybox中的Msh Shell及各種命令 。使用Busybox 也很簡單,只要建一個符號鏈接就可以了 。但是由于uClinux操作系統(tǒng)默認(rèn)的根文件系統(tǒng)romfs是只讀的,只有/tmp和/var兩個目錄下是以虛擬ram盤的方法實現(xiàn)的可讀寫目錄(系統(tǒng)掉電后,里邊保存的內(nèi)容全丟失),故在進(jìn)行符號鏈接時必須鏈接到這兩個可讀寫的目錄下,例如 ln -s /bin/busybox /tmp/ls,那么,執(zhí)行/tmp/ls的時候,Busybox 就會執(zhí)行 ls 的功能,也會按照 ls 的方式處理命令行參數(shù) 。運行成功后,可以發(fā)現(xiàn)這個Shell不同于原來的sash,它的提示符為#,支持上下鍵翻查命令,但還不支持Tab鍵補(bǔ)齊功能 。再找到uClinux-dist/config/config.in文件進(jìn)行編輯,將該文件中的 bool "sh: tab completion" CONFIG_USER_BUSYBOX_TAB_ COMPLETION bool "sh: username completion" CONFIG_USER_BUSYBOX_USER NAME_COMPLETION 改為: bool "sh: tab completion" CONFIG_USER_BUSYBOX_COMMAND_ TAB_COMPLETION bool "sh: username completion" CONFIG_USER_BUSYBOX_COM MAND_USERNAME_COMPLETION 然后再make menuconfig,選擇Busybox的Shell特性后重新編譯,再下載運行,就可以實現(xiàn)Tab鍵補(bǔ)齊功能了 。另外還可以增加Msh Shell的其它功能,比如ls命令的以彩色顯示不同屬性文件的功能等,這里不再詳述 。
推薦閱讀
- 一年級正往下落的樹葉像什么
- 用G850小不忍則亂大謀
- 蝦能放多久
- Linux系統(tǒng)下文件的壓縮、打包與解開介紹
- Linux操作系統(tǒng)集群LVS-ipvsadm命令參考
- Suse系統(tǒng)下FTP Telnet xmanager網(wǎng)絡(luò)配置
- 餓了么跑腿在哪里下單
- 圖形工作環(huán)境KDE 4.1 Alpha1發(fā)布可免費下載
- Linux SUSE系統(tǒng)下安裝Enlightenment 17
- 在SUSE Linux系統(tǒng)下安裝ADSL上網(wǎng)撥號程序
