close
       上一篇試著要把U-boot 1.2.0 移植到sbc2410x 開發板發生問題後 , 經查出來是因為我把binary image 透過NandPgm 燒程式燒在sbc2410x 開發板的NAND Flash上 , 想當然爾 , 原始的 U-boot 1.2.0 並沒有支援NAND flash 開機的能力 , 所以系統一開始就亂掉hang住了. 原本是想說 , 要不把 image 燒到NOR Flash上 , 先試一下. 但手上這塊sbc2410x 開發板 的NOR flash 有問題. 所以沒辦法試. 既然要費功移植 , 那乾脆就直接在最後要完成的 gl300 platform 來試試. 順利的話 , 就可以對 U-boot 有著更深的認識. 屆時再回頭來試試sbc2410x 這一塊板子. 應該就會更駕輕就熟了....

       gl300 是公司以 ARM IP 所設計出來的CPU.  使用原場 ARM的 IP 必須附出較高的權利金. 若使用FARADAY(瑞昱)的FA526來開發 .會省了許多.  

       U-boot 的board的目錄下 , 就已經有許多的開發平台了. 以最熟捻的SAMSUNG SoC來說 , 像是S3C4510 , S3C44B0X , 或是S4C2410 , 都被以不同的開發板來實作 , 並藉由U-boot 順利的移植 , 而可以正常運作. 因為之前曾碰過 s3c2410x , 再加上gl300 也都是 ARM9 為設計背景. 所以在一開始的系統建置 , 就先以s3c2410x 的開發板 , 做為開始吧.

        一開始的第一個動作, 當然是要在U-boot下 , 先建立開發板的目錄. 這個部份是放在 /board 的這個目錄下. 並且在根目錄下的Makefile , 去新增一道命令:

         gl300_config:       unconfig
              @$(MKCONFIG) $(@:_config=) arm fa526 gl300 genesyslogic gl300

看這道命令 , 有幾個要點 :

         1. gl300_config: 這會對應到我們在shell下執行 "  make gl300_config " 來替系統做配置的行為.

         2. arm , 為cpu的架構. 這個參數會讓編譯器知道你所選定的CPU 結構. 也牽涉到你所使用的Cross Compiler. 像是ARM , 會使用arm-linux-

         3. fa526 , cpu的名字 , 一般使用arm架構的CPU , 多使用arm920t , arm926t等IP , 在我們的CASE上 , 將使用FARADAY 的fa526

         4. gl300 , 是開發板的名字. 我們必需在board目錄下 , 新增一個gl300的子目錄

         5. genesyslogic , vender 名字.

         6. gl300 , soc的名字. 就像Samsung 的s3c2410這顆soc的意思一樣.

有一點要注意的是 , 在對應第45項中 , 倘若我們有設定vender的名字 , 例如我設定了公司的名稱--genesyslogic , 則對應建立開發板的子目錄如下:

        board># mkdir genesyslogic                                                                    
        board># mkdir /genesyslogic/gl300      
       # 依序的在 board 目錄下 , 建立一個 genesyslogic 廠商目錄及 gl300 開發板的子目錄


 當然啦 , 如果你不使用vender這變數 , 可以在該上述配置Vender的欄位 ,填上null , 這樣目錄建立如下:   

         board># mkdir gl300                               
         # 直接建一個 gl300 開發板的子目錄

其實, 在U-boot 原始檔內 , 大多數的開發板都是直接建立在board目錄下 ,  只是當目錄一多 , 如果你有多個開發板透過 U-boot 進行開發設計 , 可能就顯的有點亂, 不容易管理了. 執行到這 , 別以為開發板目錄建立已經完成囉~ 在 gl300 的這個目錄下 , 我們在未來會將一些屬於開發板本身的一些應用程式給放在這. 但因為現在只是為了測試開發環境是後建立妥當 , 所以我們先拷貝 sbc2410x 目錄下的相關資料來做測試 , 我們可以使用 :

        board># cp sbc2410x/* genesyslogic/gl300/                                          
        # 這會將sbc2410x 下的所有資料都copy到 gl300的目錄下

這樣gl300的開發板就算告一段落了.


        第二部份 , 在U-boot的 cpu 目錄下 , 置放了許多不同 CPU 設計的子目錄 , 而我們在Makefile config 配置的第3項中 , 載明使用FA526的CPU , 所以我們必須在/cpu的目錄下 , 新增一個 fa526的子目錄:

        cpu>#  mkdir fa526                                                                                    
        # 建一個 fa526 的子目錄

同樣的 , 為了先測試系統的配置 , 我們拷貝了 arm920t 下的資料 :

        cpu># cp arm920t/*  fa526/                                                                       
        #  將 arm920t 下的資料都copy 到 fa526目錄下

如此 cpu 架構的配置就算完成了.

        第三部份 , 有關開發板配置的標頭檔及開發板的一些 define 參數 , 大多是放在  /include/configs 的子目錄下 ,  同樣的 , 為求測試 , 我們先利用sbc2410x 的設定 , 如

        configs># cp sbc2410x.h gl300.h                                                         
        # 在configs 子目錄下 , copy 一個跟 sbc2410x.h 一樣的檔案

如此 include/configs 的架構配置就算完成了.


         經過了上面三大步驟後 , gl300 的配置算是有了初步的結果. 接下來我們可以照著之前提過關於U-boot 的編譯步驟來執行:

        1) make distclean
        # 移去有關U-boot 下的任何配置
     
        2) make gl300_config                                                                             
        #  依照gl300的配置程序 , 對U-boot 進行配置 , 少了這個步驟 , 執行 ' make ' , 會發生錯誤...
   
        3) make                                                                                                      
        #  開始編譯.

原以為會像之前編重編sbc2410x的方式 , 經過一段時間就編譯成功 . 結果卻在重新relocation的過程中 , 出現了一個類似的問題...

       arm-linux-ld    /cpu/arm920/start.o  can't find ...........

怪事了 , 不是已經改成 fa526 的 cpu了嗎 , 而且在/cpu/fa526的目錄下 , 都可以看到 start.S 的目的檔 start.o 生成了呀? 怎麼系統還在搞糊塗呢? 利用搜尋的方式 , 在發現有一個檔案 --   
      
         /board/genesyslogic/gl300/u-boot.lds

這檔案內 , 在重新relocate時 , 會試著將有_Start 起始點的 start.o 給載入 , 只是它載的檔案竟被指名在/cpu/arm920t/start.o , 難怪系統要傻了. 我試著去找同樣屬於 arm 的開發板, 我發現只要使用arm920t 為 base 的開發板 , 裏面的 lds file , 都是直接指名要找 /cpu/arm920t/start.o . 或許當初編寫這一段 loader 的人 , 沒想過有類似於使用 arm 結構 , 但不是使用 arm 原廠 IP 的可能吧.

將其改為 load /cpu/fa526/start.o , 然候在make一次. 結果就ok了

        做到這邊, 只能說已經完成一個屬於 gl300 開發平台的配置已經成功 , 接下來則是要試著將原本在 Arm Readview 中能執行的 boot code 慢慢的嵌到 U-boot中. 因為Linux 與 Readviwe 平台的開發方式有很大的不同 , 所以光 start. S 這個部份 , 可能會有許多的問題. 我想這會是個很有趣的挑戰. 也值得拭目以待囉.





[ Das U-boot 的編譯 ]




編按 :

        乍看FARADAY 的IP FA526 , 怎麼都跟 ARM9 的 ARM926T 有點類似 . 原以為是 FARADAY 直接跟 ARM License IP 然後設計出來的. 後來請教公司同仁 , 原來這是FARADAY 宣稱由他們自行設計出 v4 pipe 架構 , 類似於 ARM 的design , 並且可以調適到使用 ARM 提供的 ADS . RearView 的 Development tools 是沒問題的.... 那這下可怪了 , 如果是自行設計的又怎麼跟 ARM 能牽上關聯 , 最後還搞的要跟ARM 來付權利金才行. Anyway , 就一邊做一邊看 , 看兩者的有多大的相異相同處囉.

      
arrow
arrow
    全站熱搜

    jslinux 發表在 痞客邦 留言(0) 人氣()