本文将以Digi的 ConnectCore 6UL为例,演示给基于NXP的i.MX6UL片上系统模块的嵌入式Linux打上实时补丁的过程。
DIGI ConnectCore 6UL片上系统模块以极小和超薄的封装集成了恩智浦 NXP i.MX6UL嵌入式处理器和Flash,内存,安全芯片,Wifi/BT等组件,构成的最小系统,为物联网提供便捷的核心主控平台,以及配套的嵌入式Linuxt系统和软件硬件工具,加快产品开发和上市。这款核心主控模块只有2.85mm X 2.85mm大小,非常的薄,极像一块芯片,但它是五脏俱全的核心板,具有非常低的功耗和多种多样的接口,跑最新的Linux内核,有完整的源码,并且提供和NXP处理器一样的长达10年以上的供货保证。用户可以用它快速开发长期使用的工业产品,其相关的BSP底层驱动则由Digi公司维护,让用户可以专注于应用的实现,减少开发风险。
在开始操作之前,请确保您已经安装好DEY系统开发环境,并成功编译了基础的Linux镜像。
如果您还没有编译过镜像,那么至少需要先编译好Linux内核,可以用下面命令:
先编译一个可用的Linux内核,如果您刚编译完dey的镜像,可以不用这个操作,因为Linux系统已经编译好了
bitbake -c compile virtual/kernel
我们需要修改Linux内核,打上RT Peempt补丁,为了找到合适的内核版本,先Linux内核配置选项菜单
bitbake -c menuconfig virtual/kernel
在这个页面,可以看到对应的内核版本,请记录下来,以便后续下载对应版本的补丁。
首先要了解哪些地方是系统内核源码和对应的配置文件,以DEY 3.0为例:
真正的内核源码在 tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/git下,这是个链接文件,指向tmp/work-shared/ccimx6ulsbc/kernel-source,通常我们可以在主机上操作这个目录,而无需进入devshell来操作。
内核的配置文件是在tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/defconfig,在DEY编译过程中会引用这里的选项进行操作,事实上在编译过程中会根据它在tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/build目录下生成.config,这也是真正的内核配置文件。对于内核修改的备份,以defconfig为宜,因此可以在首次编译完成后就把这个defconfig添加到自己的项目文件夹下的版本库中,比如
git add ./work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/defconfig git commit -m "initial commit, original defconfig" git push
如果我们改动了内核配置,担心改得不对,恢复的方法是:
bitbake -c cleanall virtual/kernel
这样会清除内核目录:./tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/ 和内核目录等,用bitbake -c compile virtual/kernel重新生成一套默认的内核文件源码
下面是打上RT-Patch的过程:
cd tmp/work-shared/ccimx6ulsbc/kernel-source wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.84-rt47.patch.xz xzcat ./patch-5.4.84-rt47.patch.xz | patch -p1 cd ../../../.. bitbake -c menuconfig virtual/kernel
在General Setup里有一项Preemptible相关的选项,打开它并选中Full Preemptible那项,然后保存.config,并退出。
bitbake -c savedefconfig virtual/kernel
这会在./tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/ build目录下生成defconfig
注意,我们如果用这个build目录下的东西编译,应该用bitbake -C ,因此
bitbake -C compile virtual/kernel来生成新的rt-patch内核
bitbake core-image-base来打包新内核到固件镜像