本文转载自: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 啰。
糖果屋联手Augmently开发一款应用程序 为游客们提供身临其境的AR体验
苹果7图片泄露 深蓝色iPhone7Plus高清谍照曝光
高通技术公司发布骁龙X65 5G调制解调器及射频系统
简单分析STM32和51的区别
宏展科技通过ISO三体系认证,开启新篇章,共赴新征程!
Zybo board 开发记录: 使用Yocto建立系统
为满足NAND Flash市场增加的需求 SK海力士宣布将建新存储器晶圆厂
Micro LED产品已经在加速进程及运用
印制电路板和SMT基础知识培训
代币经济学与区块链项目之间有什么关联
2020年2月全国汽车市场的销量情况分析
紫光5G超级SIM卡的详细介绍
华为腾讯为用户数据起争执,专家:两家都不是合法拥有者 吃瓜群众的隐私怎么办
电热元件都有哪些分类_电热元件种类
京瓷在华工厂引进太阳能发电系统
区块链技术的普及和应用,或将会改变世界的经济治理体系
为什么需要家庭安全物联网,它有什么作用
我国怎样面对金融科技带来的挑战
关于几种常用加密算法比较
中国电信迎来秋季丰收时刻,新兴业务拉动增长