最近又开始在xupv5-lx10t板子上基于microblaze移植petalinux了,贴一个前年写的文档吧。

弄得很花哨,一半都是虚的内容,务虚者必被虚名所害,说起来头头是道,什么都知道,做起来却能力不行:因为做事不认真,没有detail

oriented,一年前的我就是反面典型:

PetaLinux开发文档

目录

应用背景

PetaLinux是一款可以用于FPGA CPU软核上的嵌入式Linux操作系统,PetaLogix公司(http://www.petalogix.com/)为Xilinx公司MicroBlaze软核提供了良好的支持,使得PetaLinux能够在有MicroBlaze

CPU软核的FPGA上很好的运行。

PetaLinux基于Linux内核,是一种uClinux的企业化产品,我编译的是Linux

2.6.x内核版本,所以驱动程序可以直接使用Linux下的驱动程序。

操作系统知识

嵌入式操作系统

嵌入式系统是计算机系统的一种,因而嵌入式系统也可以分为软硬件两部分,和桌面计算机系统一样,嵌入式操作系统(Embedded

Operating

System,EOS)是嵌入式软件系统的核心部分。在一个完整的嵌入式系统中,嵌入式操作系统介于底层硬件和上层应用程序之间,它是整个系统中不可缺少的重要组成部分。嵌入式操作系统与传统操作系统的基本功能是一致的,即:首先嵌入式操作系统必须能正确、高效地访问和管理底层的各种硬件资源,很好地处理资源管理中的冲突;其次嵌入式操作系统要能为应用程序提供功能完备、使用方便、与底层硬件细节无关的系统调用接口。

uC/OS II

uC/OS II 是著名的源代码公开的实时内核,是专为嵌入式应用设计的,可用于8 位,16 位和 ,32

位单片机或数字信号处理器。它是在原版本的基础上做了重大改进与升级,并有了近十年的使用实践,有许多成功应用该实时内核的实例。

它的主要特点如下:

公开源代码:很容易就能把操作系统移植到各个不同的硬件平台上;

可移植性:绝大部分源代码是用C

语言写的,便于移植到其他微处理器上;

可裁剪性:有选择的使用需要的系统服务,以减少所需的存储空间;

占先式:完全是占先式的实时内核,即总是运行就绪条件下优先级最高的任务;

多任务:可管理64

个任务,任务的优先级必须是不同的,不支持时间片轮转调度法;

可确定性:函数调用与服务的执行时间具有其可确定性,不依赖于任务的多少;

实用性和可靠性:成功应用该实时内核的实例,是其实用性和可靠性的最好证据。

嵌入式Linux 系统

嵌入式 Linux 是日益庞大的Linux

家族中一个新成员,目前发展十分迅速,根据简单统计,目前正在开发的嵌入式项目约有一半选用嵌入式Linux

作为其操作系统。嵌入式Linux 秉承了Linux 家族的最大特点:开放性,因而其开发成本和可订制性非常出色,但是传统的Linux

不是一个实时操作系统,不太适合嵌入式应用,因此许多产商和爱好者开发了多种具有实时性的嵌入式Linux 系统。

BSP

概述

在嵌入式系统中,所谓BSP(Board Support

Package),就是为给定的板子提供特定操作系统支持的代码。是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP,一般包含一段引导启动代码(bootloader)以及板上所有器件的设备驱动程序,其中引导启动代码为操作系统启动提供最基本的支持。所以,BSP是和操作系统以及硬件设备驱动紧密联系的。

纯粹的BSP

所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。用户也可以添加自己的程序到BSP

中,但严格来说不应该算BSP,一般来说这种做法不建议。因为一旦操作系统能良好运行于最终的主板硬件后,BSP

也就固定了,不需要做任何改动。而用户自己在BSP 中的程序还会不断的升级更新,这样势必对BSP

有不好的影响,对系统造成影响,同时由于BSP 调试编译环境较差,也不利于程序的编译调试。

其实运行于PC 机上的windows 或linux 系统也是有BSP 的。只是PC 机均采用统一的X86

体系架构,这样一定操作系统(Windows,linux..)的BSP 相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS

在x86 上正常运行,所以在PC 机上谈论BSP

这个概念已没什么意义了。而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存(PPC,ARM,MIPS....),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP,即使同一种CPU,由于外设的一点差别(如外部扩展DRAM

的大小,类型改变),BSP 相应的部分也不一样。所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

BIOS

BSP 和PC 机主板上的BIOS 区别很大,BIOS

主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化…)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware

代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS

正常运行后,BIOS 的作用基本上也就完成了,这就是为什么更改BIOS 一定要重新启动。PC

机BIOS的作用更像是嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。BSP

是和操作系统绑在一起运行在主板上的,尽管BSP 的开始部分和BIOS 所做的工作类似,可是大部分和BIOS

不同,作用也完全不同。此外BSP 还包含和系统有关的基本驱动(串口,网口...),此外程序员还可以编程修改BSP,在BSP

中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP 中。而BIOS

程序是用户不能更改,编译编程的,只能对参数进行修改设置,只包含一些最基本的I/O 硬件驱动。

BSP 在开发中的位置和作用

BSP 开发处于整个嵌入式软件开发的前期,是后面系统上应用程序能够正常运行的保证。大概步骤如下:

硬件主板研制,测试。

操作系统的选定,BSP 编程。

上层应用程序的开发。

BSP 在硬件和操作系统以及上层应用程序之间。所以这就要求BSP 程序员对

硬件,软件和操作系统都要有一定的了解,这样才能做好BSP 编程。

开发流程

各种文件解释

在ISE design suite的EDK工具中,用BSB(Base System

Builder)创建一个工程,最后编译得到的文件download.bit是来对FPGA进行烧写的bit流文件。在Linux中用交叉编译工具编译得到的操作系统景象文件image.bin是操作系统镜像的二进制文件,烧进内存某一地址,若指令从该地址开始执行,那么操作系统就会运行。如果烧进Flash,还需要bootloader来引导,例如FS-Boot,U-Boot,bootloader初始化硬件,把操作系统镜像文件从Flash复制到内存并开始执行。

操作流程

开发环境

需要安装ISE开发环境,尤其是EDK,版本根据PetaLinux的支持情况,可以在PetaLinux文件包解压后的/hardware/reference-design目录中的某个工程中,查看system.mhs知道最新支持的EDK版本号。

需要有一个VMWare虚拟机软件,安装一个Linux系统,并且拥有root超级用户权限,我用的是RedHat

Enterprise Linux 4,推荐使用CentOS。

PetaLinux开发文件包

从Petalogix公司网站上通过.edu邮箱申请University

Program下载PetaLinux开发文件包petalinux-v0.40-final.tar.gz。

将该文件拷贝到VMWare虚拟机RedHat Enterprise Linux

4的/home/petalinux目录下(不要在虚拟机和Windows的共享文件夹下),解压,可以点击右键选择Extract

Here,也可以输入

tar -zxvf petalinux-v0.40-final.tar.gz

命令解压。

解压后在petalinux-v0.40-final目录下有个文件,settings.sh,设置环境变量等:

source settings.sh

新建一个platform xupv5-lx110t-103:

petalinux-new-platform -v Xilinx -p xupv5-lx110t-103 -k 2.6

source

setting.sh后,可以直接执行tools\common\petalogix\bin目录中的程序。petalinux-new-platform就是其中的一个。这个命令会在software\petalinux-dist\vendors目录中创建一个新的platform。执行这个命令后可以在make

menuconfig时看到并选择新建的platform。

配置platform:

make menuconfig

在 Vendor Product Selection 中选择Vendor = Xilinx, Products =

xupv5-lx110t-103(在platform选项最下面),依次选择exit推出,点yes。

新建EDK工程

配置

在EDK工程目录中新建目录xupv5-lx110t-103,配置两个文件夹:

E:\EDA\Xilinx\10.1\EDK\board\Xilinx\boards\EDK-XUPV5-LX110T-Pack

E:\EDA\Xilinx\10.1\EDK\sw\lib\bsp\petalinux_v1_00_b

EDK-XUPV5-LX110T-Pack

是开发版配置文件夹,从网上下载,petalinux_v1_00_b是PetaLinux配置文件,在解压后文件的

E:\petalinuks\petalinux-v0.40-final\hardware\edk_user_repository\PetaLogix\bsp\petalinux_v1_00_b目录下。

新建工程

在EDK新建工程xupv5-lx110t-103,选择开发板xupv5-lx110t,配置硬件:串口,Flash,DDRram,1

timer等。

图 31 工程system

view

双击MicroBlaze_0选择divider和barrier shifter

在Port选项,debug-module,interruption选择new

connection,在xps_intc_0中加入debug_interrupt_module,详细参考赵峰《FPGA上的嵌入式系统设计实例》。

在EDK的software中点击software platform

settings,OS选择PetaLinux,drivers中选择相应memory。确定。

Software选项点击generate library and BSPs。

这样,在F:\ISE_Projects\xupv5-lx110t-103\microblaze_0\libsrc\petalinux_v1_00_b目录下生成配置文件:

Kconfig.auto,auto-config.in。

把工程文件 xupv5-lx110t-103 复制到

/home/petalinux/petalinux-v0.40-final/hardware/user-platforms/目录下,在该目录中输入命令:

petalinux-copy-autoconfig -v Xilinx -p

xupv5-lx110t-103 -k 2.6

petalinux-copy-autoconfig命令需要在EDK工程目录中执行。这个工具可以把libgen生成的microblaze_0/libsrc/Kconfig.auto和autoconfig.in转换成linux格式,并拷贝到当前活跃的platform下(比如

software/linux-2.6.x/arch/Microblaze/platform/ xupv5-lx110t-103

)。它是根据在make menuconfig中选择的vendor/platform来拷贝的。

编译操作系统内核

在/home/petalinux/petalinux-v0.40-final/software/petalinux-dist目录下输入:

make menuconfig

Select Customize Kernel Settings

and Customize Vendor/User Settings

选择exit-> yes

Customize Kernel Settings -> Device Drivers

-> Network device support -> Ethernet

(1000Mbit) -> Select Xilinx 1000Mbit EMACLITE

support

Customize Kernel Settings -> Device Drivers

-> Character Device support -> Serial

devices ->select Xilinx UARTLITE and console on

Xilinx UARTLITE

Customize Vendor/User Settings -> System Settings

-> Network Address

Customize Vendor/User Settings -> System Settings

-> Flash Partition Table -> Partition

3 Size = 80000

Exit, 退出

make clean 清除上回编译镜像文件

make dep 建立文件关联

make all 编译

不过完全命令(默认)应该是

make ARCH=microblaze CROSS_COMPILE=microblaze-uclinux- -C

linux-2.6.x menuconfig

make ARCH=microblaze CROSS_COMPILE=microblaze-uclinux- -C

linux-2.6.x dep

make ARCH=microblaze CROSS_COMPILE=microblaze-uclinux- -j1 -C

linux-2.6.x || exit 1

ARCH是cpu架构,$ CROSS_COMPILE gcc是交叉编译器,如microblaze-uclinux-gcc,在

/home/petalinux/petalinux-v0.40-final/tools/linux-i386/microblaze-uclinux-tools/bin

下。

编译成功后,会在/home/petalinux/petalinux-v0.40-final/software/petalinux-dist/images目录下产生系统镜像文件image.bin等。

如果编译错误,要更改,可能是网卡、Uboot的问题,menuconfig时去掉这些支持就行。

如果出现错误:

cp: `/tftpboot': specified destination directory does not

exist

Try `cp --help' for more information.

make[2]: *** [image] Error 1

有时在XUPV5-LX110T开发板编译会出现会出现网卡不支持的错误,是因为在EDK新建工程时硬核网卡没有选择DMA支持。

下载文件

复制images目录到Windows

F:\ISE_Projects\xupv5-lx110t-103中,先复制到共享文件夹

cp -r $PETALINUX/software/petalinux-dist/images

/mnt/hgfs/E/petalinux/xupv5-lx110t-nomac/

用EDK下载download.bit

打开XMD,连接Microblaze

dow –data images/image.bin

0x90000000 (DDR RAM 起始地址)

con 0x90000000

(此时打开Terminal,设置好波特率,应该就可以看到正常启动了)

Linux驱动开发

大部分常用驱动在meke menuconfig时就可以选择添加,然后编译到系统镜像文件中。

Bootloader

使用tftp服务器是因为要用到UBOOT下载镜像到FLASH,这样就不用每次都手动下载镜像了,如果你打算每次下载一次镜像也是可以的。

而bootloader,如果是从Flash中读取镜像启动的话,可以使用Petalinux包中hardware目录中的fs-boot这个程序就可以了。

至于如果想在Linux中增加驱动模块或是程序的话,那么可以在Linux下使用petalinux-new-app或petalinux-new-module两个命令分别添加,并进行相应的操作,在参考文献2中的lab.doc中有介绍,就是这个文档稍微有点乱,可能看起来比较吃力一点。

参考文献

i  Xilinx大学合作计划指定教材  《FPGA

上的嵌入式系统设计实例》,赵峰,西安电子科技大学出版社,2008

ii  2008 PetaLogix Qld Pty Ltd 1 of 36 XUP

Professors’ Workshop

Embedded Linux for the Xilinx MicroBlaze Soft Processor

lab2.1

《Lab 2.doc》

lan口配置 petalinux_PetaLinux开发文档相关推荐

  1. lan口配置 petalinux_PetaLinux安装及使用

    Description/说明 PetaLinux版本:2016.4 操作系统版本:Ubuntu 16.04(如使用Ubuntu,墙裂建议使用16.04,其他版本官方手册并没有标明支持,可能会出现莫名其 ...

  2. Unity5 + java开发大唐诛仙手游源代码,含工具,配置表,和开发文档。

    Unity5 + java开发大唐诛仙手游源代码,含工具,配置表,和开发文档. 大唐诛仙是一款修仙题材的RPG战斗手游,为你还原真实的仙侠世界,多种游戏角色任你挑选,可以自由加入不同的门派,海量时尚炫 ...

  3. tx2 fpga pcie无法读写_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  4. ubuntu arm qt_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  5. DotNet 项目开发文档的自动生成和相关工具的使用

    在 VS.Net 的 IDE 中对C#提供了一些可以自动生成的 XML 注释,使用这些注释可以对代码中定义的对象进行说明.注解:通过设置项目属性,在生成项目时,可以让VS.Net自动的将这些注释信息输 ...

  6. 开源轻量级办公系统Sandbox介绍以及配套开发文档连载

    1.Sandbox介绍 Sandbox是一个基于django框架开发的轻量级办公平台,主要模块有:权限控制.资产(库存)管理.设备管理.客户信息管理和工单流程管理,其目的在于建立一套规范化.统一化和清 ...

  7. python软件开发-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  8. CRMEB开发文档及目录结构

    CRMEB 开发文档及目录结构 官网 CRMEB v2.6开源地址:http://link.crmeb.net/u/lingting 完整帮助文档:http://help.crmeb.net QQ群: ...

  9. .NET6使用DOCFX根据注释自动生成开发文档

    本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...

最新文章

  1. 胥康成都行——ETC社区将会是全球最具有活力和影响力的超级社区
  2. Session的实现与存储
  3. 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
  4. java cache-control_详解浏览器Cache-Control缓存策略
  5. 微信上线青少年模式,开启后这些功能无法使用
  6. mongoDB's Optimization example
  7. 【Python】改变对象的字符串显示
  8. 最新高通平台驱动开发参考文档
  9. Linux编程中C语言头文件位置
  10. Arduino UNO测试BME280温湿度气压传感器
  11. error LNK1123: failure during conversion to COFF: file invalid or corrupt
  12. 百度生成短链接(Get请求方式)
  13. 开发者的多媒体梦工厂: AV Pipeline Kit究竟是什么?
  14. linux文件读取程序,Linux系统编程:文件的读取写入
  15. 测绘资质高性能数据服务器,测绘资质分级标准2020年
  16. WebLogic(12C)——WLST
  17. oracle ebs 请求 待定,EBS 并发请求 计划 fnd_conc_release_classes(示例代码)
  18. 摩托罗拉被google收购了
  19. python实现图(卖芒果)
  20. 电子专业 常见面试题 (四)

热门文章

  1. 错误:cc1: error: unrecognized command line option “-m32”
  2. dta乱码_DTA是自动化索引的出色工具
  3. sql 除以_避免SQL除以零错误的方法
  4. Boostnote跨平台 Markdown 编辑器
  5. ASP.NET MVC4中的异步控制器
  6. wait 和 sleep 区别
  7. 表单中的日期 字符串和Javabean中的日期类型的属性自动转换
  8. node.js中实现同步操作的3种实现方法
  9. Android中CursorLoader的使用、原理及注意事项
  10. structs中国际化小结