视频一区视频二区在线观看_国产欧美激情在线观看_免费的av网址_莫妮卡裸全乳无删减电影_免费的一级黄色片_福利姬免费_欧美jizz19性欧美_在线观看免费视频国产_日本免费三级电影_亚洲tv在线_很黄很色的视频_亚洲免费视频一区_91黄色影视_草莓视频.www_成人欧美一区二区三区白人

你的位置:首頁 > 測試測量 > 正文

如何在晶心平臺實作ROM patch?

發布時間:2012-07-26 來源:晶心科技股份有限公司

導言:我們發現,當客戶開發Non-OS的程序代碼,最常遇到的問題在于開發者不知如何撰寫linker script。網絡上有GNU ld的使用文件,但是linker script的范例太少,尤其開發者需要撰寫進階的linker script,常常不知如何下手。本篇文章我們分享如何實作ROM patch。

筆者曾協助多家公司工程師,在AndesCore™上發展firmware。我們發現,當客戶開發Non-OS的程序代碼,最常遇到的問題在于開發者不知如何撰寫linker script。網絡上有GNU ld的使用文件,但是linker script的范例太少,尤其開發者需要撰寫進階的linker script,常常不知如何下手。

本篇文章我們分享如何實作ROM patch。使用晶心CPU建構的embedded system,一般具有CPU、外圍IP及RAM、ROM。部份客戶使用ROM code開機,程序代碼放在ROM內,data section放在SRAM里。ROM code的特性是成本低,跟著IC光罩一起生產,當IC制作完成即不可修改,若有制作上的錯誤或是程序代碼邏輯上的錯誤,只能用ROM patch的方式修補。也就是將需要修補的程序代碼放到小容量的flash里。這就是我們今天要分享的技術。

1.    主程序架構

首先介紹主程序的架構。IC的Memory layout如下圖。

圖表1  主程序的memory layout圖

紅色框線的部份,為主程序編譯的范圍。主程序main會呼叫到func1、func2和func3這3個function。

在上圖中,黃色區域是IC的ROM,這部份的程序是IC制作出來即不可以改變。綠色部份是flash。在圖中,flash分成2區,一個是jump_table,存放func1~func3的地址。剩余的空間FUNC_PATCH,預留給patch使用。

為了要修補ROM內的function,所以規劃出jump_table區域,原本都是指向ROM的function。如果ROM里的部份function損壞或是需要改寫,就把jump_table改為指向FUNC_PATCH里新建的function。

1.1 源代碼

主程序的程序代碼如下:(main.c)
#include <stdio.h>
#include <stdlib.h>
int func1(int);
int func2(int);
int func3(int);
int num1=1;
int num2=2;
int num3=3;

typedef struct strfunptr {
   int (*func_a)(int);
   int (*func_b)(int);
   int (*func_c)(int);
}sfptr;

sfptr jump_table __attribute__ ((section ("FUNC_TABLE")))= {func1, func2, func3};

int main(void) {

    printf("func1(30)=%dn",jump_table.func_a(30));
    printf("func2(30)=%dn",jump_table.func_b(30));
    printf("func3(30)=%dn",jump_table.func_c(30));

    return EXIT_SUCCESS;
}
[page]
int func1(int x){
    return x*num1;
}
int func2(int x){
    return x*num2;
}
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之后的架構圖


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

圖表2 ROM patch的memory layout圖

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

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


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

圖表3 主程序的symbol

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

(2) patch在編譯之前,先匯入主程序的symbol table。(將export.txt檔案放在一起編譯)。Patch的linker script要匯入主程序的symbol,寫法如下面紅色字體。

ENTRY(_start)
/* Do we need any of these for elf?
   __DYNAMIC = 0;    */
INCLUDE "..export.txt" 
SECTIONS
{

(3) patch的程序代碼里如下,沒有main function,也不要加入startup files。改寫func2。func2放在flash的FUNC_PATCH section。并且將jump_table里的func2,改成指向新的func2。

#include <stdio.h>
#include <stdlib.h>

extern int func1(int);
extern int func3(int);
int func2(int) __attribute__ ((section ("FUNC_PATCH")));
extern int num2;

typedef struct strfunptr {
   int (*func_a)(int);
   int (*func_b)(int);
   int (*func_c)(int);
}sfptr;

sfptr jump_table __attribute__ ((section ("FUNC_TABLE")))= {func1, func2, func3};

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

 (4) patch的linker script,加入FUNC_PATH在jump_table之后。
FUNC_PATCH 0x510020 :
    {
    *(.FUNC_PATCH)
     }
[page]
3. 如何除錯


首先,將程序代碼存放在IC的ROM及flash里。(本文為了示范,我們的做法是在AndeShape™ ADP-XC5的FPGA板上,用RAM模擬ROM及flash,分別將主程序和patch的bin文件restore到板子上。)

當gdb debug時,載入patch 的symbol。以下節錄gdb指令。

core0(gdb) file mainprog.adx
core0(gdb) add-symbol-file patch.adx  0x500000 -s FUNC_TABLE 0x510000 -s FUNC_PATCH 0x510020
core0(gdb) set $pc=0x500000
core0(gdb) b main
Breakpoint 1 at 0x50010c: file ../main.c, line 20.
core0(gdb) c
Breakpoint 1, main () at ../main.c:20
20              printf("func1(30)=%dn",jump_table.func_a(30));
core0(gdb) s
func1 (x=30) at ../main.c:28
28              return x*num1;
core0(gdb) n
29      }
core0(gdb) s
main () at ../main.c:21
21              printf("func2(30)=%dn",jump_table.func_b(30));
core0(gdb) s
func2 (x=30) at ../patchprog.c:24
24              return x*num2*100;
core0(gdb)

上面過程中,先加載main的symbol,再加載patch的symbol及debug information。"add-symbol-file patch.adx  0x500000 -s FUNC_TABLE 0x510000 -s FUNC_PATCH 0x510020"是將patch section的symbol及debug information也載入gdb以debug。讀者可以在gdb里,打"help add-symbol-file"查閱add-symbol-file的用法。

3.1 主程序patch后的執行結果

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

4. 結語

目前晶心科技使用GNU的toolchain,其功能非常強大。讀者可多動手試試不同的linker script寫法,使得開發firmware更有彈性及效率。
特別推薦
技術文章更多>>
技術白皮書下載更多>>
熱門搜索

關閉

?

關閉

亚洲综合视频一区 | 国产精品区二区三区日本 | 中文字幕亚洲无线码在线一区 | 狠狠干夜夜 | 一区二区三区观看 | 久久精品国产亚洲av麻豆色欲 | 亚洲视频一二三区 | 婷婷射图 | 国产理论在线 | 丁香六月久久 | 精品人妻一区二区色欲产成人 | 性爱免费视频 | 一级黄色大片免费观看 | 成人黄色一级电影 | 欧美黄色片 | 精品中文视频 | 激情文学综合网 | 欧美另类z0zx974 | 三年中文在线观看中文版 | 欧美同性视频 | 差差视频| 91成人精品 | 色狠狠一区二区三区 | 国产精品久久久久久久久久久久久 | 亚洲午夜天堂 | 黄色综合网 | av视屏在线 | 不用播放器的av网站 | 麻豆亚洲av熟女国产一区二 | 国产理论在线 | 一边亲一边摸一边脱一边免费 | 国产三级精品视频 | 成人做爰69片免费看 | 麻豆久久久 | xxxx69日本| 三年中文在线观看中文版 | 99插插插| 伊人久久综合 | 日韩精品免费在线 | 美女高潮流白浆 | 中文字幕亚洲一区二区三区五十路 | 亚洲日批| 国产免费黄色小说 | 日本精品视频在线观看 | 欧美丰满老妇熟乱xxxxyyy | 88福利视频 | 国产乱码精品一区二区三区忘忧草 | 亚洲福利免费 | 第一次处破女h圆房~h嗯啊 | 短裙公车被强好爽h吃奶视频 | 麻豆亚洲av熟女国产一区二 | 香蕉污视频 | 久久久久极品 | 国产成人短视频在线观看 | 久久疯狂做爰流白浆xx | 欧美爱爱爱 | 久久亚洲av无码精品色午夜麻豆 | 国产片大尺度裸露床戏 | 粉色视频免费 | 久久精品a | 天堂中文资源在线观看 | 五十路毛片 | 婷婷射图 | 日韩精品免费一区二区夜夜嗨 | 一本高清dvd在线播放 | 色综合中文字幕 | 午夜窝窝 | 亚洲精品99| 91视频一区二区 | 男人添女人荫蒂视频 | 欧美同性视频 | 国产理论在线 | 午夜影院污 | 少妇高潮在线观看 | 在线观看黄色小说 | 班长露出强行被男生揉 | 中文字幕亚洲一区二区三区五十路 | 国产精品原创 | 国产成年人免费视频 | 麻豆专区 | 午夜资源站| 精品视频久久 | 视频一区视频二区在线观看 | 在线亚洲欧洲 | 人妻射精一区二区 | 国产乱码精品一区二区三区忘忧草 | 娇小6一8小毛片 | 日本欧美亚洲 | 亚洲精品久久一区二区三区777 | 五十路毛片 | 一本久久久 | 日韩精品视频在线观看免费 | 国产精品吴梦梦 | sleepless动漫在线观看免费 | 麻豆视频一区二区 | 又黄又爽视频 | xxxx69日本| 差差视频 | 激情文学综合网 | 日韩综合在线视频 | 成人黄色一级电影 | 在线黄色小说 | 中文字幕亚洲一区二区三区五十路 | 日韩在线二区 | 日韩亚洲一区二区 | 九九热只有精品 | 免费播放片大片 | 免费黡色av | 国产成人无码一区二区三区在线 | 黄色高清视频在线观看 | 午夜影院污 | 在线黄色小说 | 天堂网成人 | 五月婷婷综合激情 | 国产熟妇另类久久久久 | 久久色网| av片在线看 | 在线黄色小说 | 男人插女人b | 在线观看国产黄色 | 精品久久久久久久久久久久久久久久久 | 欧美视频你懂的 | 国产免费黄色小说 | 亚洲第一二三四区 | 伊人影院在线观看 | 男人插女人下面 | 国产69xx | 亚洲精品中文字幕 | 91久久影院| 久久这里只有精品99 | 亚洲精品字幕 | 先锋影音成人 | 成人深夜网站 | 88福利视频 | 欧美性生交xxxxxdddd | 综合久久久久久久 | 久久疯狂做爰流白浆xx | 免费黄色小说视频 | av片在线看| 午夜资源站| 五月婷婷综合激情 | av不卡在线看| 国产精品污www一区二区三区 | 精品人妻一区二区色欲产成人 | 中文字幕亚洲无线码在线一区 | 色婷五月| 国产精品原创 | 奇米影视av | 艳魔大战2春荡女淫三级 | 久久99久久99精品免观看 | 亚洲 欧美 激情 另类 | 一色桃子av| 国产91丝袜在线播放九色 | 午夜国产一级 | 欧美一卡二卡三卡 | 亚洲欧美在线综合 | 伊人久久综合 | 国产片大尺度裸露床戏 | 国产精品178页 | 久久精品a | 五月香婷婷 | 国产做受高潮动漫 | 亚洲视频精选 | 久久亚洲av无码西西人体 | 91热热| 斑马电影街 | 国产精品污www一区二区三区 | 天堂网在线播放 | 一区二区三区观看 | 久久免费少妇高潮久久精品99 | 国产成人无码一区二区三区在线 | 亚洲第一二三四区 | 亚洲狠狠操 | 中文字幕在线高清 | 色狠狠一区二区三区 | 欧美日韩综合一区二区三区 | 久久精品国产亚洲av麻豆色欲 | 五十路毛片 | 不用播放器的av网站 | 波多野结衣1区 | 国产精品污www一区二区三区 | 美足av电影| 亚洲av电影一区二区 | 欧美大成色www永久网站婷 | 娇小6一8小毛片 | 精品久久久久久久久久久久久久久久久 | 亚洲一二三区av | 一区二区三区观看 | 丁香六月久久 | 中文字幕5566 | 国产成人短视频在线观看 | 被c到喷水嗯h厨房交换视频 | 男生艹女生 | 久久午夜电影 | 69亚洲乱人伦| 在线看一区 | 中文字幕亚洲一区二区三区五十路 | 亚洲精品丝袜日韩 | 91国产丝袜播放在线 | 8x8x华人永久免费视频 | 波多野结衣在线看 | 国产69xx | 福利二区 | 中文字幕日韩在线视频 | 天堂中文资源在线观看 | 99这里只有 | 五月香婷婷 | www.国产视频 | 蜜臀久久99精品久久一区二区 | 日本大尺度激情做爰hd | 国产乱码精品一区二区三区忘忧草 | 亚洲日批| 亚洲天堂一区 | 老女人黄色片 | 波多野结衣成人在线 | 美国禽片禁式1一9 | 厨房掀开馊了裙子挺进 | 久久国产精品免费视频 | 国产精品区二区三区日本 | 久久亚洲av无码西西人体 | 黄色小视频在线 | 欧美a在线| 天堂网成人 | 不卡av在线播放 | 日韩免费黄色片 | 波多野结衣在线观看一区 | 国产18照片色桃 | 激情文学综合网 | 亚洲日批| 在线亚洲欧洲 | 91视频一区二区 | 在线观看国产黄色 | 黄页网站免费观看 | 美女被揉胸动态图 | 国产在线播放不卡 | 久久疯狂做爰流白浆xx | 亚洲日批 | 亚洲不卡视频 | 欧美a在线 | 中文在线字幕 | 一本久久久 | 中文字幕xxx | 91欧美视频 | 香蕉av网 | 伊人影院在线观看 | 久久国产福利 | 亚洲播放器 | 亚洲色图首页 | 欧美三级色图 | 日本精品视频在线观看 | 久久中文字幕影院 | 色狠狠一区二区三区 | 欧美另类z0zx974 | 故意穿暴露被强好爽 | 人妻无码久久精品人妻 | 国产午夜性春猛交ⅹxxx | 在线看一区 | 色性av | 一区二区三区观看 | 亚洲视频一二三区 | 玖玖色在线 | 国产精品久久久久久久久久久久久 | 国产91丝袜在线播放九色 | 久久久久极品 | 日本女优黄色 | 一边亲一边摸一边脱一边免费 | 久久免费在线观看 | av老司机在线观看 | 我和岳交换夫妇爽4p晓娟小说 | aaa一区二区三区 | 久久久久久国产精品视频 | 日韩成人av在线播放 | 午夜影院污| 波多野结衣成人在线 | a视频在线看 | 亚洲第一二三四区 | 黄色三级图片 | 亚洲视频一二三区 | 你懂的网址在线观看 | 人人澡人人爽 | 午夜国产一级 | 波多野结衣在线一区 | 欧美激情站| 三级性生活片 | 国产精品99无码一区二区 | 久久亚洲av无码西西人体 | 天堂中文资源在线观看 | 伊人久久综合 | 免费黄色小说视频 | 久热精品在线观看 | 日韩精品免费一区二区夜夜嗨 | 在线观看黄色小说 | 91欧美视频 | 国产精品原创 | 91人人澡 | 一级黄色大片免费观看 | 美足av电影 | 中文字幕人妻一区 | www.天天操.com| 美女av在线播放 | 国产免费三片 | 亚洲精品二区三区 | 韩日成人| 国产三级精品视频 | 国产又黄又大又粗的视频 | 日本精品视频在线观看 | 亚洲精品丝袜日韩 | 国产精品入口麻豆 | 激情亚洲天堂 | 国产成人啪精品午夜在线观看 | 久久天天操 | 一区二区视频免费 | 韩国一级淫片免费看 | 亚洲色图首页 | 美国禽片禁式1一9 | 中文字幕无码精品亚洲资源网久久 | 欧美一卡二卡三卡 | 中文字幕精品亚洲 | 亚洲一区二区三区乱码 | 草莓视频www二区在线观看 | 草免费视频 | 性欧美18一19性猛交 | 日本欧美亚洲 | 中文字幕亚洲一区二区三区五十路 | 欧美大成色www永久网站婷 | 国产成人啪精品午夜在线观看 | 麻豆专区 | 日韩亚洲一区二区 | 五月丁香啪啪 | av色图| 新天堂在线资源 | 国产精品一二三四五六 | 精品精品精品 | 差差视频 | 你懂的网址在线观看 | 二区三区 | 国产精品色综合 | 国产精品人人妻人人爽人人牛 | 老女人黄色片 | 成人一区在线观看 | 蜜臀久久99精品久久一区二区 | 五月中文字幕 | 久久免费在线观看 | 国产一区二区三区播放 | 黄色综合网 | 萌白酱福利视频 | 波多野结衣在线看 | 精品人妻一区二区色欲产成人 | av视屏在线| 久久疯狂做爰流白浆xx | 爆操杨幂 | 欧美久久视频 | 亚州黄色 | 91手机在线 | 国产成年人免费视频 | 国内精品在线观看视频 | 欧美黑人狂野猛交老妇 | 亚洲欧洲自拍 | 在线看一区 | 少妇高潮在线观看 | 在线观看免费观看 | 午夜色大片 | 亚欧中文字幕 | 人人爱爱 | 人妻射精一区二区 | 禁欲总裁被揉裆呻吟故事动漫 | 中文字幕无码精品亚洲资源网久久 | 女性裸体无遮挡胸 | 中文字幕日韩在线视频 | 日韩久久成人 | 日本亲与子乱ay中文 | 中文字幕人妻一区 | 欧美国产日韩一区二区 | 波多野结衣1区 | 91偷拍视频 | 久久亚洲av无码精品色午夜麻豆 | 欧美一区二区 | 厨房掀开馊了裙子挺进 | 久操资源 | 色婷五月 | 韩国裸体美女 | 久久天天操 | 日韩精品免费在线 | 黄页网站免费观看 | 一级黄色大片免费观看 | 国产三级麻豆 | 国产三级精品视频 | 伊人久久综合 | 欧美日韩激情一区 | 日本三级韩国三级美三级91 | 老鸭窝成人 | 久久看视频 | 国产一区二区三区播放 | 波多野结衣在线看 | 欧洲一区二区视频 | 亚洲一本 | 欧美爱爱爱 | 二区三区| 一区二区三区观看 | 伊人影院在线观看 | 欧美一卡二卡三卡 | 免费在线播放 | 精品精品精品 | 97超级碰碰碰 | 日韩成人av在线播放 | 国产激情对白 | 艳魔大战2春荡女淫三级 | a黄色大片 | 国产精品99久久久久久久久 | 成人9ⅰ免费影视网站 | 黑人精品xxx一区一二区 | 少妇高潮在线观看 | 日本三级韩国三级美三级91 | 久久疯狂做爰流白浆xx | 玖玖天堂| 男人插女人b | 天天插日日插 | 亚洲精品中文字幕 | 成人一区在线观看 | 国产精品99无码一区二区 | 欧美zzoo | 一本久久久 | 国产精品178页 | 亚洲一区二区三区乱码 | 一边亲一边摸一边脱一边免费 | sleepless动漫在线观看免费 | 美国禽片禁式1一9 | 欧美视频你懂的 | 高潮小视频 | 99视频在线看| 欧美操老女人 | 短裙公车被强好爽h吃奶视频 | 男人天堂久久 | 日韩免费黄色片 | 亚洲精品中文字幕 | 亚洲不卡视频 | 精品久久久久久久久久久久久久久久久 | 国产午夜性春猛交ⅹxxx | 操欧美孕妇 | 毛片链接| 国产乱码精品一区二区三区忘忧草 | 精品人妻一区二区色欲产成人 | 亚欧中文字幕 | 蜜臀久久99精品久久一区二区 | 嗯啊视频 | 免费播放片大片 | 午夜草逼 | 国产精品最新 | 中文字幕视频在线 | 国av在线| a视频在线看 | 美女黄色免费网站 | 国产情侣91 | 一级黄色大片免费观看 | 久久疯狂做爰流白浆xx | 在线国产日韩 | 亚洲精品久久一区二区三区777 | 国产精品人人妻人人爽人人牛 | 亚洲播放器 | 五月天色人阁 | 国产片大尺度裸露床戏 | 在线黄色小说 | 韩国裸体美女 | av视屏在线 | 日本大尺度激情做爰hd | 中国女人内谢69xxxx | 波多野结衣在线看 | 亚洲精品二区三区 | 久久午夜电影 | 美女黄色免费网站 | 在线观看黄色小说 | av色图| 99这里只有 | 91人人澡| 黄色三级图片 | 亚洲777| 久久免费国产 | 日批的视频 | 久久亚洲av无码西西人体 | aaa一区二区三区 | 久久九九国产 | 超碰在线91 | 国产精品人人妻人人爽人人牛 | 日韩成人av在线播放 | 不用播放器的av网站 | 黄视频在线免费 | 亚洲精品99| 91手机在线 |