《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 如何移植Linux到晶心平臺

如何移植Linux到晶心平臺

2012-04-01
作者:沈智明
來源:資深技術經理,晶心科技股份有限公司

鑒于越來越多使用者將Linux移植晶心平臺(Andes Embedded™)上(AndesCore™ N12或N10),本文的目的在協助使用者快速、有效率的將Linux 移植到自建的FPGA板子上(CPU是AndesCore™ 的 N12或N10)。筆者曾協助多家公司工程師進行Linux移植到晶心平臺的工作,將Linux移植過程容易遭遇的問題與盲點進行實際說明,期望能對使用者有所幫助,也希望讀者不吝指教提供您寶貴的意見。

在進行Linux移植時會發現,使用者的晶心平臺可能會有各式各樣的組合,除了CPU是使用N12或N10外,使用者對于其他的周邊(如RAM,ROM,Timer…..)之搭配各有所好,為了有系統性說明Linux移植的要領,將選定一明確的硬件,軟件,與開發工具(toolchain)環境做演練說明,除了讓讀者可以實作明了文中的敘述,當使用者的周邊非原設計的硬件(用戶自己的IP)時,可以運用移植的基本原則,更改希望移植IP的Linux驅動程序,其他原始碼不動,逐一的將使用者的周邊驅動程序移植到晶心的平臺。

在Linux移植過程中,使用者須建立一基本觀念,那就是整個Linux OS可分為兩部分,第一部分是與硬件相關的HW dependence code,這部分的程序代碼會因對應不同的硬件而造成軟件部分需做不同程度的改寫;第二部份是與硬件無關的generic code,這部分的程序代碼與硬件無關,純軟件運作,不會因平臺(Andes, X86, Arm..)的改變而有差別。移植Linux的工程師第一步需要能區分出哪一部分程序代碼是 HW dependence code,另外部分的程序代碼就是generic code,如果在這階段對程序代碼判斷錯誤(HW dependence code/generic code)會拖延Linux移植的進程并增加調試時的困難。

Linux移植到晶心平臺過程中,首先須先做到Linux基礎架構移植成功。在調試時,Linux的基礎架構組件是CPU,timer,interrupt與UART,當CPU與這3項周邊移植成功后,scheduler可以運行了,printk也可以運行了Linux系統已經可以正常的運作了。接下來的工作只需將需移植的驅動程序一個一個移植即可,基礎骨架移植完成后,調試也有printk可用,接下來只需將肉 (需要加的device drivers) 填上即可。Linux移植比較困難的地方是Linux基礎架構尚未完成之前(Linux移植的初期階段)的調試,所幸晶心提供的標準調試工具與AndeShape™的調試器AICE,可以一步一步找出問題之所在,讓初期移植Linux的調試也變得很簡單,具體得作法,后文會詳細說明。本文敘述重點是如何在晶心平臺上建立Linux基礎架構,至于個別Linux 驅動程序的移植,坊間有許多的書在介紹,本文就不多加贅述。

 

1.  開發環境與程序

使用者開始進行Linux移植到晶心平臺,首先須先選定一版晶心的Linux原始碼作為基準再進行軟件移植,修改原始碼以符合使用者的開發平臺,經由工具鏈的compile與link所產生的Linux的映像文件,再放到FPGA板上以驗證程序編寫的正確與否,依此開發程序:軟件編寫->FPGA板驗證,再回到軟件編寫程序直到所有周邊IP在FPGA板上驗證完全,Linux 移植才完成,如圖表 1所示,Linux移植過程中,AICE調試可以有效加快Linux移植的速度。

圖表  SEQ 圖表 * ARABIC 1 Linux 移植的開發流程

 

本文選定一組Linux原始碼、工具鏈、FPGA 板和netlist作為晶心的平臺(于1.1,1.2,1.3中所述)進行linux的移植。讀者可將自己的平臺與晶心的平臺做類比,從而有效縮短產品開發進程。

 

1.1 晶心版Linux原始碼

目前晶心最新版本的Linux原始碼在AndeSoft™的BSP310中,Linux原始碼在BSP310套件中的位置為: BSPv310/source/Linux/linux-2.6.tgz。使用BSP310中的ramdisk ”xc5_glibc_ramdisk.img”作為filesystem。

1.2 工具鏈

此晶心平臺選用的工具鏈是AndeSoft™的nds32le-linux-glibc-v2。

1.3 FPGA 板子與 netlist

FPGA板子是晶心AndeShape™的 XC5 開發板。Netlist 為晶心AndesCore™的N10 production version.

移植平臺是指使用者要移植Linux的平臺,也就是移植Linux的目標平臺。將移植平臺與晶心平臺的比較列表如下: (其中所列之軟件皆屬于BSP310中之套件)。

 

移植平臺

晶心平臺

說明

Linux原始碼

linux-2.6.tgz

linux-2.6.tgz

使用者應從晶心版原始碼進行開發

工具鏈

nds32le-linux-glibc-v2

nds32le-linux-glibc-v2

使用者如用新版的AndesCore™,可更換新的對應工具鏈

FPGA板子

使用者設計

XC5

 

Netlist

使用者生成

N10 production version

 

圖表  SEQ 圖表 * ARABIC 2平臺與晶心平臺的比較表

 

2.  Boot loader

如果使用者有自己慣用的boot loader,可以使用慣用的boot loader以加快開發時程,如果沒有boot loader的開發經驗,可以選用u-boot作為系統的boot loader.。u-boot的source ocde位置在BSPv310/source/Standalone/u-boot/u-boot.tgz。

2.1 U-boot

AndeSoft™的BSP310中u-boot source code是需要EBIOS boot up后再執行的u-boot版本。直接boot up不需要其他軟件協助的U-boot版本(ROM版)是比較符合使用者的需要,晶心版的u-boot使用方法請參考BSP310 User Manual。如果要ROM版的u-boot需要在BSP310中的u-boot軟件做patch,其指令如下:

# patch -p1

n patching file arch/nds32/cpu/n1213/ag101/cpu.c

n patching file arch/nds32/cpu/n1213/start.S

n patching file arch/nds32/include/asm/u-boot-nds32.h

n patching file arch/nds32/lib/board.c

n patching file board/AndesTech/adp-ag101p/config.mk

n patching file include/configs/adp-ag101p.h

 

patch 完成的u-boot source code 可以產生ROM版的u-boot image,直接開機后的執行結果如圖表3所示。

 

圖表  SEQ 圖表 * ARABIC 3 u-boot 執行結果圖

3. 調試環境

在移植Linux到晶心平臺之前,先架設好調試的環境,尤其對底層Linux原始碼的移植,有莫大的幫助,在 printk尚未正常運作前,需依靠AndeShape™的AICE與 AndeSoft™的GDB來進行調試。

 

3.1設定Linux kernel 調試選項

Linux Kernel 需要設定一些調試選項,才能順利的運用AndeSoft™的GDB進行調試。晶心平臺中Linux kernel 調試選項設定如圖表4所示,增加這些選項會增加kernel 映像文件的空間,如果空間占用過大以至于不符合設計需求時,可在調試工作完畢后將調試選項關閉以節約不必要的空間浪費。

 

 

         
   
 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

圖表4設定Kernel hacking 中調試選項勾選

 

3.2 Linux kernel 調試的程序

Build成kernel bootpImage (含kernel debug message如圖表四選項) 后,Linux的映像檔放到FPGA板子上,PC host 端的AndeSoft™的GDB透過網絡(socket)與AICE連接至FPGA板子,進行調試的工作。

 

3.2.1. 編譯鏈結成映像檔

設定好AndeSoft™的 cross-compiler 路徑后,利用下列指令經由compiler and linker后可以得到 bootpImage,指令如下:

 

#CROSS_COMPILE="nds32le-linux-" ARCH="nds32" make xc5_defconfig

#CROSS_COMPILE="nds32le-linux-" ARCH="nds32" make menuconfig

# CROSS_COMPILE="nds32le-linux-" ARCH="nds32" make bootpImage INITRD=xc5_glibc_ramdisk.img

 

將生成的bootpIamge放到FPGA板子上,將AICE連接到FPGA板子啟動ICEman,指令如下:

 

#C:AndestechAndeSight200MCUice>ICEman.exe --p 1234

 

PC host端的AndeSoft™的GDB透過網絡(socket)與AICE連接至FPGA板子,進行調試的工作,示范指令如下:

 

#ddd --debugger nds32le-linux-gdb vmlinux

gdb>target remote 10.0.2.164:1234

 

其中IP值 10.0.2.164是一個應用范例,用戶可依環境實際IP值進行設定。環境設定完成后,可以開始進行調試工程。

 

 

4. 移植Linux至晶心平臺關鍵點經驗傳承

4.1 Kernel加載程序調試實作

kernel加載程序目的將kernel主程序進行解壓縮并加載正確位置,此程序與kernel主程序是兩個不同程序,但會一起包在zImage中只是kernel加載程序會attached在zImage的前面。調試時需 file不同的 ELF file才能進行正確的調試工作,kernel加載程序的位置在arch/nds32/boot/compressed/vmlinux,指令如下所示。

#ddd --debugger nds32le-linux-gdb arch/nds32/boot/compressed/vmlinux

 

kernel主程序的ELF file “vmlinux”在kernel source code的根目錄下指令如下所示。

#ddd --debugger nds32le-linux-gdb vmlinux

 

4.2 Linux kernel 調試實作

kernel加載程序執行完畢后會跳到kernel主程序執行。進入點是arch/nds32/kernel/head.S的assembly code執行完后會進入 kernel 的主要函數 “start_kernel”。

 

4.2.1. RAM offset patch

晶心版Linux原始碼搭配XC5平臺,RAM的起始位置(指的是PA)是0x0,使用者FPGA開發板的RAM起始位置如果不是0x0,必須要修改FPGA板子中RAM的起始位置,做法是在晶心版的Linux原始碼中進行RAM address patch,將原始碼中RAM位置調整到FPGA開發板中RAM的真實位置。

 

4.2.2. PA/VA remap table

當FPGA板子IO的PA設定正確后,使用者需要設定PA/VA remap table,作法可參考arch/nds32/include/asm/spec-ag101.h,依照apec-ag101.h中PA/VA對應的關系去增減使用者自己IO device的 PA/VA remap table。

 

4.2.3. Kernel 解壓縮與software breakpoint

在進行kernel 調試時,如果在低地址處,例如:head.S中進行調試,當設定 software breakpoint時,會有breakpoint無法停下來與AICE 斷線的情況發生。原因是當使用者設定software breakpoint時,breakpoint處的instruction會修改并加入break instruction。但kernel解壓縮時會將調試的程序代碼覆蓋造成與GDB調試不一致性而產生錯誤。解決的方法就是原設定software breakpoint改為hardware breakpoint,這樣就可以避免因kernel解壓縮所造成調試的錯誤,降低調試時的困難度。

 

4.2.4. PA/VA 觀念說明與調試要領

在原始碼arch/nds32/kernel/head.S中

la     $lp, __mmap_switched

mtsr       $lp, $IPC

iret

 

執行完iret后,系統就會從PA轉成VA,MMU translation status從translation off轉為translation on在此分界處調試規則如下所述,如果觀念不清楚及容易產生調試時的錯誤,請務必牢記。

 

4.2.4.1. MMU translation off 時期調試

在這個時期調試,VA是不存在的。所有的IO address與memory都是PA沒有VA,如果調試地址設成VA,容易hit illegal address 而造成exception。

 

4.2.4.2. MMU translation on 時期調試

在這個時期調試,PA是不存在的。所有的IO address與memory都是VA沒有PA,如果調試地址設成PA,容易hit illegal address 而造成exception.

 

4.2.5. 移植Linux的基礎組件

MMU translation on后,很快就會進入start_kernel 函數,接下來移植的重點就是移植Linux基礎組件,那就是interrupt,timer and UART。當這3個device移植成功后,Linux的架構就建立起來了,printk也可以用了,Linux已經可以正常的運作。如果沒有意外,可以執行完kernel甚至將filesystem帶起來。接下來用戶可以將自己的周邊組件一個一個的device driver移植入系統。當周邊組件移植完成后,Linux系統移植到晶心平臺就完成了。

 

5. 結語

Linux操作系統運作在晶心平臺已有多年的時間。各式各樣的Linux軟件運作在晶心平臺不計其數。皆可證明Linux操作系統運作結合晶心平臺是一個穩定與成熟的產品,只要能明了熟悉Linux 移植的技巧與重點,使用晶心平臺開發Linux的產品將是一件愉快與簡單的工作。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美日韩国产欧| 久久久亚洲综合| 国产精品主播| 久久久久久久一区| 欧美精品系列| 亚洲裸体在线观看| 国产精品久久77777| 久久综合影视| 国产欧美日本一区视频| 午夜视频在线观看一区二区| 久久精视频免费在线久久完整在线看| 久久国产精品99国产精| 久久精品视频在线播放| 欧美在线视频观看| 国产精品国产精品| 日韩午夜在线| 国产一区二区三区不卡在线观看| 国产视频在线观看一区| 国产精品高清一区二区三区| 一区二区三区高清视频在线观看| 欧美日韩亚洲一区二区| 国产欧美日韩视频在线观看| 国产精品青草久久| 免费久久精品视频| 黄色成人av网| 久久视频这里只有精品| 国产一区日韩二区欧美三区| 精品成人一区二区| 永久免费毛片在线播放不卡| 国产午夜久久| 欧美视频专区一二在线观看| 久久视频免费观看| 亚洲深夜福利网站| 先锋影音久久久| 免费成人你懂的| 欧美 日韩 国产精品免费观看| 亚洲第一色中文字幕| 欧美区日韩区| 国产日韩欧美在线看| 久久精品动漫| 国产精品成人国产乱一区| 性欧美1819性猛交| 亚洲欧美国产制服动漫| 亚洲激情电影在线| 亚洲三级免费| 久久人人爽人人爽| 久久久久久亚洲精品不卡4k岛国| 一本久久综合亚洲鲁鲁五月天| 国产欧美一区二区精品秋霞影院| 亚洲激情电影中文字幕| 免费成人黄色| 亚洲国产乱码最新视频| 1769国内精品视频在线播放| 男人的天堂亚洲| 欧美久久一级| 国内伊人久久久久久网站视频| 中文亚洲字幕| 亚洲香蕉视频| 最新69国产成人精品视频免费| 蜜臀av性久久久久蜜臀aⅴ| 1000部精品久久久久久久久| 国产精品wwwwww| 亚洲国产精品久久久久久女王| 欧美色视频日本高清在线观看| 在线视频精品一| 欧美xxxx在线观看| 国产酒店精品激情| 欧美午夜免费影院| 日韩视频在线免费| 亚洲黄色小视频| 欧美视频一区二区三区四区| 夜夜爽www精品| 翔田千里一区二区| 欧美日韩成人综合在线一区二区| 国产精品www色诱视频| 夜夜嗨av色一区二区不卡| 91久久夜色精品国产网站| 欧美一级视频一区二区| 日韩视频免费观看高清完整版| 久久看片网站| 亚洲图片欧洲图片日韩av| 亚洲视频一二| 国产欧美一区二区精品婷婷| 国产精品高清在线观看| 夜夜躁日日躁狠狠久久88av| 久久精品国产99国产精品澳门| 亚洲裸体视频| 久久精品成人一区二区三区| 欧美日韩99| 国产日韩欧美在线视频观看| 午夜精品福利一区二区三区av| 国产精品igao视频网网址不卡日韩| 亚洲免费综合| 99精品欧美一区二区蜜桃免费| 国产欧美一区二区精品性色| 国产精品久久久久久久久久久久久| 狠狠干综合网| 欧美日韩国产欧| 国产精品日韩专区| 欧美精品日韩www.p站| 中文一区字幕| 国产精品美女视频网站| 国产乱肥老妇国产一区二| 欧美精品久久一区| 99综合电影在线视频| 日韩午夜激情| 欧美精品一区二区三区很污很色的| 一区二区三区精品视频| 欧美精品偷拍| 国产欧美精品xxxx另类| 欧美华人在线视频| 亚洲日韩欧美视频一区| 美女999久久久精品视频| 久久久久久久高潮| 免费看精品久久片| 欧美天天在线| 极品少妇一区二区三区精品视频| 久久网站热最新地址| 麻豆精品视频在线| 欧美精品一区二区三区高清aⅴ| 影音先锋欧美精品| 狠狠色丁香久久婷婷综合_中| 欧美日韩一卡二卡| 麻豆精品精华液| 美女网站在线免费欧美精品| 亚洲欧美国产制服动漫| 国产精品久久久久毛片软件| 欧美日韩国产免费观看| 久久久久久久性| 榴莲视频成人在线观看| 欧美日韩三级在线| 亚洲国产清纯| 欧美系列电影免费观看| 欧美三级中文字幕在线观看| 国产精品盗摄一区二区三区| 国产精品久久久久一区二区| 亚洲国产欧美一区二区三区丁香婷| 亚洲精品视频免费观看| 在线成人黄色| 亚洲成色777777在线观看影院| 国产亚洲欧美一区| 国产一区二区看久久| 久久久国产午夜精品| 欧美日韩一级黄| 亚洲黄色性网站| 狠狠干综合网| 国产精品二区二区三区| 欧美日韩中文字幕精品| 狠狠色狠狠色综合系列| 欧美日韩一区二区三区| 噜噜噜久久亚洲精品国产品小说| 国产综合婷婷| 国产精品热久久久久夜色精品三区| 亚洲天堂网站在线观看视频| 欧美日韩在线免费观看| 一本高清dvd不卡在线观看| 久久久中精品2020中文| 国产精品女主播在线观看| 亚洲精品久久视频| 日韩视频一区| 国产精品日韩欧美| 久久久亚洲综合| 国产精品丝袜久久久久久app| 欧美精品一区二区三区蜜桃| 一本大道久久a久久综合婷婷| 国产精品推荐精品| 国产免费成人av| 国产精品大全| 国内偷自视频区视频综合| 久久精品水蜜桃av综合天堂| 国产精品午夜国产小视频| 亚洲天堂av电影| 在线视频欧美一区| 午夜精品久久久久久久男人的天堂| 久久综合亚州| 蜜臀久久99精品久久久久久9| 99在线热播精品免费99热| 99国产麻豆精品| 夜夜嗨av一区二区三区| 久久久久久久999精品视频| 国产一区二区三区视频在线观看| 精品成人在线| 亚洲美女少妇无套啪啪呻吟| 这里只有精品视频在线| 亚洲国产欧美在线人成| 性色av一区二区三区在线观看| 亚洲午夜电影在线观看| 国产精品一区二区你懂的| 亚洲欧美日韩直播| 午夜久久电影网| 欧美 日韩 国产精品免费观看| 黑人中文字幕一区二区三区| 欧美日韩亚洲一区二区三区四区| 午夜在线观看欧美| 亚洲国产婷婷香蕉久久久久久99| 国产精品手机视频| 亚洲欧美卡通另类91av| 国产精品久久久久久久久久久久久| 国产精品视频你懂的| 欧美激情精品久久久久久| 欧美日韩1234| 欧美了一区在线观看| 国产精品一区二区三区观看| 亚洲电影在线观看| 欧美极品aⅴ影院| 亚洲国产综合在线看不卡| 欧美不卡一区| 欧美91大片| 国产一区二区三区四区| 欧美sm重口味系列视频在线观看| 欧美婷婷六月丁香综合色| 欧美一区二区三区另类| 亚洲精品黄网在线观看| 久久在线精品| 亚洲高清av| 欧美精品18videos性欧美| 久久久www成人免费无遮挡大片| 亚洲国产美女精品久久久久∴| 久久综合国产精品台湾中文娱乐网| 久久婷婷国产综合国色天香| 亚洲人体大胆视频| 亚洲国产欧美一区二区三区久久| 国产亚洲精品综合一区91| 亚洲国产精品成人一区二区| 久久se精品一区精品二区| 国产亚洲网站| 国内一区二区三区在线视频| 加勒比av一区二区| 激情成人在线视频| 欧美激情国产日韩精品一区18| 欧美精品xxxxbbbb| 国产三级欧美三级日产三级99| 欧美另类99xxxxx| 国产欧美精品日韩区二区麻豆天美| 一区二区三区三区在线| 欧美另类高清视频在线| 日韩系列欧美系列| 99视频+国产日韩欧美| 亚洲欧美在线观看| 国产精品久久二区| 狠狠久久五月精品中文字幕| 久久在线播放| 欧美大片在线观看| 国产日韩专区在线| 国产精品一卡二卡| 亚洲欧美日韩国产成人| 欧美日韩国产va另类| 另类人畜视频在线| 亚洲激情图片小说视频| 欧美日韩在线一区二区三区| 欧美另类视频在线| 久久一二三国产| 亚洲视频一二| 欧美精品偷拍| 99re66热这里只有精品3直播| 欧美日韩视频在线观看一区二区三区| 西瓜成人精品人成网站| 国产欧美日韩另类一区| 国产一区日韩欧美| 91久久国产精品91久久性色| 亚洲精品国产精品久久清纯直播| 99国产精品99久久久久久| 国产精品高潮视频| 美女成人午夜| 欧美日韩亚洲一区在线观看| 一区一区视频| 尤物九九久久国产精品的特点| 国产精品国产三级国产aⅴ无密码| 玖玖视频精品| 国产午夜精品久久| 亚洲最新合集| 亚洲综合好骚| 亚洲国产免费看| 狂野欧美一区| 一本色道久久综合狠狠躁篇的优点| 欧美激情偷拍| 另类欧美日韩国产在线| 麻豆精品在线视频| 亚洲视频在线一区观看| 国产精品国产精品国产专区不蜜| 亚洲日本成人网| 亚洲精品乱码久久久久久久久| 欧美福利在线| 欧美色大人视频| 麻豆91精品91久久久的内涵| 欧美日韩精品一区二区三区四区| 欧美激情国产日韩| 亚洲免费福利视频| 亚洲欧美日韩中文视频| 夜夜夜精品看看| 午夜欧美理论片| 欧美日韩人人澡狠狠躁视频| 欧美色欧美亚洲另类七区| 亚洲一区二区视频在线观看| 理论片一区二区在线| 亚洲欧美视频一区| 欧美一区二区三区在线观看视频| 国产午夜精品一区二区三区视频| 激情一区二区| 欧美日韩另类字幕中文| 狠狠色狠狠色综合| 国产丝袜美腿一区二区三区| 国产日韩欧美在线观看| 国产综合色精品一区二区三区| 国产精品一区二区三区久久久| 亚洲开发第一视频在线播放| 国产日韩成人精品| 亚洲视频每日更新| 国产精品你懂的在线欣赏| 久久阴道视频| 一区二区三区在线观看视频| 亚洲影视在线| 亚洲国产精品嫩草影院| 久久久精品一区| 伊人久久男人天堂| 在线亚洲伦理| 亚洲六月丁香色婷婷综合久久| 欧美另类综合| 欧美电影在线观看完整版| 欧美精品激情在线观看| 国产乱码精品一区二区三区av| 欧美一区在线视频| 最新成人av网站| 国产精品一区二区三区免费观看| 亚洲欧洲99久久| 午夜精品久久久久久99热软件| 免费不卡中文字幕视频| 一区二区欧美视频|