久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

uClinux下的Shell (轉(zhuǎn) 電子設(shè)計(jì)應(yīng)用 劉國(guó)梅鄭小東)

 danydany_ok 2011-04-01
Shell是操作系統(tǒng)核心和操作者之間的一層使用界面,,用來(lái)負(fù)責(zé)接收使用者輸入的指令,然后將指令解釋成核心能夠了解的方式, 傳給核心去執(zhí)行, 再將結(jié)果傳回至預(yù)設(shè)的輸出周邊,。目前流行的Shell有Bourne Shell,、C Shell、Korn Shell,、tcsh和bash等,。Linux的標(biāo)準(zhǔn)Shell是采用bash。 uClinux默認(rèn)的和通常采用的Shell都是sash,,但uClinux 下的 sash Shell功能很弱,,它不支持上下鍵翻查命令,不支持Tab鍵補(bǔ)齊,也不支持重定向,、管道,,以及export環(huán)境變量,還無(wú)法解釋腳本,。當(dāng)需要對(duì) uClinux的Shell進(jìn)行改進(jìn)以增強(qiáng)它的功能時(shí),,便需要更換Shell。

uClinux下的shell
uClinux操作系統(tǒng)是標(biāo)準(zhǔn)Linux的一個(gè)分支,,是專門針對(duì)沒(méi)有MMU(存儲(chǔ)管理單元)的CPU而配制的操作系統(tǒng),,并且專為嵌入式系統(tǒng)做了許多小型化的工作。目前uClinux常用的應(yīng)用程序庫(kù)是mC-libc和mClibc。
通 過(guò)make menuconfig來(lái)配置uClinux時(shí),,可以看到,,這里可供選擇的Shell有:sash、minix -shell,、nwsh,、bash、Other,。其中sash對(duì)應(yīng)的代碼為uClinux-Samsung/user/sash,,minix-shell 對(duì)應(yīng)的代碼為uClinux-Samsung /user/sh,nwsh對(duì)應(yīng)的代碼為uClinux-Samsung/user/nwsh,,bash對(duì)應(yīng)的代碼為uClinux-Samsung /user/bash,,Other則表示可選擇其它的Shell,主要是指Busybox里面的幾個(gè)Shell,。其中minix-shell在mC- libc和mClibc下都可以編譯通過(guò),,且都可以較好地使用,但功能不是很強(qiáng),;nwsh在mC-libc和mClibc下都可以編譯通過(guò),,但都工作不正 常,無(wú)法進(jìn)入命令行提示符,;bash則無(wú)論在mC-libc還是mClibc下都無(wú)法編譯通過(guò),,其結(jié)構(gòu)不適合uClinux。本文主要討論如何使用 Busybox中的Shell,。

Busybox中的shell
Busybox最早為Debian Linux的安裝盤所寫,,并將大量Linux下的工具集成到一個(gè)可執(zhí)行文件中。目前Busybox提供了100多個(gè)命令的功能,,但它的可執(zhí)行文件只有幾百 KB,,為嵌入式系統(tǒng)提供了一個(gè)比較完整而且體積較小的POSIX運(yùn)行環(huán)境。不過(guò)這些命令的參數(shù)選項(xiàng)要比原來(lái)完整的GNU命令少,。
Busybox中 集成進(jìn)去的Shell有以下幾個(gè),。①Lash:很小,加起來(lái)有10k,非常適合執(zhí)行命令,支持管道和重定向,,但不支持Bourne Shell語(yǔ)法,,無(wú)法解釋腳本。②Hush:也非常小,, 18k左右,支持Bourne Shell語(yǔ)法,,能夠很好地處理if/then/else/fi結(jié)構(gòu)語(yǔ)句,,但是處理不了像for/do/done或者case/esac等循環(huán)語(yǔ)句。 ③Msh:加起來(lái)有30k左右,能夠處理for/do/done,、case/esac等循環(huán)語(yǔ)句,。只要是Bourne shell能夠做的,Msh一般都能做到,,它的語(yǔ)法與Bourne Shell語(yǔ)法可能不完全相同,,但大多數(shù)Bourne Shell語(yǔ)法都能被Msh解釋。Msh是用vfork來(lái)創(chuàng)建新進(jìn)程的,,所以適于uClinux操作系統(tǒng),。④Ash:在默認(rèn)配置下大約有60k左右,是 Busybox里最完整的Shell,,但無(wú)法在uClinux 上編譯通過(guò),。
綜上所述,Busybox里的Msh是目前uClinux下最好的Shell,。

uClinux下Shell的更換
uClinux下Shell的更換包括以下幾個(gè)步驟:
1. 修改uClinux-Samsung/user目錄下的makefile文件,,去掉Busybox項(xiàng)的注釋,這樣Busybox才能被編譯,。
2.修改uClinux-Samsung\user\busybox目錄下的makefile文件,,具體包括以下幾項(xiàng):
(1) 由于要靜態(tài)編譯Busybox, 故將DOSTATIC = false 改為 DOSTATIC = true
(2) 修改交叉編譯工具:
CROSS_COMPILE=arm-elf-
CROSS=$( CROSS_COMPILE)
CC=$( CROSS_COMPILE)gcc
AR=$( CROSS_COMPILE)ar
STRIPTOOL=$(CROSS_ COMPILE)strip
(3) 在該makefile文件中找到下面這一句:
CFLAGS? += $(WARNINGS) $(OPTIMIZATION) -g -fomit-frame-pointer -D_GNU_SOURCE
去掉其中的 -fomit-frame-pointer 項(xiàng)
(4) 在該makefile文件中找到下面這一句:
sed "s:^:$$ROMFSDIR/bin/:" | env -i xargs rm -f;
去掉其中的env? -i 兩項(xiàng)。
3. make menuconfig,,重新配置uClinux內(nèi)核,。配置時(shí)選掉sash,然后選中以下幾項(xiàng):
[*] BusyBox
[*] shell
[*] msh: Minix shell
[*] MSH is /bin/sh
去 掉sash后,,就必須在Busybox里面把原來(lái)sash下常用的一些內(nèi)部命令編譯進(jìn)來(lái),,例如ls、cp 等基本命令,,這些原來(lái)是sash的內(nèi)部命令,,現(xiàn)在換了Shell,就必須選用Busybox里面的命令作為獨(dú)立的小應(yīng)用程序來(lái)使用,。本文中選擇了以下的常 用命令:clear,、mkdir、ping,、cat,、cp、ln,、ls,、ifconfig等,其中的ls和ifconfig命令下面的幾項(xiàng)功能需要全部選 擇,。
編譯的時(shí)候有個(gè)錯(cuò)誤,,是指msh.c中沒(méi)有_NSIG這個(gè)定義,,須在msh.c中加上這樣一句:#define? _NSIG? 255,之后可編譯通過(guò),。
編 譯后,,在uClinux-Samsung\user\busybox目錄下編譯出一個(gè)單個(gè)的獨(dú)立執(zhí)行程序,叫做 busybox.exe,。將編譯后的busybox.exe拷貝到uClinux-Samsung\romfs\home目錄下,,重新編譯內(nèi)核(不用再配 置內(nèi)核)。
4. 將編譯好的uClinux操作系統(tǒng)內(nèi)核下載運(yùn)行,,使用Busybox中的Msh Shell及各種命令,。使用Busybox 也很簡(jiǎn)單,只要建一個(gè)符號(hào)鏈接就可以了,。但是由于uClinux操作系統(tǒng)默認(rèn)的根文件系統(tǒng)romfs是只讀的,,只有/tmp和/var兩個(gè)目錄下是以虛擬 ram盤的方法實(shí)現(xiàn)的可讀寫目錄(系統(tǒng)掉電后,里邊保存的內(nèi)容全丟失),,故在進(jìn)行符號(hào)鏈接時(shí)必須鏈接到這兩個(gè)可讀寫的目錄下,,例如 ln -s /bin/busybox /tmp/ls,那么,,執(zhí)行/tmp/ls的時(shí)候,,Busybox 就會(huì)執(zhí)行 ls 的功能,也會(huì)按照 ls 的方式處理命令行參數(shù),。
運(yùn)行成功后,,可以發(fā)現(xiàn)這個(gè)Shell不同于原來(lái)的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特性后重新編譯,再下載運(yùn)行,就可以實(shí)現(xiàn)Tab鍵補(bǔ)齊功能了,。
另外還可以增加Msh Shell的其它功能,,比如ls命令的以彩色顯示不同屬性文件的功能等,這里不再詳述,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多