Zybo board 开发记录: 使用Yocto建立系统

FPGA/ASIC技术

201人已加入

描述

本文转载自:coldnew's blog

在 zybo board 开发记录: 执行 Linux 操作系统 一文中,我们提到了如何自行编译 u-boot、Linux kernel、busybox 来让 Zybo Board 可以开机进到 SD 卡上的 Linux 系统。这一次,我们要来谈谈怎样使用 Yocto Project来建立 Zybo board 的 Linux 系统。

Yocto Project 是近年来各大 SoC 商以及开发板商皆参与的 Linux 系统构件工具,透过 Yocto Project 的协助,使用者可以针对自己的需求构件想要的映像档(image)或是 Root File System,和 Yocto 类似功能的工具则是buildroot 。

本文将以 Zybo Board 作为目标开发板,示范如何使用 Yocto 来构件他的系统。

预先准备

根据你使用的 Linux 发行板的不同,你需要安装一些套件,这边列出一些发行板的信息,详细请参考 

Debian/Ubuntu
coldnew@debian ~ $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat

Fedora
coldnew@fedora ~ $ sudo dnf install gawk make wget tar bzip2 gzip python unzip perl patch diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue socat findutils which

Gentoo
coldnew@gentoo ~ $ emerge -v dev-vcs/git dev-util/diffstat app-arch/unzip sys-apps/texinfo app-admin/chrpath media-libs/libsdl2 sys-apps/iproute2 x11-terms/xterm net-nds/rpcbind

如果你和我一样,使用 Gentoo Linux 的话,在 Gentoo Linux 下要确认你使用的是 Python 2.7
coldnew@gentoo ~ $ eselect python set python2.7

eselect python list
Available Python interpreters:
[1] python2.7 *
[2] python3.2
[3] python3.3

python
Python 2.7.5 (default, Oct 19 2013, 22:52:27)

格式化 MicroSD 卡
在这次的开发中,我们要设定 MicroSD 卡片成两个分区,第一个是 fat32 格式,第二个则使用 ext4 格式,若不会使用 fdisk 命令的话,可以透过 gparted 来进行格式化,以下是我格式化卡片的范例 (8GB 卡片)。

下载 Poky

在开始用 Yocto Project 之前,我们需要下载 Poky, Poky 是 Yocto 的构件系统,基本上我们会用到的东西都会在 poky 文件夹内

注意到我们这边切换到 krogoth 这个分支,Yocto 里面不同的分之(branch) 代表了不同版本。
coldnew@gentoo ~ $ git clone git://git.yoctoproject.org/poky -b krogoth

好了后,进入到 poky 文件夹
coldnew@gentoo ~/poky $ cd poky

下载 meta-xilinx
Yocto 对于不同的 SoC 厂商,会有提供不同的 layer 来对特定的开源程序加上合适的 patch,或是添加不同 SoC 厂各自需要的韧体(firmware),以及各开发板特定的设定。在 Xilinx 平台上,我们需要下载 meta-xilinx ,我们需要的 kernel 以及 Zybo board 的设定信息都在里面。

这边一样切换到 krogoth 这个分支(branch)
coldnew@gentoo ~/poky $ git clone git://github.com/Xilinx/meta-xilinx -b krogoth

切换到编译用目录
接下来,我们将透过 source 指令暂时修改当前 shell 的环境变量,并切换到 build 文件夹
coldnew@gentoo ~/poky $ source oe-init-build-env build
You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to, for
example, select a different MACHINE (target hardware). See conf/local.conf
for more information as common configuration options are commented.

You had no conf/bblayers.conf file. This configuration file has therefore been
created for you with some default values. To add additional metadata layers
into your configuration please add entries to conf/bblayers.conf.

The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:

For more information about OpenEmbedded see their website:

###
Shell environment set up for builds. ###

You can now run 'bitbake '

Common targets are:
core-image-minimal
core-image-sato
meta-toolchain
meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86'

默认的目标机器是 qemux86 因此我们需要修改一下,不过先看一下当前目录结构
coldnew@gentoo ~/poky/build $ tree .
.
└── conf
├── bblayers.conf
├── local.conf
└── templateconf.cfg

1 directory, 3 files

我们首先要修改 conf/bblayers.conf ,在上面添加我们刚刚下载的 meta-xilinx ,修改完会像这样
#
POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
#
changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
/home/coldnew/poky/meta \
/home/coldnew/poky/meta-poky \
/home/coldnew/poky/meta-yocto-bsp \
/home/coldnew/poky/meta-xilinx \
"

接下来,修改 conf/local.conf ,这份档案可以用来设定要编译的目标机器,在这边,我们将目标机器改成zybo-linux-bd-zynq7
MACHINE ??= "zybo-linux-bd-zynq7"

都改好了后,就可以开始准备编译了
编译 core-image-minimal

Yocto 下有许多预设的 image 可以进行编译,其中最基本的 image 就是 core-image-minimal 了,里面只会包含一些几本的组件而已,我们可以透过他来确认我们编译出来的 rootfs 是否能用。
coldnew@gentoo ~/poky/build $ bitbake core-image-minimal
Parsing recipes: 100% |#######################################################################################################################| Time: 00:01:03
Parsing of 883 .bb files complete (0 cached, 883 parsed). 1313 targets, 71 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "1.30.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "Gentoo-2.3"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "zybo-linux-bd-zynq7"
DISTRO = "poky"
DISTRO_VERSION = "2.1.1"
TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard cortexa9"
TARGET_FPU = "hard"
meta
meta-poky
meta-yocto-bsp = "krogoth:aad7166704021d82ad3a5ec468552f8f10360d41"
meta-xilinx = "krogoth:dcd1c218f943c3657b138cb05012c90c65f32a35"

NOTE: Fetching uninative binary shim from
NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
Currently 4 running tasks (78 of 2127):
0: gcc-source-5.3.0-5.3.0-r0 do_unpack (pid 10582)
1: m4-native-1.4.17-r0 do_configure (pid 14097)
2: binutils-cross-arm-2.26-r0 do_unpack (pid 14533)
3: glibc-initial-2.23-r0 do_fetch (pid 15428)

接下来因为这是第一次编译,Yocto 需要下载原始码以及进行编译,会花很多时间,所以这时候可以去睡个觉或是看看书等它编译完成,第二次编译后会因为有快取机制 (cache),就不须要花这样多的时间来进行编译啰~

编译好了以后,我们切入到 tmp/deploy/images/zybo-linux-bd-zynq7/ 文件夹,里面有的就是我们需要的档案
coldnew@gentoo ~/poky/build $
ls tmp/deploy/images/zybo-linux-bd-zynq7/
bitstream modules--4.4-xilinx+git0+89cc643aff-r0-zybo-linux-bd-zynq7-20160910030958.tgz
bitstream-+gitAUTOINC+63ca49fe02-r0.bit modules-zybo-linux-bd-zynq7.tgz
boot.bin README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
boot.bin-zybo-linux-bd-zynq7 u-boot-dtb.img
boot.bin-zybo-linux-bd-zynq7-v2016.03+gitAUTOINC+df61a74e68-r0 u-boot.elf
core-image-minimal-zybo-linux-bd-zynq7-20160910030958.rootfs.cpio u-boot-zybo-linux-bd-zynq7.elf
core-image-minimal-zybo-linux-bd-zynq7-20160910030958.rootfs.cpio.gz.u-boot u-boot-zybo-linux-bd-zynq7.img
core-image-minimal-zybo-linux-bd-zynq7-20160910030958.rootfs.manifest u-boot-zybo-linux-bd-zynq7-v2016.03+gitAUTOINC+df61a74e68-r0.elf
core-image-minimal-zybo-linux-bd-zynq7-20160910030958.rootfs.tar.gz u-boot-zybo-linux-bd-zynq7-v2016.03+gitAUTOINC+df61a74e68-r0.img
core-image-minimal-zybo-linux-bd-zynq7.cpio uImage
core-image-minimal-zybo-linux-bd-zynq7.cpio.gz.u-boot uImage--4.4-xilinx+git0+89cc643aff-r0-zybo-linux-bd-zynq7-20160910030958.bin
core-image-minimal-zybo-linux-bd-zynq7.manifest uImage-zybo-linux-bd-zynq7.bin
core-image-minimal-zybo-linux-bd-zynq7.tar.gz zybo-linux-bd-zynq7.dtb
download.bit

我们将以下这些档案复制到 SD 卡的第一个分区
bitstream boot.bin u-boot-dtb.img uImage zybo-linux-bd-zynq7.dtb

接下来,在 SD 卡的第一个分割区 (fat32) 建立 uEnv.txt 档案,用来告诉 u-boot 开机的方式
kernel_image=uImage
devicetree_image=zybo-linux-bd-zynq7.dtb
bootargs=root=/dev/mmcblk0p2 rw rootwait
uenvcmd=fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && bootm 0x3000000 - 0x2A00000

好了后,将 core-image-minimal-zybo-linux-bd-zynq7.tar.gz 解压缩到 SD 卡的第二个分割区
coldnew@gentoo /tmp/sdc2 $ sudo tar xvf ~/poky/build/tmp/deploy/images/zybo-linux-bd-zynq7/core-image-minimal-zybo-linux-bd-zynq7.tar.gz

如果你需要 kernel modules 的话,将 modules-zybo-linux-bd-zynq7.tgz 解压到 SD 卡的第二个分割区
coldnew@gentoo /tmp/sdc2 $ sudo tar xvf ~/poky/build/tmp/deploy/images/zybo-linux-bd-zynq7/modules-zybo-linux-bd-zynq7.tgz

至此,我们 SD 卡开机的准备已经完成!!

测试开机与结果
是时候来测试结果了,要注意到你的 Zybo Board 的 JP5 要设定成下面这样,这样给电时,Zynq 才会读取 SD 卡上面的 u-boot 并将比特流 (bitstream) 刻录到 FPGA 中。

插入刚刚建立好的 SD 卡,并提供电源后,我们可以使用可以接收 UART 相关的程序,如 gtkterm、teraterm、screen、emacs 等,启动它并开启 /dev/ttyUSB1 后,设定 baudrate 为 115200 ,就可以看到开机并进入到 rootfs 啰。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分