| 導購 | 订阅 | 在线投稿
分享
 
 
 

uClinux操作系統下的shell功能配置方法

來源:互聯網  2008-06-01 03:14:47  評論

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內核。配置時選掉sash,然後選中以下幾項:

BusyBox

shell

msh: Minix shell

MSH is /bin/sh

去掉sash後,就必須在Busybox裏面把原來sash下常用的一些內部命令編譯進來,例如ls、cp 等基本命令,這些原來是sash的內部命令,現在換了Shell,就必須選用Busybox裏面的命令作爲獨立的小應用程序來使用。本文中選擇了以下的常用命令:clear、mkdir、ping、cat、cp、ln、ls、ifconfig等,其中的ls和ifconfig命令下面的幾項功能需要全部選擇。

編譯的時候有個錯誤,是指msh.c中沒有_NSIG這個定義,須在msh.c中加上這樣一句:#define _NSIG 255,之後可編譯通過。

編譯後,在uClinux-Samsung\user\busybox目錄下編譯出一個單個的獨立執行程序,叫做 busybox.exe。將編譯後的busybox.exe拷貝到uClinux-Samsung\romfs\home目錄下,重新編譯內核(不用再配置內核)。將編譯好的uClinux操作系統內核下載運行,使用Busybox中的Msh Shell及各種命令。使用Busybox 也很簡單,只要建一個符號鏈接就可以了。但是由于uClinux操作系統默認的根文件系統romfs是只讀的,只有/tmp和/var兩個目錄下是以虛擬ram盤的方法實現的可讀寫目錄(系統掉電後,裏邊保存的內容全丟失),故在進行符號鏈接時必須鏈接到這兩個可讀寫的目錄下,例如 ln -s /bin/busybox /tmp/ls,那麽,執行/tmp/ls的時候,Busybox 就會執行 ls 的功能,也會按照 ls 的方式處理命令行參數。

運行成功後,可以發現這個Shell不同于原來的sash,它的提示符爲#,支持上下鍵翻查命令,但還不支持Tab鍵補齊功能。

再找到uClinux-dist/config/config.in文件進行編輯,將該文件中的

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特性後重新編譯,再下載運行,就可以實現Tab鍵補齊功能了。

另外還可以增加Msh Shell的其它功能,比如ls命令的以彩色顯示不同屬性文件的功能等,這裏不再詳述。

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內核。配置時選掉sash,然後選中以下幾項: BusyBox shell msh: Minix shell MSH is /bin/sh 去掉sash後,就必須在Busybox裏面把原來sash下常用的一些內部命令編譯進來,例如ls、cp 等基本命令,這些原來是sash的內部命令,現在換了Shell,就必須選用Busybox裏面的命令作爲獨立的小應用程序來使用。本文中選擇了以下的常用命令:clear、mkdir、ping、cat、cp、ln、ls、ifconfig等,其中的ls和ifconfig命令下面的幾項功能需要全部選擇。 編譯的時候有個錯誤,是指msh.c中沒有_NSIG這個定義,須在msh.c中加上這樣一句:#define _NSIG 255,之後可編譯通過。 編譯後,在uClinux-Samsung\user\busybox目錄下編譯出一個單個的獨立執行程序,叫做 busybox.exe。將編譯後的busybox.exe拷貝到uClinux-Samsung\romfs\home目錄下,重新編譯內核(不用再配置內核)。將編譯好的uClinux操作系統內核下載運行,使用Busybox中的Msh Shell及各種命令。使用Busybox 也很簡單,只要建一個符號鏈接就可以了。但是由于uClinux操作系統默認的根文件系統romfs是只讀的,只有/tmp和/var兩個目錄下是以虛擬ram盤的方法實現的可讀寫目錄(系統掉電後,裏邊保存的內容全丟失),故在進行符號鏈接時必須鏈接到這兩個可讀寫的目錄下,例如 ln -s /bin/busybox /tmp/ls,那麽,執行/tmp/ls的時候,Busybox 就會執行 ls 的功能,也會按照 ls 的方式處理命令行參數。 運行成功後,可以發現這個Shell不同于原來的sash,它的提示符爲#,支持上下鍵翻查命令,但還不支持Tab鍵補齊功能。 再找到uClinux-dist/config/config.in文件進行編輯,將該文件中的 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特性後重新編譯,再下載運行,就可以實現Tab鍵補齊功能了。 另外還可以增加Msh Shell的其它功能,比如ls命令的以彩色顯示不同屬性文件的功能等,這裏不再詳述。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有