背景
旨在对南向BSP的覆盖活动,目的是扩大openEuler对南向bsp的支持范围,“雪球计划”,寓意openEuler将一步步强大,最终成为国内乃至国际顶流嵌入式操作系统
南向BSP的支持主要以SoC单位,例如NXP的I.MX系列, TI的AMX系列等等,每个系列会选择一款代表性的开发板进行验证。
后续基于同系列SoC的开发板都可以基于样板BSP进行支持。
已有的Yocto BSP参考
南向硬件参考
感谢如下公司、组织在硬件上提供的支持和赞助:
ARM开发板
移植进度标准
资料学习(10%) |
移植流程(80%) |
代码提交(90%) |
文档完善(100%) |
了解机器(学习硬件特性和功能、源码获取、构建烧录与功能测试的方法) |
内核移植(替换欧拉内核) |
上游代码提交(上游相关吃那个的创建等,找李新宇) |
文档提交(包括构建的镜像截图,烧录截图,运行时截图,启动后的屏显log) |
机器验证(板载镜像构建、烧录、启动成功并进行简单功能测试) |
meta层的适配 |
欧拉源码提交(yocto-meta-openeuler仓的提交) |
|
|
开发板整体镜像制作 |
|
|
登记表
SOC型号 |
soc厂商 |
bsp型号 |
赞助商 |
gitee id |
进度 |
备注 |
T113-S3 |
全志 |
MYD-YT113S3-4E128D-110-I-G |
米尔科技 |
wangwei@cdjrlc.com |
0% |
2024/02/20:开发板寄出 |
T113-i |
全志 |
MYD-YT113i-4E256D-110-I |
米尔科技 |
wangwei@cdjrlc.com |
0% |
2024/02/20:开发板寄出 |
T527 |
全志 |
MYD-LT527M-16E2D-180-E |
米尔科技 |
wangwei@cdjrlc.com |
0% |
2024/02/20:开发板寄出 |
RZ/G2L |
瑞萨 |
MYD-YG2L23-8E1D-120-C-REMI |
米尔科技 |
alichinese |
15% |
2024/03/09:内核移植阶段 2024/02/20:开发板寄出 |
i.MX 6ULL |
NXP |
MYD-Y6ULY2-V2-4E512D-50-I |
米尔科技 |
darrenpig |
0% |
2024/02/20:开发板寄出 |
i.MX 8M Plus |
NXP |
MYD-JX8MPQ-8E2D-160-I |
米尔科技 |
puai |
10% |
2024/03/09:机器验证阶段 2024/02/20:开发板寄出 |
STM32MP135 |
ST |
MYD-YF135-4E512D-100-I |
米尔科技 |
bigclouds99 |
0% |
2024/02/20:开发板寄出 |
AM62x |
TI |
MYD-YM6254-8E2D-140-I |
米尔科技 |
emancipator |
10% |
2024/03/09:机器验证阶段 2024/02/20:开发板寄出 |
BSP开发步骤参考如下:
- 开发板资料学习,了解机器特性,以及使用,测试,烧录方法,
验收标准:开发板特性、开发烧录、测试文档
- 使用开发板资料的SDK进行构建,做烧录测试,了解其目录结构,所使用的工具,代码、固件存放位置等,厂商linux kernel如果能选择,尽量使
用内核为5.x版本作为参照对象,
验收标准:开发板特性对应的代码目录结构解析
- 内核移植:下载openeuler-kernel源码,从社区节点embedded-openeuler中进行提取版本号,并下载
例如从master开发,查看https://gitee.com/openeuler/yocto-meta-openeuler/blob/master/.oebuild/manifest.yaml中kernel的tag并下载
代码如下:
kernel-5.10:
remote_url: https://gitee.com/openeuler/kernel.git
version: 673b97e8053120a4b56fe5b5d5748dcef68a3f50
a. 下载源码到本地:
git clone https://gitee.com/openeuler/kernel.git openeuler-kernel -b openEuler-22.03-LTS-SP2
cd openeuler-kernel
git checkout 673b97e8053120a4b56fe5b5d5748dcef68a3f50
下一步就是驱动移植及验证
b. 从设备树查看外设驱动是否存在设备树中对应节点有compitible属性,在driver里面查找对应的驱动,如果则尝试编译其deconfig,如果没有的话就从厂商提供
的SDK中移植到openeuler-kernel,并完成驱动debug
验收标准:移植完成的内核推送到对应的PR上,并完善文档,外设支持的内容。以及通过的验证方法。
- 内核移植验证完成后制作yocto-meta-openeuler的BSP层
a. 引入上游的BSP层以及软件层
i. 初始化环境:
- oebuild init <init_dir> -u <your_own_repo_url>
- oebuild update
如果上游有BSP层:
ii. 复制一份.oebuild/platform/里面的板平台为这次需要的machine,并修改内容为上游层的repo_url以及layer。
iii. 制作完以上文件即可使用oebuild generate -p ,并按指示进入容器
iv. 制作openeuler的适配的附加层:
- 参考bsp/meta-openeuler-bsp/raspberrypi,在同级目录下新建一个目录vender名字的目录
- 在上述目录下增加三个基础核心配方集
a) recipes-bsp:存放基础的配方以及固件如uboot/grub/bootfiles等
b) recipes-core:主要存放images/packagegroups/systemd等系统核心部分
c) recipes-kernel:主要存放linux等欧拉内核相关配方
- 在bsp/meta-openeuler-bsp/conf/layer.conf中参考raspberrypi与rockchip内容,增加自己的附加层
v. 在bsp下制作BSP层,也可以直接复制meta-hisilicon,并修改成自己要样子。也可以参考yocto文档从bitbake构建bsp层
https://docs.yoctoproject.org/bsp-guide/bsp.html#creating-a-new-bsp-layer-using-the-bitbake-layers-script
vi. 参考上游通soc的机器配置,加入附加的机器配置
- 建立该机器配方:
a) 如果上游有BSP层:参考上游同soc架构的.conf,在include内新建一个名为openeuler-
.conf并做通用的欧拉相关的定制修改。制作自己的.conf,引用通用的openeuler-
.conf,并定义自己所需要的配置
b) 如果上游没有BSP层:参考其他机器的machine.conf,制作一份.conf
- .conf一般有
a) KBUILD_DEFCONFIG内核的defconfig,也可以不定义,定义了就会用内核仓库内的xxxx_defconfig
b) SERIAL_CONSOLES定义串行口,波特率等
c) KERNEL_DTB_NAME定义设备树名
vii. 修改内核相关的配方,参考bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/ 做实现
viii. kernel仓库在.oebuild/manifest里加上相应仓库地址(测试时可用自己的私仓,在推送PR的时候尽量使用公仓)
ix. 验证并DEBUG内核linux-openeuler,烧录并验证
- bitbake linux-openeuler
x. 制作文件系统
参考bsp/meta-openeuler-bsp/rockchip/recipes-core/images,在自己层的recipes-core/images下创建.inc,定义
分区 yocto 的第 1 页
- 参考bsp/meta-openeuler-bsp/rockchip/recipes-core/images,在自己层的recipes-core/images下创建.inc,定义
IMAGE_FSTYPES等(如果machine.conf里面有了也可以不用定义),如果需要把输出挪到output下也可以参考实现
- 验证并DEBUG文件系统bitbake openeuler-image,烧录并验证
xi. 过程中遇到问题可用btibake -e 查看执行环境,对照tmp/work////temp内的log对应
相关BUG进行过程验证。
b. 推动相关固件/优化代码欧拉建仓
i. 验证文件系统以及驱动固件及其功能后,可推动欧拉建立相关仓库进行存储
验收标准:移植完成的ycoto代码推送到对应的PR上,并完善文档,功能支持的内容。以及通过的验证方法。