當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]鑒于越來越多使用者將Linux移植到晶心平臺(Andes Embedded)上(AndesCore N12或N10),本文的目的在協(xié)助使用者快速、有效率的將Linux 移植到自建的FPGA板子上(CPU是AndesCor

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

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

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

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

1. 開發(fā)環(huán)境與程序

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

 

圖表 1 Linux 移植的開發(fā)流程

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

1.1 晶心版Linux原始碼

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

1.2 工具鏈

此晶心平臺選用的工具鏈?zhǔn)茿ndeSoft™的nds32le-linux-glibc-v2。

1.3 FPGA 板子與 netlist

FPGA板子是晶心AndeShape的 XC5 開發(fā)板。Netlist 為晶心AndesCore的N10 production version.

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

移植平臺

晶心平臺

說明

Linux原始碼

linux-2.6.tgz

linux-2.6.tgz

使用者應(yīng)從晶心版原始碼進(jìn)行開發(fā)

工具鏈

nds32le-linux-glibc-v2

nds32le-linux-glibc-v2

使用者如用新版的AndesCore™,可更換新的對應(yīng)工具鏈

FPGA板子

使用者設(shè)計

XC5

Netlist

使用者生成

N10 production version

圖表 2平臺與晶心平臺的比較表

2. Boot loader

如果使用者有自己慣用的boot loader,可以使用慣用的boot loader以加快開發(fā)時程,如果沒有boot loader的開發(fā)經(jīng)驗,可以選用u-boot作為系統(tǒng)的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后再執(zhí)行的u-boot版本。直接boot up不需要其他軟件協(xié)助的U-boot版本(ROM版)是比較符合使用者的需要,晶心版的u-boot使用方法請參考BSP310 User Manual。如果要ROM版的u-boot需要在BSP310中的u-boot軟件做patch,其指令如下:

# patch -p1  patching file arch/nds32/cpu/n1213/ag101/cpu.c

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

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

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

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

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

patch 完成的u-boot source code 可以產(chǎn)生ROM版的u-boot image,直接開機(jī)后的執(zhí)行結(jié)果如圖表3所示。

 

[!--empirenews.page--]

圖表 3 u-boot 執(zhí)行結(jié)果圖

3. 調(diào)試環(huán)境

在移植Linux到晶心平臺之前,先架設(shè)好調(diào)試的環(huán)境,尤其對底層Linux原始碼的移植,有莫大的幫助,在 printk尚未正常運(yùn)作前,需依靠AndeShape的AICE與 AndeSoft的GDB來進(jìn)行調(diào)試。

3.1設(shè)定Linux kernel 調(diào)試選項

Linux Kernel 需要設(shè)定一些調(diào)試選項,才能順利的運(yùn)用AndeSoft的GDB進(jìn)行調(diào)試。晶心平臺中Linux kernel 調(diào)試選項設(shè)定如圖表4所示,增加這些選項會增加kernel 映像文件的空間,如果空間占用過大以至于不符合設(shè)計需求時,可在調(diào)試工作完畢后將調(diào)試選項關(guān)閉以節(jié)約不必要的空間浪費(fèi)。

 

圖表 4設(shè)定Kernel hacking 中調(diào)試選項勾選

3.2 Linux kernel 調(diào)試的程序

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

3.2.1. 編譯鏈結(jié)成映像檔

設(shè)定好AndeSoft的 cross-compiler 路徑后,利用下列指令經(jīng)由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透過網(wǎng)絡(luò)(socket)與AICE連接至FPGA板子,進(jìn)行調(diào)試的工作,示范指令如下:

#ddd --debugger nds32le-linux-gdb vmlinux

gdb>target remote 10.0.2.164:1234

其中IP值 10.0.2.164是一個應(yīng)用范例,用戶可依環(huán)境實際IP值進(jìn)行設(shè)定。環(huán)境設(shè)定完成后,可以開始進(jìn)行調(diào)試工程。

4. 移植Linux至晶心平臺關(guān)鍵點經(jīng)驗傳承

4.1 Kernel加載程序調(diào)試實作

kernel加載程序目的將kernel主程序進(jìn)行解壓縮并加載正確位置,此程序與kernel主程序是兩個不同程序,但會一起包在zImage中只是kernel加載程序會attached在zImage的前面。調(diào)試時需 file不同的 ELF file才能進(jìn)行正確的調(diào)試工作,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 調(diào)試實作

kernel加載程序執(zhí)行完畢后會跳到kernel主程序執(zhí)行。進(jìn)入點是arch/nds32/kernel/head.S的assembly code執(zhí)行完后會進(jìn)入 kernel 的主要函數(shù) “start_kernel”。

4.2.1. RAM offset patch

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

4.2.2. PA/VA remap table

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

4.2.3. Kernel 解壓縮與software breakpoint

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

4.2.4. PA/VA 觀念說明與調(diào)試要領(lǐng)

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

la $lp, __mmap_switched

mtsr $lp, $IPC

iret

執(zhí)行完iret后,系統(tǒng)就會從PA轉(zhuǎn)成VA,MMU translation status從translation off轉(zhuǎn)為translation on在此分界處調(diào)試規(guī)則如下所述,如果觀念不清楚及容易產(chǎn)生調(diào)試時的錯誤,請務(wù)必牢記。

4.2.4.1. MMU translation off 時期調(diào)試

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

4.2.4.2. MMU translation on 時期調(diào)試

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

4.2.5. 移植Linux的基礎(chǔ)組件

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

5. 結(jié)語

Linux操作系統(tǒng)運(yùn)作在晶心平臺已有多年的時間。各式各樣的Linux軟件運(yùn)作在晶心平臺不計其數(shù)。皆可證明Linux操作系統(tǒng)運(yùn)作結(jié)合晶心平臺是一個穩(wěn)定與成熟的產(chǎn)品,只要能明了熟悉Linux 移植的技巧與重點,使用晶心平臺開發(fā)Linux的產(chǎn)品將是一件愉快與簡單的工作。[!--empirenews.page--]

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉