如何移植Linux到晶心平臺(tái)
鑒于越來越多使用者將Linux移植到晶心平臺(tái)(Andes Embedded™)上(AndesCore™ N12或N10),本文的目的在協(xié)助使用者快速、有效率的將Linux 移植到自建的FPGA板子上(CPU是AndesCore™ 的 N12或N10)。筆者曾協(xié)助多家公司工程師進(jìn)行Linux移植到晶心平臺(tái)的工作,將Linux移植過程容易遭遇的問題與盲點(diǎn)進(jìn)行實(shí)際說明,期望能對(duì)使用者有所幫助,也希望讀者不吝指教提供您寶貴的意見。
本文引用地址:http://www.ex-cimer.com/article/190569.htm在進(jìn)行Linux移植時(shí)會(huì)發(fā)現(xiàn),使用者的晶心平臺(tái)可能會(huì)有各式各樣的組合,除了CPU是使用N12或N10外,使用者對(duì)于其他的周邊(如RAM,ROM,Timer…..)之搭配各有所好,為了有系統(tǒng)性說明Linux移植的要領(lǐng),將選定一明確的硬件,軟件,與開發(fā)工具(toolchain)環(huán)境做演練說明,除了讓讀者可以實(shí)作明了文中的敘述,當(dāng)使用者的周邊非原設(shè)計(jì)的硬件(用戶自己的IP)時(shí),可以運(yùn)用移植的基本原則,更改希望移植IP的Linux驅(qū)動(dòng)程序,其他原始碼不動(dòng),逐一的將使用者的周邊驅(qū)動(dòng)程序移植到晶心的平臺(tái)。
在Linux移植過程中,使用者須建立一基本觀念,那就是整個(gè)Linux OS可分為兩部分,第一部分是與硬件相關(guān)的HW dependence code,這部分的程序代碼會(huì)因?qū)?yīng)不同的硬件而造成軟件部分需做不同程度的改寫;第二部份是與硬件無關(guān)的generic code,這部分的程序代碼與硬件無關(guān),純軟件運(yùn)作,不會(huì)因平臺(tái)(Andes, X86, Arm..)的改變而有差別。移植Linux的工程師第一步需要能區(qū)分出哪一部分程序代碼是 HW dependence code,另外部分的程序代碼就是generic code,如果在這階段對(duì)程序代碼判斷錯(cuò)誤(HW dependence code/generic code)會(huì)拖延Linux移植的進(jìn)程并增加調(diào)試時(shí)的困難。
Linux移植到晶心平臺(tái)過程中,首先須先做到Linux基礎(chǔ)架構(gòu)移植成功。在調(diào)試時(shí),Linux的基礎(chǔ)架構(gòu)組件是CPU,timer,interrupt與UART,當(dāng)CPU與這3項(xiàng)周邊移植成功后,scheduler可以運(yùn)行了,printk也可以運(yùn)行了Linux系統(tǒng)已經(jīng)可以正常的運(yùn)作了。接下來的工作只需將需移植的驅(qū)動(dòng)程序一個(gè)一個(gè)移植即可,基礎(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)試也變得很簡(jiǎn)單,具體得作法,后文會(huì)詳細(xì)說明。本文敘述重點(diǎn)是如何在晶心平臺(tái)上建立Linux基礎(chǔ)架構(gòu),至于個(gè)別Linux 驅(qū)動(dòng)程序的移植,坊間有許多的書在介紹,本文就不多加贅述。
1. 開發(fā)環(huán)境與程序
使用者開始進(jìn)行Linux移植到晶心平臺(tái),首先須先選定一版晶心的Linux原始碼作為基準(zhǔn)再進(jìn)行軟件移植,修改原始碼以符合使用者的開發(fā)平臺(tái),經(jīng)由工具鏈的compile與link所產(chǎn)生的Linux的映像文件,再放到FPGA板上以驗(yàn)證程序編寫的正確與否,依此開發(fā)程序:軟件編寫->FPGA板驗(yàn)證,再回到軟件編寫程序直到所有周邊IP在FPGA板上驗(yàn)證完全,Linux 移植才完成,如圖表 1所示,Linux移植過程中,AICE調(diào)試可以有效加快Linux移植的速度。
本文選定一組Linux原始碼、工具鏈、FPGA 板和netlist作為晶心的平臺(tái)(于1.1,1.2,1.3中所述)進(jìn)行l(wèi)inux的移植。讀者可將自己的平臺(tái)與晶心的平臺(tái)做類比,從而有效縮短產(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 工具鏈
此晶心平臺(tái)選用的工具鏈?zhǔn)茿ndeSoft™的nds32le-linux-glibc-v2。
1.3 FPGA 板子與 netlist
FPGA板子是晶心AndeShape™的 XC5 開發(fā)板。Netlist 為晶心AndesCore™的N10 production version.
移植平臺(tái)是指使用者要移植Linux的平臺(tái),也就是移植Linux的目標(biāo)平臺(tái)。將移植平臺(tái)與晶心平臺(tái)的比較列表如下: (其中所列之軟件皆屬于BSP310中之套件)。
移植平臺(tái) | 晶心平臺(tái) | 說明 | |
Linux原始碼 | linux-2.6.tgz | linux-2.6.tgz | 使用者應(yīng)從晶心版原始碼進(jìn)行開發(fā) |
工具鏈 | nds32le-linux-glibc-v2 | nds32le-linux-glibc-v2 | 使用者如用新版的AndesCore™,可更換新的對(duì)應(yīng)工具鏈 |
FPGA板子 | 使用者設(shè)計(jì) | XC5 | |
Netlist | 使用者生成 | N10 production version |
移植平臺(tái) | 晶心平臺(tái) | 說明 | |
Linux原始碼 | linux-2.6.tgz | linux-2.6.tgz | 使用者應(yīng)從晶心版原始碼進(jìn)行開發(fā) |
工具鏈 | nds32le-linux-glibc-v2 | nds32le-linux-glibc-v2 | 使用者如用新版的AndesCore™,可更換新的對(duì)應(yīng)工具鏈 |
FPGA板子 | 使用者設(shè)計(jì) | XC5 | |
Netlist | 使用者生成 | N10 production version |
移植平臺(tái) | 晶心平臺(tái) | 說明 | |
Linux原始碼 | linux-2.6.tgz | linux-2.6.tgz | 使用者應(yīng)從晶心版原始碼進(jìn)行開發(fā) |
工具鏈 | nds32le-linux-glibc-v2 | nds32le-linux-glibc-v2 | 使用者如用新版的AndesCore™,可更換新的對(duì)應(yīng)工具鏈 |
FPGA板子 | 使用者設(shè)計(jì) | XC5 | |
Netlist | 使用者生成 | N10 production version |
移植平臺(tái) | 晶心平臺(tái) | 說明 | |
Linux原始碼 | linux-2.6.tgz | linux-2.6.tgz | 使用者應(yīng)從晶心版原始碼進(jìn)行開發(fā) |
工具鏈 | nds32le-linux-glibc-v2 | nds32le-linux-glibc-v2 | 使用者如用新版的AndesCore™,可更換新的對(duì)應(yīng)工具鏈 |
FPGA板子 | 使用者設(shè)計(jì) | XC5 | |
Netlist | 使用者生成 | N10 production version |
評(píng)論