上電——→DM8127内部片上的ROM CODE運作——→ROM CODE讀取SYSBOOT PINS電平狀态決定是從NAND FLASH BOOT還是 UART0序列槽 BOOT或者SD卡BOOT或者PCIe BOOT或者EMAC BOOT或者XIP BOOT——→讀取ubootmin并運作ubootmin(ubootmin取得ARM控制權)——→讀取u-boot并運作u-boot(u-boot取得ARM控制權)——→讀取linux核心BIN并運作linux 核心(linux-2.6.37取得ARM控制權一直到闆子複位或者斷電)——→挂載檔案系統(可以是存放在NAND FLASH的ubifs,squashfs,或者NFS)——→運作檔案系統的腳本——→運作IPNC_RDK整個DEMO應用程式system_server,boa和live555等,啟動VPSS M3核,啟動VIDEO M3核,啟動浮點DSP C674X核。
整個過程可以通過上圖直覺了解。
一、運作ubootmin
一開始上電,DM8127主晶片内部有ROM CODE,這個是使用片上的内部RAM運作的,還沒用片外的DDR3,如果新做的闆子什麼程式也沒有,隻要TPS659113電源管理晶片的供電時序正常,主晶振正常工作,那麼ROM CODE就會正常運作,先讀取SYSBOOT PINS(就是BOOT MODE那幾個外接上拉下拉電阻的管腳狀态),如果對應的那些NAND FLASH或者SD 卡或者PCIe等接口沒有程式,那麼DM8127這時會通過UART0 不斷輸出C C C C C C ……..的列印字元,試圖通過UART0進行通訊下載下傳UBOOT-OPTI BIN檔案(這個UBOOT-OPTI後面介紹UBOOT移植的時候再分析)。
至于運作ubootmin這第2步驟,可以用兩種方式運作方式說明一下:
1、就是在第1步沒上電之前,通過TF卡(SD卡),TF卡預先COPY兩個檔案:MLO 和u-boot.bin到卡上,TF卡格式化成FAT32,并且是8倍速以下的卡。這個兩個檔案就是後面要提到的ubootmin編譯和uboot-2010.06編譯。其中ubootmin編譯得到就是MLO檔案,uboot-2010.06編譯得到就是u-boot.bin。TF(SD卡)先插上到闆子上面,然後給闆子上電,這樣就會從SD卡BOOT,運作MLO,也就是運作ubootmin。ubootmin這裡就會去做很多底層驅動的初始化工作,包括DDR3初始化,這裡提到一點,ubootmin還是運作在片内的RAM,并沒有運作在外部DDR3。
2、還有一種超大規模工廠生産的時候,NAND FLASH可以預先燒寫ubootmin BIN檔案和 uboot-2010.06 BIN檔案,核心BIN檔案,檔案系統BIN檔案,然後再給SMT工廠貼片,那麼這時從工廠拿回來的DM8127闆子在沒有硬體短路的情況下,根據硬體電路預設設定SYSBOOT PINS為NAND BOOT,那麼一上電就會運作NAND FLASH 裡面的ubootmin。
在沒有程式的情況下,其實絕大部分都是使用第一種方式SD卡BOOT的方式去運作ubootmin。等到燒寫好ubootmin和UBOOTBIN到NAND 的時候,我們才不需要SD卡 BOOT。所謂通過SYSBOOT PINS外接上拉電阻和下拉電阻的電平狀态來BOOT ubootmin:
隻能說是優先從哪種方式BOOT,而TI 内部ROM CODE會自動從優先的BOOT MODE去找對應的ubootmin,比如從NAND 優先BOOT,但是NANDFALSH沒ubootmin,那麼ROM CODE會去找SD卡BOOT(又叫MMC BOOT),如果SD卡裡面沒有MLO 和u-boot.bin,ROM CODE 繼續找SPI BOOT,如果SPI BOOT 不成功,繼續找UART0 口去BOOT,ROM CODE會一直列舉完幾種BOOT 模式。
二、運作完整uboot
ubootmin初始化結束後,會去讀取uboot-2010.06 BIN檔案并運作完整的uboot,即uboot-2010.06。完整的uboot-2010.06正常運作,那麼可以通過網絡TFTP等操作去燒寫,然後就去運作linux核心了。這個完整的uboot運作是在DDR3了(代碼映射到DDR3存儲位址段不能和kernel沖突),有關uboot-2010.06的移植後面再單獨寫寫,這裡不累贅。
三、運作linux核心
uboot-2010.06 會通過各種方式(讀取NAND 裡面的BIN檔案或者TFTP 下載下傳核心)并運作核心,ARM控制權交給核心,這個linux核心也是運作在DDR3。
四、核心挂載檔案系統
這個也不需要累贅,做過linux嵌入式開發都知道,研發先使用NFS調試通,然後再制作ubifs BIN檔案或者squashfs BIN檔案燒到闆子NAND FLASH去。
五、執行檔案系統的腳本
首先會去運作檔案系統etc裡面的一大堆腳本,最後再運作/etc/init.d/finish_ubifs.sh的腳本:
cd/opt/ipnc
./init.sh
./system_server
sleep7
./autorun_ipnc.sh
這些腳本的内容可以去對應的NFS檔案系統目錄打開看看。
運作DEMO程式這些都會在system_server這個應用程式去打開,或者并行去打開。都是LINUX 應用層面的程式。
六、其他3個核的啟動
啟動VPSS M3核(ipnc_rdk_fw_m3vpss.xem3),啟動VIDEO M3核(ipnc_rdk_fw_m3video.xem3),啟動DSP 核(ipnc_rdk_fw_c6xdsp.xe674)都有對應的load腳本。見下面2張圖:
<a href="https://s4.51cto.com/oss/201710/28/da8ff9998c4c0e4e0c46497836b39d72.jpg-wh_500x0-wm_3-wmp_4-s_3212152914.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/28/9fe6e7175631325ae920adc8f6f251c1.jpg-wh_500x0-wm_3-wmp_4-s_1390403715.jpg" target="_blank"></a>
注意上面兩張圖的路徑,知道這些程式和腳本放在什麼地方。
其實在system_server應用程式可以使用類似以下方法執行這些腳本:
system("./scripts/load_vpss.sh&");
system("./scripts/load_video.sh&");
system("./scripts/load_c6xdsp.sh&");
好了,有關DM8127的啟動過程就寫到這裡,要深入了解,建議還是拿闆子進行調試,理論的東西不如手動去驗證,通過實際操作,才更好掌握DM8127 這個ARM+浮點DSP的開發方法。
(題外話,有些網友通過本人QQ:2505133162了解DM8127是否可以做深度學習算法,本人通過很多方面得到個人結論:DM8127不适合複雜的深度學習算法,隻能做車牌識别,人臉識别,智能安防IVS這些産品,TI DAVINCI 平台有适合自動駕駛的DM505解決方案,可以做一些深度學習算法,我們目前還沒有這個平台。)
本文轉自 zjb_integrated 51CTO部落格,原文連結:http://blog.51cto.com/zjbintsystem/1976977,如需轉載請自行聯系原作者