青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Mike's blog

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  0 Posts :: 23 Stories :: 83 Comments :: 0 Trackbacks

常用鏈接

留言簿(17)

我參與的團隊

搜索

  •  

最新評論

vivi是當前比較流行的,專門針對ARM9處理器而設計的一款Bootloader,它操作簡便,同時提供了完備的命令體系。因此,對其進行分析和研究具有一定的實際意義。
  vivi簡介
  vivi是由韓國Mizi公司開發的一種Bootloader,適合于ARM9處理器,支持S3C2410x處理器,其源代碼可以在http://www.mizi.com網站下載。和所有的Bootloader一樣,vivi有兩種工作模式,即啟動加載模式和下載模式。當vivi處于下載模式時, 它為用戶提供一個命令行接口,通過該接口能使用vivi提供的一些命令集。
  vivi運行過程分析
  vivi作為一種Bootloader,其運行過程分成兩個階段。第一階段的代碼vivi/arch/s3c2410/head.s中定義,大小不超過10 KB,它包括從系統上電后在0x00000000地址開始執行的部分。這部分代碼運行在Flash中,它包括對S3C2410的一些寄存器、時鐘等的初始化并跳轉到第二階段執行。第二階段的代碼在vivi\init\main.c中,主要進行一些開發板初始化、內存映射和內存管理單元初始化等工作,最后會跳轉到boot_or_vivi()函數中,接收命令并進行處理。需要注意的是在Flash中執行完內存映射后,會將vivi代碼拷貝到SDRAM中執行。如圖1所示,給出了vivi的詳細的運行過程。
  大多數Bootloader都分為stage1和stage2兩部分,stage2 的代碼通常用 C 語言來實現,以便于實現更復雜的功能并取得更好的代碼可讀性和可移植性。但是與普通C語言應用程序不同的是,在編譯和鏈接Bootloader 程序時,不能使用glibc庫中的函數。因此,從那里跳轉進main()函數,而把main()函數的起始地址作為整個stage2執行映像的入口點也存在兩個缺點:無法通過main()函數傳遞函數參數且無法處理main()函數返回的情況。
  一種較為巧妙的方法是利用彈簧床的概念,也就是用匯編語言寫一段trampoline 小程序,并將這段程序作為stage2可執行映象的執行入口點,然后在trampoline匯編小程序中用CPU跳轉指令跳入main()函數中去執行。當main()函數返回時,CPU執行路徑再次回到trampoline程序。簡而言之,這種方法的思想就是:用這段 trampoline小程序來作為main()函數的外部包裹。
  vivi中的trampoline程序如下:
  @ get read to call C functions
  ldr sp, DW_STACK_START @ setup stack pointer
  mov fp, #0 @ no previous frame, so fp=0
  mov a2, #0 @ set argv to NULL
  bl main @ call main
  mov pc, #FLASH_BASE @ otherwise, reboot;
  正常情況下,程序能夠正常執行完畢,但是如果出錯了,就回到最后一條語句重新啟動系統。
  圖1 vivi運行過程
  vivi的移植
  為了使移植工作更加快捷,本文選擇vivi-20030929版本。它不僅提供對ARM-920T內核的支持,而且直接提供了對于S3C2410x的板級支持,這使移植工作量相對減少。
  vivi中與軟件相關的修改
  vivi作為Linux系統的啟動代碼,在編譯配置時需要用到函數庫,包括交叉編譯器庫和頭文件,交叉編譯開關選項設置,還包括Linux內核代碼中的庫和頭文件,所以,通常需要修改vivi工程管理文件Makefile。
  vivi中與硬件相關的初始化
  與具體運行在哪一個處理器平臺上相關的文件都存放在vivi/arch/目錄下,本系統使用S3C2410x處理器,對應的目錄為s3c2410。
  其中head.s文件是vivi啟動配置代碼,加電復位運行的代碼就是從這里開始的。由于該文件中對處理器的配置均通過調用外部定義常數或宏來實現,所以針對不同的平臺,只要是S3C2410x處理器,幾乎不用修改,只要修改外部定義的初始值即可。這部分初始值都在vivi/include/platform/smdk2410.h文件中定義,包括處理器時鐘、存儲器初始化、通用I/O口初始化以及vivi初始配置等。
  對不同Flash啟動的修改
  vivi能從Nor Flash或Nand Flash啟動,因此啟動程序以及Linux內核及根文件系統,甚至還包括圖形用戶界面等就需要存放在Nor Flash或Nand Flash中。這樣,作為啟動程序的vivi還需要根據實際情況來修改存放這些代碼的分區。本系統采用64MB Nand Flash、2MB Nor Falsh,需要由vivi進行分區才能運行Linux。分區指定的偏移地址就是代碼應該存放并執行的地址。
  內核啟動參數設置
  經過修改后,S3C2410x開發板能從Nand Flash中啟動運行Linux,也能從Nor Flash中啟動,所以相應地也要修改啟動命令,如下所示:
  #ifdef CONFIG_S3C2410_N AND_BOOT
  char Linux_cmd[] = "noinitrd root=/dev/bon/2 init=/Linuxrc console=tty0 console=ttyS0 ";
  #else
  char Linux_cmd[] = "noinitrd root=/dev/mtdblock/3 init=/Linuxrc console=tty0 console=ttyS0";
  #endif
  修改并實現Flash驅動
  移植vivi的最后一步是實現Flash驅動,開發者需要根據自己系統中具體Flash芯片的型號及配置,修改驅動程序,使Flash設備能夠在嵌入式系統中正常工作。如果使用的是驅動尚未支持的Flash芯片,只需仿照其他型號,將Flash型號加入該驅動程序即可。
  修改Flash驅動的關鍵一步是對flash. c文件的修改。flash. c是讀、寫和刪除Flash 設備的源代碼文件。 由于不同開發板中Flash 存儲器的種類各不相同,所以修改flash. c 時需參考相應的Flash 芯片手冊。它包括如下幾個函數:
  unsigned long flash - init(void ),Flash 初始化;
  void flash - print - info(flash - info - t *info),打印Flash信息;
  int flash - erase(flash - info - t*info,ints - first,ints -last),Flash 擦除;
  volatile static int write-hword(flash - info - t*info,ulongdest,ulong data),Flash 寫入;
  int write - buff(flash - info - t *info,uchar *src,ulongaddr,ulong cnt),從內存復制數據。
  當做好上述的移植工作后,就能對vivi進行編譯了。在編譯vivi之前,需要根據開發板進行適當的配置。保存并退出后,執行“make”命令開始編譯。把編譯好的vivi燒到Nor Flash中,加電重啟開發板就能運行vivi了。
  結語
  Bootloader是操作系統和硬件的樞紐,相對于操作系統內核來說,它是一個硬件抽象層。它負責初始化硬件,引導操作系統內核,檢測各種參數給操作系統內核使用。一個功能完備的大型Bootloader的工作量,相當于一個小型的操作系統。在嵌入式領域中,操作系統移植的關鍵在于Bootloader的移植和操作系統內核硬件相關部分的移植。嵌入式Linux操作系統作為開發嵌入式產品的首選,為其選擇一款合適的Bootloader能節省開發時間和資金,本文對于使用vivi啟動Linux內核具有較好的參考價值。
轉載:http://baike.baidu.com/view/856252.html?wtp=tt
posted on 2008-10-13 20:59 老狼 閱讀(1597) 評論(0)  編輯 收藏 引用 所屬分類: OS
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人免费在线观看| 国产精品mm| 欧美激情第五页| 久久精品成人一区二区三区蜜臀 | 国产精品人人爽人人做我的可爱 | 久久黄色网页| 久久男女视频| 久久久一二三| 噜噜噜在线观看免费视频日韩| 欧美一区2区三区4区公司二百| 伊人激情综合| 久久国产免费| 国产精品成人aaaaa网站| 欧美日韩mp4| 国产视频亚洲| 亚洲日韩视频| 欧美一区二区三区另类| 欧美不卡激情三级在线观看| 亚洲精品无人区| 午夜一级在线看亚洲| 美日韩精品免费| 国产精品久久久久久久久| 国产亚洲一区在线| 9l国产精品久久久久麻豆| 久久国产一区二区三区| 欧美一区三区二区在线观看| 性8sex亚洲区入口| 欧美大片在线观看一区二区| 国产精品婷婷| 99爱精品视频| 久久婷婷综合激情| 夜夜嗨av色一区二区不卡| 久久久久久97三级| 国产精品久久久久久久午夜片| 亚洲大黄网站| 久久久久九九九| 正在播放欧美视频| 欧美女同在线视频| 91久久久久久| 欧美福利一区二区三区| 久久9热精品视频| 国产精品久久久免费| 一本一本久久a久久精品牛牛影视| 久久亚洲免费| 欧美伊人久久大香线蕉综合69| 欧美日韩亚洲视频一区| 亚洲欧洲一区二区三区在线观看| 久久精品99无色码中文字幕| 亚洲视频精选在线| 欧美日韩一区在线观看视频| 日韩香蕉视频| 亚洲国产精品电影在线观看| 久久av资源网站| 欧美午夜精品伦理| 在线一区二区三区做爰视频网站 | 免费不卡在线视频| 午夜亚洲视频| 国产资源精品在线观看| 欧美一区二区精美| 亚洲黄色成人网| 久久婷婷人人澡人人喊人人爽| 午夜国产精品影院在线观看| 国产精品视频精品视频| 亚洲女爱视频在线| 亚洲一区精彩视频| 国产精品视频yy9299一区| 亚洲自拍偷拍一区| 亚洲一区二区毛片| 国产一区二区三区av电影| 久久久久久成人| 久久综合久久综合九色| 亚洲国产精品久久久久秋霞不卡 | 欧美精品九九| 亚洲少妇诱惑| 亚洲女人天堂av| 精品成人一区二区三区| 欧美不卡在线| 欧美日韩色综合| 欧美在线欧美在线| 久久国内精品视频| 亚洲国产岛国毛片在线| 亚洲三级毛片| 国产精品v欧美精品∨日韩| 欧美一区二区三区在线播放| 久久精品人人做人人爽| 日韩视频不卡中文| 亚洲图片欧洲图片av| 国产夜色精品一区二区av| 欧美不卡视频| 国产精品自在欧美一区| 欧美成ee人免费视频| 欧美日韩中文另类| 久久日韩粉嫩一区二区三区| 欧美国产日韩亚洲一区| 欧美一级免费视频| 欧美成人伊人久久综合网| 欧美一级播放| 欧美国产另类| 久久久亚洲影院你懂的| 欧美视频免费在线观看| 巨乳诱惑日韩免费av| 欧美三区在线| 欧美大秀在线观看| 国产精品视频网址| 亚洲精品一区二区在线观看| 国内成+人亚洲| 在线亚洲电影| 日韩午夜精品| 久久久久久久综合| 欧美一区二区视频在线| 欧美激情精品| 欧美成人精品h版在线观看| 国产精品福利久久久| 亚洲电影专区| 精品不卡视频| 久久国产精品黑丝| 亚洲主播在线播放| 欧美激情一区二区三区成人| 久久婷婷色综合| 国产精品乱码妇女bbbb| 99视频在线精品国自产拍免费观看| 欧美资源在线| 亚洲国内自拍| 午夜精品久久久久久久白皮肤| 国产日韩精品一区| 免费成人av在线看| 亚洲午夜在线| 久久久人成影片一区二区三区| 亚洲第一成人在线| 欧美国产精品| 久久精品国产999大香线蕉| 欧美激情欧美激情在线五月| 在线一区二区三区四区五区| 国产精品红桃| 久久久久国产精品一区| 一本一道久久综合狠狠老精东影业| 国产精品亚洲不卡a| 欧美国产日本高清在线| 精品1区2区| 久久色在线播放| 久久免费国产精品| 国产精品永久免费在线| 亚洲欧美日本国产有色| 久久福利视频导航| 国产精品另类一区| 午夜亚洲视频| 欧美高清在线观看| 亚洲另类黄色| 国产精品v欧美精品∨日韩| 亚洲欧美视频在线观看视频| 久久黄色影院| 亚洲黄色有码视频| 欧美日韩91| 欧美亚洲三区| 欧美激情精品久久久六区热门 | 另类专区欧美制服同性| 亚洲国产欧美久久| 欧美日韩三级电影在线| 欧美亚洲日本国产| 欧美激情一区二区三区蜜桃视频 | 久久婷婷蜜乳一本欲蜜臀| 亚洲人成网站在线播| 欧美精品videossex性护士| 日韩视频中午一区| 久久福利毛片| 99re热这里只有精品视频| 国产欧美日韩| 欧美www视频| 亚洲尤物在线| 欧美黄色一区二区| 午夜精品短视频| 1024国产精品| 欧美午夜无遮挡| 久久综合色天天久久综合图片| 亚洲人成精品久久久久| 欧美一区91| 日韩视频久久| 韩国女主播一区| 欧美三级视频在线观看| 久久精品国亚洲| 亚洲视频axxx| 亚洲日本va午夜在线影院| 久久久另类综合| 亚洲精选在线| 亚洲欧美在线观看| 久久精品国产91精品亚洲| 一区二区三区欧美视频| 一本色道久久88亚洲综合88| 亚洲精品久久久久久一区二区| 国内精品视频666| 欧美a级理论片| 欧美一区=区| 午夜精品久久久久久久 | 久久精品三级| 亚洲欧美日韩成人| 一本一本久久a久久精品综合妖精| 蜜臀久久久99精品久久久久久| 亚洲新中文字幕| 日韩视频在线一区二区三区| 伊人久久婷婷色综合98网|