如何使用Yocto(thud分支)构建PREEMPT_RT实时镜像?
Yocto Thud分支构建PREEMPT_RT实时镜像问题解答
1. 预查询bitbake内核构建版本与RT补丁匹配规则
- 执行构建前查询内核版本:运行命令
bitbake virtual/kernel -e | grep "^PV =",输出的PV变量值即为bitbake即将构建的内核完整版本号。也可执行bitbake -s | grep linux-查看所有内核recipe的版本信息,匹配你当前使用的内核条目即可。 - 补丁匹配要求:PREEMPT_RT补丁必须和内核的次版本号完全匹配才能正常应用,跨小版本打补丁大概率会出现补丁偏移、应用失败,就算强行应用成功也可能出现内核功能异常、编译报错等问题。你当前找不到4.14.112对应RT补丁的话,可以先将内核小版本升级到有对应RT补丁的4.14.x分支版本即可。
2. Yocto内核正确应用PREEMPT_RT补丁的步骤
方案一:使用官方meta-rt层(推荐)
Thud版本对应有官方维护的meta-rt层,直接将该层添加到 conf/bblayers.conf 的BBLAYERS变量中,再在conf/local.conf中添加配置 PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt",直接构建即可自动应用对应版本的PREEMPT_RT补丁,无需手动处理补丁。
方案二:手动应用自定义补丁
如果需要使用自己指定的RT补丁,按以下步骤操作:
- 新建内核recipe对应的bbappend文件,在文件中添加补丁条目:
SRC_URI += "file://patch-xxx-rtxx.patch",将补丁文件放到bbappend同级的files目录下。 - 新增内核配置片段(.cfg文件),添加到SRC_URI中,核心配置项如下:
CONFIG_PREEMPT_RT=y CONFIG_HIGH_RES_TIMERS=y CONFIG_NO_HZ_FULL=y # 关闭不需要的调试选项避免影响实时性 CONFIG_DEBUG_PREEMPT=n - 执行命令清空内核构建缓存并重新编译内核:
bitbake virtual/kernel -c cleansstate && bitbake virtual/kernel,确认补丁应用、内核编译无报错后,再执行bitbake core-image-minimal构建完整实时镜像。
如果补丁应用过程中出现冲突,可先手动解压内核源码,应用补丁后解决冲突,再将修改导出为新补丁替换原有补丁即可。
内容的提问来源于stack exchange,提问作者shravan Kulal
相关产品推荐
相关产品推荐

