鉴于越来越多运用者将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移植的速度。

图表 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
图表 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 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 能够发生ROM版的u-boot image,直接开机后的履行成果如图表3所示。
