新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 如何在晶心平臺實作ROM patch

        如何在晶心平臺實作ROM patch

        作者: 時間:2012-07-27 來源:電子產品世界 收藏

          int func2(int x){
          return x*num2;

        本文引用地址:http://www.104case.com/article/135126.htm

          }

          int func3(int x){
          return x*num3;

          }

          上面的程序代碼中,第16行的程序代碼__attribute__ ((section ("FUNC_TABLE"))),作用是將jump_table放在特定的”FUNC_TABLE”section里。

          1.2 主程序linker script (僅列需要修改的部份)

          FUNC_TABLE 0x510000 :
          {
          *(.FUNC_TABLE)
          }

          Flash的地址由0x510000起,將FUNC_TABLE固定在flash的最開頭,語法如上。

          1.3 主程序執行結果

          func1(30)=30
          func2(30)=60
          func3(30)=90

          2. 經過Patch之后的架構圖

          假設里的func2損壞,要改用flash里的func2。需要更改指向func2的指標,及func2的內容。如下圖:  

         

          用紅色框線標起來的地方,表示為patch編譯的范圍。其中jump table在這里重新編譯,指向新的地址。

          2.1 實作方法

          (1) 導出主程序的symbol table。

          在主程序的Linker flags 加上-Wl,--mgen-symbol-ld-script=export.txt ,ld 會產生export.txt這個檔案, 這個檔案包含了一個SECTION block以及許多變數的地址。如下圖所示  

         

          Linker script在import Main program的symbols時,除了需要修改的func2不要import之外,其他的symbols全部要import進來。(將export.txt刪去這一行: func2 = 0x005001c4; /* ./main.o */)



        關鍵詞: 晶心 ROM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黑龙江省| 汾阳市| 绥芬河市| 沙湾县| 平利县| 崇仁县| 丹东市| 民勤县| 藁城市| 宾阳县| 绥阳县| 丹凤县| 德令哈市| 东源县| 桃园市| 沙湾县| 天祝| 凉山| 岳池县| 嘉鱼县| 淮滨县| 友谊县| 奉化市| 东乌| 琼结县| 临沂市| 芷江| 林州市| 清河县| 常宁市| 广河县| 溧水县| 广州市| 博湖县| 柘城县| 渝北区| 陕西省| 富川| 山东| 曲阳县| 财经|