WindRiver Linux Yocto Project Note

  • Project download

1. windriver linux yocto SDK下载

windriver SDK托管在github上,可以通过链接wrlinux访问到该repository。
从README文档看,有两种工作方式可以选择,Basic workflow与mirror workflow,其setup命令分别如下:
Basic

$ mkdir my-project
$ cd my-project
$ git clone --branch <branchName> <repoURL> wrlinux-x

Mirror

$ mkdir my-mirror
$ cd my-mirror
$ git clone --branch <branchName> <repoURL> wrlinux-x
$ ./wrlinux-x/setup.sh --all-layers --mirror
  • Image Build Guide

以mirror workflow为例,开始image build。需要先将wrlinux-x的镜像下载下来

1. 创建工程
$ mkdir -p my-project
$ cd my-project
2. 下载wrlinux-x,其中setup.sh用于设置下载工程文件
$ git clone --branch WRLINUX_10_21_BASE Your-Mirror-wrlinux-x-git-repository/wrlinux-x
# Branch Name
# -> WRLINUX_10_21_BASE
#    WRLINUX_10_19_BASE
3. setup工程
#1.Based on base machine and distros,setup the workspace
$ ./wrlinux-x/setup.sh --dl-layers --machines=qemuarm64 --distros wrlinux
# --machine:指定机器类型与运行的硬件环境相关。运行Qemu,设置machines为qemuarm64
# --distros:指定发行版类型

#2.Set build environment variable
$ source environment-setup-x86_64-wrlinuxsdk-linux
$ source oe-init-build-env [dir_name]
# dir_name: 指定编译目录,默认为build。
# 上述命令运行结束后,将自动进入dir_name目录下。
4. build配置更新
 # 1.按照需求更新白名单。在conf/local.conf文件中加上如下:
  PNWHITELIST_openembedded-layer += 'rsyslog'
  
  # 2.按需加入custom layer。在conf/bblayers.conf文件中的BBLAYERS追加如下layer
  your-custom-layer
5. 编译WRLinux image。包含kernel,文件系统以及其他用户态软件包
$ bitbake wrlinux-image-small
  • Q&A

1.编译完成的内核和文件系统位置在哪里
# 内核
   my-project/<dir_name>/tmp-glibc/deploy/images/qemuarm64/Image
   my-project/<dir_name>/tmp-glibc/deploy/images/qemuarm64/your-dtb-file-name.dtb
# 文件系统
   my-project/<dir_name>/tmp-glibc/deploy/images/qemuarm64/wrlinux-image-small-qemuarm64.ext4 
2.如何在已有的工程中添加customer layer
### Method 1
$ bitbake-layers add-layer /path/to/customer/layer
# 需要在dir_name目录下执行

### Method 2
在工程dir_name目录下conf/bblayer.conf文件末尾添加customer layer的路径
3.如何临时增加文件系统中没有的软件包
# 例如在工程build目录下conf/local.conf结尾增加如下行,则增加了软件包nfs-utils和i2c-tools到文件系统中
  IMAGE_INSTALL_append = " nfs-utils i2c-tools"
4.如何导出WRLinux SDK和编译用户程序
# 1.编译SDK
$ bitbake wrlinux-image-small -c populate_sdk

# 2.编译完成在build目录下运行如下命令安装SDK并按照提示选择SDK的安装目录
$ ./tmp-glibc/deploy/sdk/wrlinux-10.21.09b.0-glibc-x86_64-qemuarm64-wrlinux-image-small-sdk.sh

# 3.设置环境变量
$ source environment-setup-cortexa72-wrs-linux

# Example:交叉编译test.c文件,例中SDK安装目录为/your/path/sdk-wr/
$ aarch64-wrs-linux-gcc -fpie -pie --sysroot=/your/path/sdk-wr/sysroots/cortexa72-wrs-linux/ test.c -o test
5.如何运行Qemu镜像
# 将Qemu工程编译出来的kernel和文件系统文件拷贝到自己个工作机上执行
# 如下命令,正常会运行到登录提示,输入默认密码root即可进入WRLinux shell
$ sudo qemu-system-aarch64 -machine virt,gic_version=3 -machine virtualization=true -cpu cortex-a57 -machine type=virt -nographic -smp 4 -m 4096 -kernel ./Image -append "console=ttyAMA0 root=/dev/vda rw " -drive if=none,file=./wrlinux-image-small-qemuarm64.ext4,id=hd0,format=raw -device virtio-blk-device,drive=hd0 -netdev tap,id=net0,script=no,downscript=no -device virtio-net-device,netdev=net0,mac=52:55:00:d1:55:02
6.如何配置Qemu网络
#ubuntu主机上安装Qemu,Libvirt虚拟机管理工具,完成后重启,重启后ifconfig
#可以查看到virbr0网桥接口,IP默认192.168.122.1
$ sudo apt-get install qemu-kvm libvirt-bin
  
#Qemu镜像启动正常后,主机上默认新生成tap0接口,ifconfig -a可以查看
#将tap0接口添加到virbr0网桥上(主机上运行)
$ sudo brctl addif virbr0 tap0

#启动tap0接口
$ sudo ifconfig tap0 up

#Qemu虚拟机中运行dhcpcd获取IP地址,运行成功后虚拟机中ifconfig应该能
#看到eth0动态获取的IP地址,192.168.122.x
$ dhcpcd

#虚拟机和主机互通检测,虚拟机上ping主机
$ ping 192.168.122.1
  • 常用命令

1.启动kernel development shell
$ bitbake -c devshell virtual/kernel
2.build kernel
$ bitbake linux-yocto -C compile
3.build module
$ bitbake linux-yocto -c compile_kernelmodules
4.clean kernel
$ bitbake linux-yocto -c cleanall
5.config kernel
$ bitbake linux-yocto -c menuconfig
6.generate update config options to fragment.cfg
$ bitbake linux-yocto -c diffconfig
7.adjust kernel config
$ bitbake linux-yocto -c kernel_configme
$ bitbake linux-yocto -c kernel_configcheck
8.deploy kernel
$ bitbake linux-yocto -c deploy
9.build rootfs
$ bitbake wrlinux-image-small
10.DTS 编译与反编译
# dts编译
$ ./script/dtc/dtc -I dts -O dtb -o jello.dtb jello.dts

# dtb反编译
$ ./script/dtc/dtc -I dtb -O dts -o jello.dts jello.dtb
11.生成recipe的task依赖图
$ bitbake -g wrlinux-image-small
# 将会在当前目录下生成task之间依赖关系图task-depends.dot,可以使用xdot查看
# Note: build recipe执行完毕后, tmp的log.task_order保存了该recipe的所有任务执行顺序

# Ubuntu下xdot的安装命令
$ sudo apt-get install xdot
12.创建patch文件
$ git format-patch -o ~/patch/ -1
13.服务器间文件拷贝
$ scp kernel-dtb_20220209.img harryyue123@192.168.1.9:/home/harryyue123/Project/image_uboot
14.使用root权限操作自建task

在自建task之前加上fakeroot,如下:

fakeroot do_my_task() {
	#run task function
}
#设定task的依赖关系(do_image -> do_my_task -> do_image_complete)
addtask do_my_task after do_image before do_image_complete

如有需求,本文将不定期更新!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值