220元Linux電腦的OS是如何誕生的?
美國(guó)科技新聞網(wǎng)站ArsTechnica近日撰文,探究了廉價(jià)迷你Linux電腦Raspberry Pi的專屬操作系統(tǒng)Raspbian背后的故事。Raspbian基于著名的Linux發(fā)行版Debian開(kāi)發(fā),在問(wèn)世之后就立即取代了大名鼎鼎的紅帽 Fedora,成為Raspberry Pi基金會(huì)官方推薦的操作系統(tǒng)。
讓許多人意想不到的是,Raspbian所有的開(kāi)發(fā)工作均由兩名狂熱的Pi愛(ài)好者利用業(yè)余時(shí)間完成。
以下為文章概要:
在你花費(fèi)35美元購(gòu)買Raspberry Pi之后,這臺(tái)迷你Linux電腦并未預(yù)裝任何操作系統(tǒng)。你可以將你喜歡的操作系統(tǒng)載入到SD卡并啟動(dòng)Pi,整個(gè)過(guò)程并不困難。但與Pi兼容的操作系統(tǒng)是從哪里來(lái)的?
在Raspberry Pi剛剛度過(guò)一周歲生日之際,我們決定探究Raspbian--官方推薦的Pi操作系統(tǒng)--的前世今生。Raspbian項(xiàng)目凝聚了開(kāi)發(fā)者每周花費(fèi)60個(gè)小時(shí)、連續(xù)數(shù)周工作的心血。開(kāi)發(fā)者需要自制一臺(tái)ARM電腦,并重新編譯1.9萬(wàn)個(gè)Linux軟件包。所有這一切,都是由兩個(gè)志愿者完成的。
意外的成功
盡管市面上有許多與Pi兼容的操作系統(tǒng),但Raspberry Pi基金會(huì)通常對(duì)普通用戶僅推薦其中的一款。在Pi誕生于一年之前時(shí),官方推薦的系統(tǒng)是一款針對(duì)ARM處理器優(yōu)化過(guò)的紅帽Fedora操作系統(tǒng)。但僅僅幾個(gè)月之后,F(xiàn)edora失去了Pi社區(qū)的支持,被Raspbian取而代之。后者是一款專門為Raspberry Pi重新修改過(guò)的Debian系統(tǒng),其作者是名為麥克·湯普森(Mike Thompson)和皮特·格林(Peter Green)的兩個(gè)志愿者。
這一切的開(kāi)始,要從湯普森對(duì)機(jī)器人的愛(ài)好說(shuō)起。湯普森是曾是托管搜索服務(wù)商Atomz的首席技術(shù)官和聯(lián)合創(chuàng)始人,該公司于2005年被 WebSideStory收購(gòu)。湯普森獲得了Atomz出售價(jià)4500萬(wàn)美元中的一筆不菲金額,因此他決定暫停幾年的工作,花更多的時(shí)間與妻子和孩子在一起。
一年前,他終于準(zhǔn)備重返科技領(lǐng)域。機(jī)器人是湯普森的主要興趣之一,而Pi看起來(lái)是很棒的承載平臺(tái)。Pi價(jià)格低廉且體積小巧,很容易被嵌入到各種系統(tǒng)之中。但在當(dāng)時(shí),沒(méi)有任何一款操作系統(tǒng)是完全為Pi的浮點(diǎn)計(jì)算單元優(yōu)化的,而浮點(diǎn)計(jì)算在機(jī)器人項(xiàng)目和其他運(yùn)算密集型應(yīng)用中非常重要。
“在我最初接觸到Raspberry Pi時(shí),令我失望的是,沒(méi)有一款Linux發(fā)行版能夠利用Pi的高速浮點(diǎn)運(yùn)算硬件,”湯普森說(shuō)。“作為一名長(zhǎng)期的Debian用戶,我當(dāng)時(shí)想,‘我寧愿試試Debian(而不是Fedora)’,讓它充分利用Pi的浮點(diǎn)運(yùn)算能力,因?yàn)槲议L(zhǎng)久以來(lái)一直希望能夠在這些廉價(jià)的盒子上開(kāi)發(fā)機(jī)器人?!?/p>
Debian 當(dāng)時(shí)已經(jīng)為ARMv7處理器增加了浮點(diǎn)運(yùn)算支持,但該功能并不支持Pi所使用的ARMv6處理器?!盌ebian最初并未預(yù)見(jiàn)到會(huì)出現(xiàn)類似于 Raspberry Pi的產(chǎn)品。盡管Pi的ARMv6處理器擁有相當(dāng)強(qiáng)大的浮點(diǎn)運(yùn)算單元,但Debian并不支持,“湯普森說(shuō)。因此,”他們開(kāi)發(fā)的成千上萬(wàn)款軟件包都不會(huì)支持Raspberry Pi?!?/p>
就像圖形處理器處理圖形任務(wù)很快一樣,“浮點(diǎn)運(yùn)算單元處理數(shù)學(xué)計(jì)算的速度非???,”湯普森說(shuō)?!案↑c(diǎn)運(yùn)算單元是一種外圍配件,并非所有的計(jì)算機(jī)都有,但只要一臺(tái)電腦有,那么你就一定希望充分錄用它?!盤i的浮點(diǎn)運(yùn)算單元來(lái)自于該機(jī)搭載的博通BCM2835 SoC。
如果操作系統(tǒng)不能利用硬件中的浮點(diǎn)計(jì)算單元,許多數(shù)學(xué)上的運(yùn)算都必須使用軟件處理,這拖慢了Pi處理任務(wù)的速度。這對(duì)于機(jī)器人來(lái)說(shuō)非常重要,因?yàn)樵谔幚韥?lái)自攝像頭和傳感器的數(shù)據(jù),以及精確控制馬達(dá)時(shí),需要進(jìn)行非常復(fù)雜的數(shù)學(xué)運(yùn)算,湯普森說(shuō)。浮點(diǎn)運(yùn)算對(duì)于多媒體處理、解碼音樂(lè)、物理模擬等幾乎所有數(shù)學(xué)運(yùn)算密集型的任務(wù)都非常重要。
Raspbian項(xiàng)目創(chuàng)始人麥克·湯普森
富有成效的合作
擺在湯普森面前的道路很清晰:重建Debian操作系統(tǒng)并將使運(yùn)行于Raspberry Pi。這需要將1.9萬(wàn)個(gè)軟件包從Debian移植到Raspbian--這是一項(xiàng)浩大的工程。
不過(guò),湯普森并非單打獨(dú)斗。他在Raspberry Pi論壇發(fā)起了一個(gè)帖子,與其他有興趣將Debian移植到Raspberry Pi的開(kāi)發(fā)者進(jìn)行討論。這個(gè)帖子引起了Debian開(kāi)發(fā)者、英國(guó)博士生皮特·格林的注意。
格林是這項(xiàng)工作獨(dú)一無(wú)二的人選。他不僅擁有與湯普森共同帶領(lǐng)該項(xiàng)目的專長(zhǎng),而且足夠瘋狂到真正去做這件事。
” 我感覺(jué),我可能是這個(gè)帖子里參與Raspbian項(xiàng)目討論的人中,唯一一個(gè)掌握足夠Debian知識(shí)的開(kāi)發(fā)者,而這是移植成功的基礎(chǔ),“格林說(shuō)。”不過(guò)我也相信,如果Debian項(xiàng)目?jī)?nèi)部有人對(duì)Raspbian項(xiàng)目感興趣并足夠瘋狂來(lái)做這件事,那么他們也能完成這一任務(wù)。在Raspbian開(kāi)發(fā)的過(guò)程中,Debian項(xiàng)目的許多人都為我們提供了幫助?!?/p>
在湯普森和格林啟動(dòng)Raspbian項(xiàng)目時(shí),Pi尚未正式發(fā)售。即便當(dāng)時(shí)Pi已經(jīng)發(fā)售,這款設(shè)備也無(wú)法在合理的時(shí)間內(nèi)重建Debian。因此,湯普森串聯(lián)了八塊飛思卡爾iMX53 Quick Start開(kāi)發(fā)板,每一塊主板都擁有1G內(nèi)存、一顆1GHz ARMv7處理器,以及最重要的SATA硬盤。Pi不適合這種類型工作的主要原因之一,是USB存儲(chǔ)帶來(lái)的瓶頸,湯普森說(shuō)。使用飛思卡爾主板開(kāi)發(fā) Raspbian系統(tǒng)的效率比Raspberry Pi要高4到12倍。
湯普森在這些開(kāi)發(fā)板上花費(fèi)了近3000美元,但后來(lái)該項(xiàng)目獲得的捐款足以補(bǔ)貼這些支出。除了單片式ARM系統(tǒng),湯普森還購(gòu)買了一臺(tái)Linux PC作為Raspbian開(kāi)發(fā)的存儲(chǔ)庫(kù)(repository)。這臺(tái)存儲(chǔ)庫(kù)服務(wù)器從Debian存儲(chǔ)庫(kù)中獲取源軟件包,安排飛思卡爾系統(tǒng)的任務(wù),一旦一個(gè)版本開(kāi)發(fā)完成就收集二進(jìn)制軟件包?!彼虚_(kāi)發(fā)包都會(huì)被上傳到存儲(chǔ)庫(kù)中,然后與www.raspbian.org網(wǎng)站的外部存儲(chǔ)庫(kù)同步,用戶則從 www.raspbian.org 中獲取軟件包,“湯普森解釋稱。
最初,湯普森使用一臺(tái)基于ARM的惠普Media Vault MV5150作為存儲(chǔ)庫(kù)的服務(wù)器,但后來(lái)由于需求的增加而升級(jí)至英特爾系統(tǒng)。盡管每一塊飛思卡爾開(kāi)發(fā)板都擁有獨(dú)立的硬盤,但主要的存儲(chǔ)任務(wù)是由存儲(chǔ)庫(kù)服務(wù)器的500G硬盤完成的,這塊硬盤現(xiàn)在已經(jīng)有三分之二滿了。下面就是這套系統(tǒng)最初的樣子:
[!--empirenews.page--]飛思卡爾開(kāi)發(fā)板和ARM架構(gòu)的惠普服務(wù)器
湯普森和格林的工作并未從零開(kāi)始。Debian已經(jīng)是開(kāi)源社區(qū)最為著名的Linux操作系統(tǒng)之一,其ARMv7移植為Raspbian的誕生打下了堅(jiān)固的基礎(chǔ)。
”我們極大地利用了Debian項(xiàng)目此前在支持ARMv7設(shè)備的浮點(diǎn)運(yùn)算硬件時(shí)所作的工作,“湯普森說(shuō)?!蔽覀儾⒎钦娴拈_(kāi)發(fā)出了1.9萬(wàn)個(gè)軟件包,95%的移植工作事實(shí)上已經(jīng)由Debian完成了?!?/p>
然而,這并不是說(shuō),湯普森和格林將Debian移植到ARMv6及其浮點(diǎn)運(yùn)算單元的工作輕而易舉。
格倫解釋道,“在Debian系統(tǒng)中,編譯器內(nèi)置了一定的默認(rèn)設(shè)置。這些默認(rèn)設(shè)置決定了CPU系列、最低CPU要求,以及應(yīng)用二進(jìn)制接口(ABI)。絕大多數(shù)軟件包都未修改這些設(shè)置。我們修改了這些編譯器包,從而將默認(rèn)設(shè)置降低至ARMv6。
對(duì)于絕大多數(shù)的源軟件包,使用內(nèi)置新默認(rèn)設(shè)置的編譯器進(jìn)行重建,就足夠使其運(yùn)行于ARMv6代碼?!?/p>
最初,許多代碼工作都是手工完成的,但格林后來(lái)開(kāi)發(fā)出了一款自動(dòng)編碼軟件,將大部分過(guò)程自動(dòng)化。這些自動(dòng)編碼軟件至今仍在運(yùn)行,從Debian存儲(chǔ)庫(kù)中獲取更新后的軟件包,然后將其重新自動(dòng)編譯,以適用于Raspbian。
Raspbian于2012年4月20日以有限的形式放出下載,最初只包括了約5%的Debian軟件包?!斑@足夠運(yùn)行root文件系統(tǒng),并將Raspberry Pi啟動(dòng)至命令行界面,”湯普森說(shuō)。
重建1.9萬(wàn)個(gè)軟件包
Debian ARM擁有約3.6萬(wàn)個(gè)需要移植的軟件包。幸運(yùn)的是,其中1.7萬(wàn)個(gè)并不包含任何可執(zhí)行代碼,因而可以很快移植到Raspbian上。這包括“幫助文件、人工頁(yè)面、軟件包文檔、字體等等不需要執(zhí)行的內(nèi)容,”湯普森說(shuō)。
其他包含可執(zhí)行代碼的1.9萬(wàn)個(gè)軟件包就是湯普森和格林的主要工作,直到6月初,兩人才將所有這些軟件包重新編譯完成。
對(duì)于湯普森來(lái)說(shuō),這幾乎就是三個(gè)月的全職工作?!坝袔字軙r(shí)間里,我每周花費(fèi)60到80個(gè)小時(shí)在這項(xiàng)工作上,”他說(shuō)。
在解釋最初遇到的挑戰(zhàn)時(shí),湯普森說(shuō),“我們最初遇到的問(wèn)題是,直到Raspbian項(xiàng)目啟動(dòng)的幾個(gè)月之后,Raspberry Pi硬件仍然沒(méi)有上市。不過(guò),還好有一些Raspberry Pi基金會(huì)的工作人員幫了我們的忙。他們幫忙測(cè)試了我們的測(cè)試版系統(tǒng),確保了我們正在開(kāi)發(fā)的軟件能夠真正運(yùn)行在Raspberry Pi上。
第二個(gè)大問(wèn)題是,在我學(xué)習(xí)如何開(kāi)發(fā)Linux發(fā)行版時(shí),遇到了陡峭的早期學(xué)習(xí)曲線。幸運(yùn)的是,Linux社區(qū)尤其是Debian社區(qū)非常友好和樂(lè)于助人,在我遇到困難的時(shí)候,總是能夠得到別人的建議。在皮特加入項(xiàng)目之后,我們的進(jìn)度快了很多,再加上8臺(tái)ARM服務(wù)器,我們每天都能修改1000個(gè)軟件包?!?/p>
一些軟件包尤其麻煩。格林稱,Raspbian系統(tǒng)中Midori瀏覽器所使用的Webkit內(nèi)核折騰了他們好幾天時(shí)間,但最終還是順利完成。
不過(guò)絕大多數(shù)軟件包都能夠順利通過(guò)這個(gè)流程。類似于bash一樣的命令行殼大多能夠輕松移植成功,湯普森說(shuō),”我們只需下載這個(gè)軟件包,重建,然后將其發(fā)到存儲(chǔ)庫(kù)?!?/p>
湯普森估計(jì),大約有5%的Debian軟件包未能成功通過(guò)自動(dòng)編譯流程。這意味著,他和格林不得不手動(dòng)修改其中專門為ARMv7編寫的代碼,然后重新編譯,以使其運(yùn)行在ARMv6上。
”編譯器、Java解釋器等任何對(duì)架構(gòu)敏感的東西,都可能會(huì)帶來(lái)麻煩,“他說(shuō)。”在大多數(shù)情況下,我們能夠?qū)浖M(jìn)行修改,重新打包,然后公布給廣大用戶使用,但還是有部分軟件包由于某些原因無(wú)法移植到Raspberry Pi?!?/p>
大約只有50個(gè)到100個(gè)軟件包完全無(wú)法移植?!斑@些軟件包主要是調(diào)試器和一些專門為ARMv7處理器開(kāi)發(fā)的應(yīng)用,其中一些甚至根本就沒(méi)有必要移植到Raspberry Pi,”湯普森說(shuō)。
Raspbian的運(yùn)行既可以使用圖形用戶界面,也可以不使用圖形界面。由于Pi的主要目標(biāo)用途是編程教學(xué),其默認(rèn)界面還包含了Python開(kāi)發(fā)環(huán)境。
Raspbian默認(rèn)的圖形用戶界面
Raspbian取代Fedora
這一切的結(jié)果,就是一款對(duì)初學(xué)者足夠友好同時(shí)又讓有經(jīng)驗(yàn)的Debian用戶感到熟悉的運(yùn)行于Raspberry Pi的Debian操作系統(tǒng)。Raspbian和Raspberry Pi的結(jié)合激發(fā)了全球各地開(kāi)發(fā)者的熱情,催生了大量的創(chuàng)意?!斑@就是Raspbian的意義所在,完全重建Debian的基礎(chǔ)架構(gòu),從而使熟悉 Debian的用戶能夠輕而易舉地在Raspberry Pi上下載完整的優(yōu)化后的代碼,”湯普森說(shuō)。
如前所述,Raspberry Pi官方最初推薦的操作系統(tǒng)是基于ARM的Fedora系統(tǒng)。然而,F(xiàn)edora的表現(xiàn)受到了Pi有限的內(nèi)存的嚴(yán)重限制,尤其是最初Pi發(fā)布時(shí)僅有256M內(nèi)存(新版現(xiàn)在擁有512M內(nèi)存)。
Raspberry Pi項(xiàng)目創(chuàng)始人、基金會(huì)主席厄本·艾普頓(Eben Upton)表示,該組織從2012年5月開(kāi)始向用戶推薦Debian操作系統(tǒng),而在Raspbian于8月份面世之后,該組織轉(zhuǎn)而開(kāi)始推薦Raspbian?!?/p>
更小的內(nèi)存占用、簡(jiǎn)單易用,以及支持浮點(diǎn)運(yùn)算硬件,是Raspbian獲得Pi基金會(huì)支持的主要原因。Fedora for the Pi如今仍在開(kāi)發(fā)之中,但目前基金會(huì)的下載頁(yè)面推薦的操作系統(tǒng)只有Raspbian、Arch Linux ARM和RISC OS。
”我很高興能夠看到Raspbian成為Pi官方推薦的操作系統(tǒng),不過(guò)這并非是我發(fā)起該項(xiàng)目的初衷,“湯普森說(shuō)。”Raspbian項(xiàng)目只是我的個(gè)人愛(ài)好而已?!?/p>
這份工作并未結(jié)束,至少對(duì)于格林來(lái)說(shuō)。服務(wù)器集群如今仍然在湯普森的家中運(yùn)行著,格林則時(shí)不時(shí)遠(yuǎn)程登錄,以更新Raspbian系統(tǒng)。湯普森如今在一家名為 OLogic的小型機(jī)器人咨詢公司工作,并將Raspbian項(xiàng)目的絕大部分運(yùn)營(yíng)工作交給了格林?!边^(guò)去幾個(gè)月基本上都是我在運(yùn)營(yíng)Raspbian項(xiàng)目, “格林說(shuō)。
[!--empirenews.page--]Raspbian項(xiàng)目聯(lián)合創(chuàng)始人皮特·格林
如今,每隔幾天就會(huì)有一些軟件包無(wú)法自動(dòng)從Debian移植到Raspbian中,因而需要人工操作。不過(guò),這項(xiàng)工作很快就會(huì)繼續(xù),因?yàn)楦窳钟?jì)劃繼續(xù)維護(hù)并升級(jí)Raspbian。
Raspbian 基于Debian的測(cè)試版本”Wheezy“而開(kāi)發(fā)。之所以選擇Wheezy而非穩(wěn)定版的Debian,是因?yàn)樗鼉?nèi)建了硬件浮點(diǎn)運(yùn)算支持。Wheezy最終將成為Debian的穩(wěn)定版,而新的測(cè)試版將被命名為Jessie(這個(gè)名字取自《玩具總動(dòng)員》中的人物名稱。)
Raspberry Pi短期內(nèi)不會(huì)出現(xiàn)任何重大的硬件升級(jí)。艾普頓說(shuō),基金會(huì)和志愿者們正在努力進(jìn)一步優(yōu)化Linux在Pi的ARMv6處理器上的表現(xiàn)?!蔽覀冋J(rèn)為,當(dāng)前Pi所擁有的硬件足夠完成非常多的工作,“艾普頓說(shuō)。
因此,如果有可能,格林希望未來(lái)將代號(hào)Jessie的Debian移植到Pi上?!蹦壳暗腜i型號(hào)不會(huì)在短期內(nèi)被拋棄,因此人們?nèi)匀粫?huì)需要下一個(gè)版本的Debian系統(tǒng),“格林說(shuō)?!蔽視?huì)認(rèn)真研究一下如何在我力所能及的范圍內(nèi)把更多的工作自動(dòng)化?!?/p>
格林還希望將Raspbian項(xiàng)目所依賴的服務(wù)器集群從湯普森的房間里搬出來(lái)。
” 眼下Raspbian依賴的服務(wù)器集群位于麥克的地下室,我們的自動(dòng)編譯軟件也比較簡(jiǎn)陋,因?yàn)轫?xiàng)目啟動(dòng)之初我們?nèi)鄙貲ebian在自動(dòng)編譯基礎(chǔ)架構(gòu)方面的文檔,“格林說(shuō)?!蔽覀兿M麑?duì)Raspbian Jessie所做的改進(jìn)之一,就是采用更加強(qiáng)大的自動(dòng)編譯硬件組成集群,并將集群搬到新的地方。我們還希望采用最新版的Debian自動(dòng)編譯軟件,并在正規(guī)的托管場(chǎng)所而非麥克的地下室托管服務(wù)器?!?/p>
格林正在尋找新的硬件。ARM機(jī)構(gòu)的Openbrix Zero是眼下最為領(lǐng)先的候選硬件。盡管該產(chǎn)品已經(jīng)可以預(yù)定,但格林說(shuō),”軟件情況尚不明確,我還不確定要不要購(gòu)買一臺(tái)來(lái)試試?!?/p>
”眼下的首要問(wèn)題,是尋找比較好的、價(jià)格能夠接受的自動(dòng)編譯硬件,“格林說(shuō)?!盌ebian最初設(shè)計(jì)并不適合交叉編譯。因此我們不得不在ARM硬件上進(jìn)行本地編譯?!?/p>
Raspberry Pi激發(fā)的創(chuàng)意
你或許會(huì)納悶--湯普森和格林使用他們自己的Raspberry Pi完成了怎樣的創(chuàng)意呢?事實(shí)上,他們太過(guò)忙于開(kāi)發(fā)Raspbian和眾多其他項(xiàng)目,還沒(méi)有時(shí)間利用Pi發(fā)揮自己的創(chuàng)意。
格林是主修電力和電子工程的博士在讀學(xué)生,目前正在撰寫一篇關(guān)于運(yùn)營(yíng)無(wú)線傳感器網(wǎng)絡(luò)的論文。
“我一直都想利用Pi搗鼓一點(diǎn)什么東西出來(lái),但我一直都沒(méi)時(shí)間去做,”格林說(shuō)?!癛aspberry Pi之所以讓我感興趣,是因?yàn)樗且粋€(gè)完全成熟的Linux系統(tǒng),能夠運(yùn)行完整的TCP/IP堆棧和Web服務(wù)器,但同時(shí)價(jià)格低廉,你可以將它嵌入到各種項(xiàng)目中,而無(wú)需考慮太多成本問(wèn)題?!?/p>
湯普森如今的日常工作是參與客戶的機(jī)器人項(xiàng)目,但目前為止并不涉及以Pi為平臺(tái)的工作。他希望這一點(diǎn)會(huì)很快改變。
“我自己還沒(méi)來(lái)得及利用Raspberry Pi和機(jī)器人做出點(diǎn)什么,但我可能很快就會(huì)開(kāi)始一個(gè)項(xiàng)目,”湯普森說(shuō)。他擁有3臺(tái)Raspberry Pi。
湯普森還在幫助機(jī)器人公司W(wǎng)illow Garage將機(jī)器人操作系統(tǒng)(Robot Operating System)移植到Pi上(其實(shí)ROS更像是一系列開(kāi)發(fā)機(jī)器人的工具,而非完整的操作系統(tǒng))。
“我正在與硅谷的家釀機(jī)器人俱樂(lè)部(Homebrew Robotics Club)保持聯(lián)絡(luò),他們希望在Raspberry Pi上使用ROS控制機(jī)器人,而浮點(diǎn)運(yùn)算硬件的支持非常關(guān)鍵,”湯普森說(shuō)?!拔疫€在與Willow Garage公司的開(kāi)發(fā)者保持聯(lián)系,他們也在努力把ROS移植到Raspberry Pi,我將盡我所能幫助他們--比如確保他們所依賴的某些軟件包能夠運(yùn)行于Raspbian之上?!?/p>
由于Raspbian項(xiàng)目目前處于維護(hù)模式,湯普森得以將部分處理器轉(zhuǎn)移到ROS和其他項(xiàng)目之中。
“這些服務(wù)器集群最初的作用是短時(shí)間內(nèi)編譯成千上萬(wàn)個(gè)軟件包,而如今每周只需要編譯100個(gè)軟件包,”湯普森說(shuō)?!斑@有點(diǎn)大材小用了。因此,眼下我擁有一些空余的處理能力去做其他項(xiàng)目。”