<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式微處理器的嵌入式操作系統(tǒng)-uClinux

          嵌入式微處理器的嵌入式操作系統(tǒng)-uClinux

          ——
          作者:michael Hennerich 時(shí)間:2007-03-15 來源:ADI公司 收藏
          序言

          在過去的兩年中,隨著嵌入式設(shè)備的發(fā)展改進(jìn),Linux操作系統(tǒng)受到了越來越多的青睞,尤其是用于消費(fèi)產(chǎn)品、電訊路由器和交換機(jī)、網(wǎng)絡(luò)產(chǎn)品、工業(yè)和汽車等應(yīng)用。

          最近,一些大的消費(fèi)電子公司達(dá)成協(xié)作,建立消費(fèi)者電子Linux論壇(CELF),以進(jìn)一步開發(fā)家庭數(shù)字電子設(shè)備的Linux平臺(tái)。CELF的發(fā)起者(Matsushita Electric、Sony、Hitachi、NEC、Royal Philips Electronics、Samsung、Sharp和Toshiba)將重點(diǎn)放在Linux的改進(jìn)上,使之成為消費(fèi)電子設(shè)備的開放源代碼平臺(tái)。同樣,他們對(duì)開放源代碼協(xié)會(huì)的精神也給予了積極的支持和發(fā)揚(yáng)( 要獲得更多信息,請(qǐng)?jiān)L問www.celinuxforum.org) 。

          嵌入式Linux的優(yōu)點(diǎn)在于它的版權(quán)免費(fèi)、源碼開放、結(jié)構(gòu)緊湊,這為日益增長(zhǎng)的應(yīng)用軟件基礎(chǔ)提供了堅(jiān)實(shí)的后盾。Linux是一個(gè)全功能的操作系統(tǒng),支持各種網(wǎng)絡(luò)和文件處理協(xié)議,這對(duì)來說是很重要的,因?yàn)樗仨?在任何時(shí)間任何地點(diǎn)進(jìn)行計(jì)算"。Linux采用模塊化結(jié)構(gòu),通過去除中不必要的實(shí)用程序、工具和其它系統(tǒng)服務(wù),它
          可以很方便地實(shí)現(xiàn)結(jié)構(gòu)精簡(jiǎn)。在嵌入式設(shè)備市場(chǎng)中,采用Linux的公司可以更迅速地將產(chǎn)品推向市場(chǎng),更快地增強(qiáng)產(chǎn)品的可靠性。對(duì)開發(fā)者來說,AD的Blackfin?處理器和的結(jié)合也許很有吸引力。Blackfin?處理器集合了DSP的計(jì)算能力和微控制器的功能,滿足了數(shù)字音頻、視頻和通信方面的應(yīng)用需求。

          我們?cè)趩螇K芯片上結(jié)合一流的DSP內(nèi)核和傳統(tǒng)微控制器的體系結(jié)構(gòu),避免了其它傳統(tǒng)復(fù)合處理器系統(tǒng)的限制性、復(fù)雜性和高成本的問題。在已有的外部設(shè)備(SPI、帶IrDa? 功能的UART、定時(shí)器、實(shí)時(shí)時(shí)鐘(RTC)、看門狗(watchdog)和事件控制器(event controller))的基礎(chǔ)上,所有Blackfin處理器家族提供雙通道串行接口(SPORTs)---每個(gè)串行接口支持4個(gè)立體聲I2S通道,數(shù)據(jù)速率達(dá)100 MBits/s。而且Blackfin處理器家族的最新成員(ADSP-BF531、ADSP-BF532、ADSP-BF533和ADSP-BF561) 提供并行外部接口(PPI),實(shí)現(xiàn)TFT平板顯示器和視頻轉(zhuǎn)換器(CCIR-656, 27 MHz)的無縫連接,或者作為AD/DA轉(zhuǎn)換器的并行接口,速率達(dá)65MSPS。

          表1:Blackfin處理器家族

          其它封裝也是可選的

          所有的Blackfin處理器都藝術(shù)地將最先進(jìn)的信號(hào)處理引擎和清晰正交的類RISC器指令集以及支持SIMD單指令多數(shù)據(jù)的多媒體功能復(fù)合成一套單指令集的結(jié)構(gòu),稱之為微信號(hào)結(jié)構(gòu)(MSA)。該內(nèi)核是調(diào)整的雙-MAC Harvard 結(jié)構(gòu),這種結(jié)構(gòu)旨在實(shí)現(xiàn)音頻和視頻算法的非并行計(jì)算,以及實(shí)現(xiàn)操作系統(tǒng)中標(biāo)準(zhǔn)的程序流和常用的仲裁操作。

          Blackfin 的ADSP-BF531/BF532/BF533處理器有兩個(gè)大的片內(nèi)存儲(chǔ)器塊,提供通往內(nèi)核的高速通道。這些內(nèi)存塊可以適應(yīng)處理器內(nèi)核的最高速度。它們位于內(nèi)核的旁邊,稱為L(zhǎng)1存儲(chǔ)器,可以配置為數(shù)據(jù)或指令靜態(tài)處理器(SRAM)或高速緩沖存儲(chǔ)器。當(dāng)配置為高速緩存時(shí),處理外部SDRAM的代碼的速度非常接近內(nèi)部存儲(chǔ)器直接處理的速度。這個(gè)特征特別適用于內(nèi)核的運(yùn)行,因?yàn)樗鼪]辦法被全部裝入內(nèi)部存儲(chǔ)器。而且,當(dāng)使用c語言編程時(shí),可以通過使用高速緩存來最大優(yōu)化外部存儲(chǔ)器到內(nèi)核之間的存取。

          Blackfin處理器采用低電壓,低功耗的設(shè)計(jì),具備動(dòng)態(tài)電源管理功能。完全滿足目前的移動(dòng)和電池供電需求,其它的處理器都無法做到這一點(diǎn)。Blackfin處理器配有多重的、高度靈活和獨(dú)立的直接存取控制器(DMA),用來支持自動(dòng)數(shù)據(jù)傳輸,并使處理器內(nèi)核受到的間接影響達(dá)到最小。

          DMA 的傳輸操作可以發(fā)生在ADSP-BF531/BF532/BF533處理器的內(nèi)部存儲(chǔ)器到與有DMA能力的外部設(shè)備之間。而且,DMA傳輸也能夠在DMA外部設(shè)備和連接到外部存儲(chǔ)器接口的外部設(shè)備(包括SDRAM控制器和異步存儲(chǔ)控制器)之間進(jìn)行。
           
          Linux和的區(qū)別?

          由于Linux和UNIX相似,是多用戶、多任務(wù)的操作系統(tǒng),內(nèi)核必須采取特殊的防范措施,以保證同一系統(tǒng)內(nèi)來自不同用戶的上千個(gè)操作正確安全地運(yùn)行。UNIX的安全模型(即Linux之前的設(shè)計(jì))能夠保護(hù)每個(gè)用戶操作的自身環(huán)境和地址空間。每個(gè)用戶操作都受到保護(hù),防止被其它用戶喚醒,而且,虛擬內(nèi)存(VM)系統(tǒng)對(duì)現(xiàn)代CPU還有另外的要求,比如在個(gè)人處理內(nèi)存中實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配和隨機(jī)內(nèi)存區(qū)域規(guī)劃。有一些設(shè)備,如Blackfin 處理器,沒有提供全功能的MMU內(nèi)存管理單元,因?yàn)殚_發(fā)者的應(yīng)用程序并不使用操作系統(tǒng),通常也不需要MMU,而且,Blackfin的弱MMU的處理器往往具有更高的效率,其價(jià)格也明顯低于其它產(chǎn)品。

          為使Linux與這些設(shè)備相適應(yīng),必須進(jìn)行一些改動(dòng):
          1. 沒有實(shí)際的存儲(chǔ)器保護(hù)(一個(gè)錯(cuò)誤的環(huán)節(jié)可以讓整個(gè)系統(tǒng)停機(jī))
          2. 沒有交叉(fork)系統(tǒng)調(diào)用
          3. 只有簡(jiǎn)單的內(nèi)存分配
          4. 其它一些較小的區(qū)別

          存儲(chǔ)器保護(hù)對(duì)大多數(shù)來說不是很大的問題。Linux是一個(gè)很穩(wěn)定的平臺(tái),尤其是在嵌入式系統(tǒng)中,軟件崩潰的情況很少發(fā)生。

          第二點(diǎn)的問題要大一些。在為UNIX和Linux編寫的軟件中,開發(fā)者常常使用fork系統(tǒng)調(diào)用來實(shí)現(xiàn)并行處理,fork調(diào)用可以準(zhǔn)確拷貝原始程序并同時(shí)予以執(zhí)行。為了提高效率,它使用MMU將父程序映射到子程序,并只拷貝寫入子程序的內(nèi)存區(qū)。因此uClinux不能提供fork系統(tǒng)調(diào)用。它提供vfork,一種特殊版本的fork,在vfork程序中當(dāng)子程序執(zhí)行時(shí)父程序即會(huì)終止。 因此,使用fork系統(tǒng)的軟件在使用uClinux支持的vfork或線程時(shí)必須重寫,因?yàn)樗麄兪褂孟嗤膬?nèi)存空間,包括堆棧。

          就第三點(diǎn)來說
          ,一般情況下支持uClinux的malloc系統(tǒng)不會(huì)有問題,但是,有些時(shí)候必須進(jìn)行小的調(diào)整。大部分適用于UNIX和uClinux的軟件(可在http://freshmeat.net上找到此類軟件)能夠直接在uClinux上編譯,其它的則可使用微小的移植或調(diào)整(tweaking)。 只有很少的應(yīng)用軟件不能在uClinux上運(yùn)行,其中大部分不能作為嵌入式應(yīng)用軟件。

          在uClinux上開發(fā)

          在選擇開發(fā)硬件時(shí),開發(fā)者不應(yīng)只考慮價(jià)格和可用性方面,同時(shí)也應(yīng)考慮源代碼驅(qū)動(dòng)和文檔的易獲取性。 一個(gè)uClinux Blackfin處理器開發(fā)環(huán)境包括GNU編譯器、(gcc交叉編譯器 cross Compiler) 和 binutils (鏈接器linker、匯編器assembler等)。一些GNU工具諸如awk、sed、make、bash . 還有plus tcl/tk是必須的,盡管他們通常在桌面linux的安裝套件中。 安裝好uClinux安裝包的桌面環(huán)境和解壓后,開發(fā)工作就可以進(jìn)行了。

          第一步,開發(fā)者利用圖形配置軟件,為目標(biāo)硬件選擇合適的板極支持包。開發(fā)者要利用自己的硬件,以便在EZ-KIT Lite?評(píng)估板 或STAMP硬件板上進(jìn)行開發(fā)(訪問www.blackfin.uclinux.org獲取原理圖和產(chǎn)品文件)。然后他們可以開始編寫驅(qū)動(dòng)程序,通過拷貝已有的BSP并調(diào)整一些參數(shù)來制作BSP。

          大多數(shù)的開發(fā)工作包括選擇合適的驅(qū)動(dòng)程序,去除項(xiàng)目不需要的內(nèi)核特征,然后選擇特征庫和用戶程序空間。 

          uClinux的安裝套件中提供廣泛的實(shí)用程序和電腦程序供選擇。他們是根據(jù)大小和效率的要求特別設(shè)計(jì)的,例如busybox(www.busybox.net),一種多重調(diào)用二進(jìn)位,該程序包括一系列小程序,用正確的名字調(diào)用它們時(shí)就能發(fā)揮相應(yīng)的作用。例如:如果busybox鏈接到/s(DOS中的目錄命令)并包含/s代碼,那么它的作用就和/s一樣。這樣做的優(yōu)點(diǎn)是busybox節(jié)省了唯一二進(jìn)位的管理費(fèi)用,并且那些小的模塊可以共享相同的代碼。

          在所有的選項(xiàng)均選取并且正確編譯后,可以在VisualDSP++?.的幫助下,將Linux內(nèi)核和ramdisc圖像調(diào)到目標(biāo)硬件中。操作成功后就可進(jìn)行下一步開發(fā)了。

          下一步是使用串口或網(wǎng)絡(luò)激活的bootloader取代JTAG界面來調(diào)入。

          例如,U-boot (http://blackfin.uclinux.org/projects/uboot/)提供一系列的特征,可以用于嵌入式閃存(flash on-board )存儲(chǔ)器設(shè)備。對(duì)于那些不能承擔(dān)Analog 在線模擬設(shè)備的用戶,可以選擇低價(jià)的JTAG硬件和軟件操作  (http://blackfin.uclinux.org/projects/jtagtools/)。這可以用來在程序開始時(shí)將bootloader裝入到目標(biāo)存儲(chǔ)設(shè)備之中。但是要注意到該工作環(huán)境不能提供VisualDSP++ 的調(diào)試和模擬功能。一旦該內(nèi)核投入運(yùn)行,可使用GDB來調(diào)試用戶應(yīng)用程序。

          下一步是為目標(biāo)硬件開發(fā)特殊應(yīng)用軟件或附加軟件端口。

          一些開發(fā)可使用shell腳本或其他語言如Perl 或 Python來完成。當(dāng)必須使用c語言編程時(shí),linux帶有特別的協(xié)議和設(shè)備驅(qū)動(dòng)支持,能提供強(qiáng)有力的開發(fā)環(huán)境。

          從圖2可以看出AC'97音頻CODEC和Blackfin 處理器的接線是相當(dāng)容易的,它不需要任何附加的硬件設(shè)備。

          下面是從codec中讀取數(shù)據(jù)的一個(gè)簡(jiǎn)單的程序(假設(shè)AC'97的驅(qū)動(dòng)已經(jīng)編譯到內(nèi)核中)。

          為什么在嵌入式硬件上使用Linux?

          盡管Linux最初并不是為嵌入式系統(tǒng)而設(shè)計(jì),但是卻在很多嵌入式設(shè)備中得到應(yīng)用。自從2.0.x版本內(nèi)核發(fā)布后,Linux版嵌入式處理器得到商業(yè)支持以來,帶操作系統(tǒng)的嵌入式設(shè)備出現(xiàn)了爆炸式的增長(zhǎng)。幾乎每天都會(huì)有使用Linux作為操作系統(tǒng)的新設(shè)備或器件出現(xiàn)。大部分情況下終端用戶是不知道的。 今天大部分寬帶路由器,防火墻,終端讀取設(shè)備,甚至DVD播放器均使用Linux(要獲取更多信息,請(qǐng)參考 http://www.linuxdevices.org)。
          AD1885接線圖
          圖2:AD1885接線圖


          程序


          Linux和uClinux提供一系列驅(qū)動(dòng)程序,支持所有的硬件和協(xié)議,加上Linux是不收版權(quán)費(fèi)的,所以開發(fā)者使用Linux進(jìn)行開發(fā)的原因就很清楚了。

          為什么在DSP上使用Linux

          過去,DSP被用在在很多應(yīng)用程序中,包括聲卡、調(diào)制解調(diào)器、電訊設(shè)備、醫(yī)療設(shè)備、軍事設(shè)備和其他的純信號(hào)處理設(shè)備。那些DSP設(shè)備一般是為那些應(yīng)用軟件專門設(shè)計(jì)的,并且因?yàn)槌杀竞鸵?guī)模的限制,只具備基本的功能。當(dāng)DSP變得更加強(qiáng)大和靈活時(shí),就能夠?yàn)檐娛拢t(yī)療,通訊等領(lǐng)域的用
          戶提供更高級(jí)的服務(wù)。但是它們?nèi)匀蝗狈\(yùn)行高級(jí)操作系統(tǒng)的能力。傳統(tǒng)的DSP功能強(qiáng)大、靈活,但是價(jià)格很高。他們經(jīng)常用在特別的信號(hào)處理硬件上,這里不需要像Linux這樣的在DSP上運(yùn)行的操作系統(tǒng)。因?yàn)樵谀切┫到y(tǒng)中,DSP從附近的中央處理單元獲取數(shù)據(jù),只需要將基本的系統(tǒng)軟件寫入DSP即可。

          隨著多媒體的日益集中和多媒體及通訊設(shè)備的增長(zhǎng),新型的DSP有著巨大的市場(chǎng)。目前在市場(chǎng)中廣泛使用的常規(guī)處理器和用傳統(tǒng)DSP作為輔助處理器。這種情況下,操作系統(tǒng)在主處理器上運(yùn)行,而信號(hào)在DSP上處理。這種類型的雙處理器不是很理想,因?yàn)槠湓谫M(fèi)用、功耗、和大小上均不是很有效。

           uClinux的實(shí)時(shí)性

          由于最初是為服務(wù)器和桌面用戶而設(shè)計(jì),它沒有像其他同等規(guī)模和復(fù)雜性的操作系統(tǒng)一樣嚴(yán)格的實(shí)時(shí)能力。然而Linux特別是uClinux具有"軟實(shí)時(shí)"能力,這意味著盡管Linux或uClinux不能保證一些中斷或調(diào)度程序時(shí)間,他們同樣具有很好的性能特點(diǎn)。如果需要"硬實(shí)時(shí)"系統(tǒng)來保證調(diào)度程序和中斷l(xiāng)atency時(shí)間,可通過下面方法來實(shí)現(xiàn):

          使用另外的操作系統(tǒng),有很多滿足要求的RTOS系統(tǒng)可供選擇((VisualDSP++ kernel、 Nucleus PLUS、ThreadX、uITRON)。

          通過實(shí)時(shí)內(nèi)核RT-Linux (http://www.rtlinux.org) 或 RTAI (http://www.rtai.org).來提供實(shí)時(shí)能力。兩種內(nèi)核均使用小的實(shí)時(shí)內(nèi)核,其作為具有低優(yōu)先級(jí)的實(shí)時(shí)任務(wù)運(yùn)行Linux。那些需要運(yùn)行在實(shí)時(shí)內(nèi)核上的程序則由特別的編碼實(shí)現(xiàn)。其他的任務(wù)和服務(wù)在Linux內(nèi)核上運(yùn)行,并可使用Linux提供的一切功能。這種方法可保證確定中斷等待時(shí)間,同時(shí)保留Linux的靈活性。

          改變Linux的內(nèi)核可改善硬實(shí)時(shí)中斷的等待時(shí)間,Bernhard Kuhn開發(fā)了一個(gè)Linux內(nèi)核的補(bǔ)丁,可以在(http://linuxdevices.com/articles/AT6105045931.html)上獲取。將來有可能加到uClinux Blackfin的目錄結(jié)構(gòu)上。

          在很多情況下,硬實(shí)時(shí)不是必要的,特別是對(duì)于多媒體應(yīng)用程序來說,其時(shí)間約束由用戶在識(shí)別音頻或視頻中的微小錯(cuò)誤的能力來規(guī)定。這些可被檢測(cè)的時(shí)間約束要在小達(dá)幾十毫秒的范圍內(nèi)監(jiān)測(cè)到--這對(duì)于像Blackfin處理器這樣的高端商業(yè)芯片來說不是問題。嚴(yán)格的時(shí)間需求可以通過微小調(diào)整(tweaking)和調(diào)度程序的簡(jiǎn)單變化來獲得。在2.6.x內(nèi)核中,新的穩(wěn)定內(nèi)核已經(jīng)改進(jìn)了新的O(1)調(diào)度程序和內(nèi)核搶占權(quán)。

          表2和3列出了流行的多媒體通信設(shè)備在未使用操作系統(tǒng)的Blackfin處理器上的運(yùn)行時(shí)間。

          很多情況下,有足夠的剩余處理能力來保證調(diào)度程序有足夠的時(shí)間來處理通常運(yùn)行在此類設(shè)備上的數(shù)字信號(hào)程序。 因此,在web servers、snmp、ppp 或pppoe、firewall上使用Perl、Python、和PHP等語言程序是沒有問題的,運(yùn)行程序的同時(shí)進(jìn)行音頻和視頻解碼。

          所以,沒有必要采用硬實(shí)時(shí)操作系統(tǒng),它沒有Linux這樣功能強(qiáng)大的操作系統(tǒng)所提供的高級(jí)特性。
            
          Blackfin處理器的uClinux資源

          所有在Blackfin處理器上創(chuàng)建uClinux內(nèi)核所需的資源和工具(compiler、binutils)都可以從http://www.blackfin.uclinux.org上獲得。為了使用binary rpm,你需要帶有Linux安裝套件(如Red Hat 或 SuSE)的計(jì)算機(jī)。

          不能在windows環(huán)境下安裝Linux的計(jì)算機(jī)可調(diào)整如下:
          購(gòu)買能夠運(yùn)行Linux的計(jì)算機(jī),該計(jì)算機(jī)能夠?yàn)楣镜恼麄€(gè)開發(fā)工作提供Linux服務(wù)。帶有xserver的windows計(jì)算機(jī)和samba的Linux計(jì)算機(jī)能夠無縫地集成到現(xiàn)有的windows開發(fā)工具上。Samba是開放的源代碼,所有的Linux安裝包里都有提供。免費(fèi)的xserver可以從cygwin環(huán)境里獲得(http://www.cygwin.com)。

          在windows機(jī)器上使用UNIX:有很多程序允許在windows(2000, XP)環(huán)境上使用整個(gè)Linux安裝包。這些程序在windows操作系統(tǒng)上模擬一個(gè)PC,不用調(diào)整客戶端操作系統(tǒng)就可以執(zhí)行。例如VMWare 和 Virtual PC。

          使用windows端口開發(fā)工具。
          可從http://www.blackfin.uClinux.org上下載最新的out-of-the-box解決方案。該端口利用cygwin環(huán)境并采用完全的Blackfin uClinux安裝套件,包括所有的用戶空間應(yīng)用程序和圖形化window形式的安裝方式。

          系統(tǒng)要求PC配置至少為Windows 2000(NT也許可使用,但是沒有經(jīng)過測(cè)試)。采用Uclinux安裝包的驅(qū)動(dòng)器應(yīng)該使用NTFS(FAT32也可使用,不過有一些速度限制)。

          前景展望與總結(jié)

          Blickfin處理器有很高的性價(jià)比(800 MMAC @ 400 MHz 批發(fā)價(jià)不超過 $5/片)。有高級(jí)的電源管理功能和小型BGA封裝。這意味著可以使用低功耗和高空間效率來實(shí)施大的項(xiàng)目。Blackfin的高級(jí)DSP和多媒體性能不僅適用于音頻、視頻應(yīng)用程序,同樣可以用于工廠、汽車、通訊領(lǐng)域的各種設(shè)備。結(jié)合了uClinux的Blackfin處理器的另外一個(gè)優(yōu)點(diǎn)是適用于廣泛的應(yīng)用程序、驅(qū)動(dòng)程序、協(xié)議,通常是充當(dāng)開放資源和免費(fèi)軟件。在大多數(shù)情況下,僅僅只有一些編輯或小的調(diào)整(tweaking)需要加載運(yùn)行。將之與 Perl、Python、和PHP等寶貴的開發(fā)工具相集成,開發(fā)者就有機(jī)會(huì)在很短的時(shí)間內(nèi)開發(fā)最多性能的應(yīng)用程序,并留有足夠的剩余處理能力,為將來的改進(jìn)作準(zhǔn)備,滿足新的性能需求。

          最新的2.6.6版內(nèi)核即將發(fā)布,它采用了新的gcc 3.3.3工具鏈。Blackfin補(bǔ)丁已經(jīng)寫入uClinux的內(nèi)核目錄結(jié)構(gòu),并且可以在ADSP-BF531/BF532/BF533 /ADSP-BF535系列Blackfin 處理器上使用。由于Blackfin是一個(gè)新結(jié)構(gòu)的品牌,許多其它的單雙內(nèi)核系列都將采用該結(jié)構(gòu)(www.analog.com/processors/blackfin)。

          今年,Blackfin處理器家族將會(huì)增添一名帶有以太網(wǎng)MAC的新成員。一些人已經(jīng)開始把uClinux移植到新的雙內(nèi)核處理器ADSP-BF561上。這種做法意在讓uClinux在一個(gè)內(nèi)核上運(yùn)行,同時(shí)在另外一個(gè)內(nèi)核上進(jìn)行高性能的實(shí)時(shí)視頻編碼或解碼工作。


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();