yocto

什么是yocto

Yocto是一个开源项目,可以帮助开发人员创建开源嵌入式产品的定制系统,yocto提供了灵活的配置开源环境方法和工具,使所有嵌入式开发人员可以通过共享的技术,软件堆栈,配置和用于创建这些定制Linux映像的最佳协作通道。

yocto学习的方法论

1、尽可能的使用git获取yocto项目
2、有些项目yocto已经提供了layer,可以直接拿过来使用。
3、根据厂商提供的资料或者yocto官方提供的需要不断试错,尽可能找到适合你项目的layer
4、不要把所有的内容放到一个layer下面,以免出现问题无法查找。
5、不要轻易去修改已经在poky下存在的layer。尽量所有的工作都在自己创建的layer下完成
6、熟悉创建工程的流程,以便解决开发过程遇到的麻烦
目前开发一个layer的流程如下:

  • 1、获取源码
  • 2、解压,展开源码包
  • 3、打补丁或者增加新的功能
  • 4、配置编译环境
  • 5、编译
  • 6、验证
  • 7、复制目标文件到目标目录中
  • 8、打包文件用于安装

yocto构建一个虚拟机的过程

1、开发系统环境:

Ubuntu18.04
上面需要安装的工具git、tar、python3.0、gcc

2、下载yocto的项目

$ git clone git://git.yoctoproject.org/poky
$ cd poky
$ git fetch –tags

切换到对应的版本

git checkout tags/yocto-3.2.2 -b my-yocto-3.2.2

3、编译镜像文件

cd poky
byd@ubuntu:/media/C/Learn/poky$ ls
bitbake        LICENSE               MEMORIAM      meta-openembedded  meta-ti            README.OE-Core
build          LICENSE.GPL-2.0-only  meta          meta-poky          meta-yocto-bsp     README.poky
contrib        LICENSE.MIT           meta-arm      meta-selftest      oe-init-build-env  README.qemu
documentation  Makefile              meta-mylayer  meta-skeleton      README.hardware    scripts
byd@ubuntu:/media/C/Learn/poky$ source oe-init-build-env
### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

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'

Other commonly useful commands are:
 - 'devtool' and 'recipetool' handle common recipe tasks
 - 'bitbake-layers' handles common layer tasks
 - 'oe-pkgdata-util' handles common target package tasks
byd@ubuntu:/media/C/Learn/poky/build$ 

4、开始编译

byd@ubuntu:/media/C/Learn/poky/build$ bitbake core-image-sato
Loading cache: 100% |###############################################################################| Time: 0:00:00
Loaded 1358 entries from dependency cache.
Parsing recipes: 100% |#############################################################################| Time: 0:00:00
Parsing of 790 .bb files complete (786 cached, 4 parsed). 1360 targets, 42 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.48.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.2.2"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       
meta-mylayer         
workspace            = "my-yocto-3.2.2:d5d6286a66f46f4523e35e0e3f20cd7396195fdc"

Initialising tasks: 100% |##########################################################################| Time: 0:00:06
Sstate summary: Wanted 10 Found 0 Missed 10 Current 2682 (0% match, 99% complete)
NOTE: Executing Tasks
NOTE: alsa-utils: compiling from external source tree /media/C/Learn/poky/build/workspace/sources/alsa-utils
NOTE: Tasks Summary: Attempted 6759 tasks of which 6724 didn't need to be rerun and all succeeded.

首次下载编译需要很长的时间,需要耐心等待。且在编译过程中可能因为环境问题报错,请根据具体的提示修改即可,我在实际操作过程中出现报错如下
报错信息
根据提示安装gawk,然后重新编译。
编译完成后,直接运行虚拟机qemux86-64.
qemux86-64虚拟机是模拟开发板的一个虚拟机环境,后续开发学习过程中,所有验证过程都可由qemux86-64虚拟机完成,可减少硬件环境的配置验证的想过工作。
虚拟机运行命令如下:

byd@ubuntu:/media/C/Learn/poky/build$ runqemu qemux86-64

在运行虚拟机过程中遇到的问题及其解决方法

1、在虚拟机开发环境中运行qemux86-64虚拟机

在这里插入图片描述
这里需要关注的错误如下:

runqemu - ERROR - Failed to run qemu: X Error:  BadValue
  Request Major code 131 (MIT-SHM)
  Request Minor code 3 ()
  Value 0x1ae
  Error Serial #2676
  Current Serial #2677

这个错误处理有两个方法
1、直接将虚拟机放成全屏,同时将终端放到最大
2、在终端运行时增加nographic参数也行,如下

runqemu qemux86-64 nographic

2、在远程终端(secureCRT)下运行qemux86-64虚拟机

这个也是我们在日常工作中及其容易遇到的错误,我们工作过程中一般都会使用securecrt或者其他xshell工具远程我们的虚拟机进行工作,所以直接运行runqemu qemux86-64 会报如下错误:
在这里插入图片描述
关注如图错误,X11说明这个和显示环境相关,即该目标机器需要在Ubuntu的桌面环境下才能运行。不能在secureCRT的远程环境下运行或者其他远程的工具下运行。
解决上述问题:我们首先根据我们的机器MACHINE名字是qemux86-64,找到对应的meta文件下配置文件

meta/conf/machine/qemux86-64.conf

打开后定位如下内容


```bash
require conf/machine/include/qemu.inc
DEFAULTTUNE ?= "core2-64"
require conf/machine/include/tune-core2.inc
require conf/machine/include/qemuboot-x86.inc

根据上述信息,我们定位在conf/machine/include/qemu.inc文件中有这样一个配置

MACHINE_FEATURES = "alsa bluetooth usbgadget screen vfat"

其中有个参数screen,我们qemux86-64机器有screen特性FEATURES,这里我们删除screen的特性试试。同时我们在找sdl过程中发现在local.conf中也有这样一段话

 PACKAGECONFIG_append_pn-qemu-system-native = " sdl"

与我们的错误提示正好对应,试着直接干掉
然后重新source和编译

source oe-init-build-env
bitbake core-image-sato

编译完成后运行虚拟机成功

byd@ubuntu:/media/C/Learn/poky/build$ runqemu qemux86-86
runqemu - INFO - Running MACHINE=qemux86-86 bitbake -e ...
runqemu - ERROR - /media/C/Learn/poky/build/tmp/deploy/images/qemux86-86 not a directory valid DEPLOY_DIR_IMAGE
ls: cannot access '/media/C/Learn/poky/build/tmp/deploy/images/qemux86-86/*.qemuboot.conf': No such file or directory
runqemu - ERROR - Command 'ls -t /media/C/Learn/poky/build/tmp/deploy/images/qemux86-86/*.qemuboot.conf' returned non-zero exit status 2.
runqemu - INFO - Cleaning up
byd@ubuntu:/media/C/Learn/poky/build$ runqemu qemux86-64
runqemu - INFO - Running MACHINE=qemux86-64 bitbake -e ...
runqemu - INFO - Continuing with the following parameters:
KERNEL: [/media/C/Learn/poky/build/tmp/deploy/images/qemux86-64/bzImage--5.8.18+git0+b976de4f41_3c5d210805-r0-qemux86-64-20211201110510.bin]
MACHINE: [qemux86-64]
FSTYPE: [ext4]
ROOTFS: [/media/C/Learn/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20211227025303.rootfs.ext4]
CONFFILE: [/media/C/Learn/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20211227025303.qemuboot.conf]

runqemu - INFO - Setting up tap interface under sudo
[sudo] password for byd: 
runqemu - INFO - Network configuration: ip=192.168.7.2::192.168.7.1:255.255.255.0
runqemu - INFO - Running /media/C/Learn/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/qemu-system-x86_64 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -drive file=/media/C/Learn/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20211227025303.rootfs.ext4,if=virtio,format=raw -usb -device usb-tablet   -cpu core2duo -m 512 -serial mon:vc -serial null -kernel /media/C/Learn/poky/build/tmp/deploy/images/qemux86-64/bzImage--5.8.18+git0+b976de4f41_3c5d210805-r0-qemux86-64-20211201110510.bin -append 'root=/dev/vda rw  mem=512M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 '

重启一个终端访问:地址192.168.7.2

3、访问时遇到的错误

在另起的终端访问时有可能失败,如果你第一次访问,不会出错,如果你之前已经访问成功过,重新开机链接时就有可能报如下错误或者直接失败。
如果直接报无法链接则放大终端重新链接,则会报如下错误

byd@ubuntu:/media/C/2021111709/sdk/build$ ssh root@192.168.7.2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:ML9+lv9XfXBr5HA9zEVo10vNzQaRQjLq0wkUb9VuO8I.
Please contact your system administrator.
Add correct host key in /home/byd/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/byd/.ssh/known_hosts:8
  remove with:
  ssh-keygen -f "/home/byd/.ssh/known_hosts" -R "192.168.7.2"
RSA host key for 192.168.7.2 has changed and you have requested strict checking.
Host key verification failed.
byd@ubuntu:/media/C/2021111709/sdk/build$ ssh-keygen -f "/home/byd/.ssh/known_hosts" -R "192.168.7.2"
# Host 192.168.7.2 found: line 8
/home/byd/.ssh/known_hosts updated.
Original contents retained as /home/byd/.ssh/known_hosts.old

根据提示运行:

ssh-keygen -f "/home/byd/.ssh/known_hosts" -R "192.168.7.2"

完成后重新运行访问

byd@ubuntu:/media/C/2021111709/sdk/build$ ssh root@192.168.7.2
The authenticity of host '192.168.7.2 (192.168.7.2)' can't be established.
RSA key fingerprint is SHA256:ML9+lv9XfXBr5HA9zEVo10vNzQaRQjLq0wkUb9VuO8I.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.7.2' (RSA) to the list of known hosts.
root@qemux86-64:~# 

到此虚拟机访问成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值