加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

iMX6Ull采用Yocto构建嵌入式Linux系统系列之19 Linux内核源

发布时间:2022-12-03 15:01:37 所属栏目:Linux 来源:网络
导读: Linux内核移植
Linux内核有三个主要工作:管理资源,通过接口接合硬件,并为用户控件程序提供一个抽象化的接口。具体来说主要负责系统的进程管理、内存管理、文件系统、网络通信、硬件驱动

Linux内核移植

Linux内核有三个主要工作:管理资源,通过接口接合硬件,并为用户控件程序提供一个抽象化的接口。具体来说主要负责系统的进程管理、内存管理、文件系统、网络通信、硬件驱动等功能。相对应的,各主要部分功能如下:

进程管理:内核负责创建和销毁进程, 并处理进程与输入和输出设备的不同进程间的数据处理, 调度器,控制进程如何共享 CPU, 是进程管理的一部分. 更通常地, 内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象.

内存管理:计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的. 内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间. 内核的不同部分与内存管理子系统通过一套函数调用交互, 从简单的 malloc/free 对到更多更复杂的功能.

文件系统:Unix 在很大程度上基于文件系统的概念; 几乎 Unix 中的任何东西都可看作一个文件. 内核在非结构化的硬件之上建立了一个结构化的文件系统, 结果是文件的抽象非常多地在整个系统中应用. 另外, Linux 支持多个文件系统类型, 就是说, 物理介质上不同的数据组织方式. 例如, 磁盘可被格式化成标准 Linux 的 ext3 文件系统, 普遍使用的 FAT 文件系统, 或者其他几个文件系统.

网络通信:网络必须由操作系统来管理, 因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件. 报文在某一个进程接手之前必须被收集, 识别, 分发. 系统负责在程序和网络接口之间递送数据报文, 它必须根据程序的网络活动来控制程序的执行. 另外, 所有的路由和地址解析问题都在内核中实现.

硬件驱动:几乎每个系统操作最终都映射到一个物理设备上. 除了处理器, 内存和非常少的别的实体之外, 全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行. 这些代码称为设备驱动. 内核中必须嵌入系统中出现的每个外设的驱动, 从硬盘驱动到键盘和磁带驱动器.

对于嵌入式Linux内核的移植,更多的是将自己定义的硬件平台添加至嵌入式Linux内核中,同时会涉及到修改一定的驱动接口的修改,使得嵌入式Linux内核能够正常的运行在相应的硬件平台。

Linux内核源码下载

和U-Boot一样,Linux官方也提供了不同版本的Linux内核。相应的,NXP也会从Linux官方下载一个稳定版本的Linux内核,并将其移植到NXP的CPU上,然后再将移植以后的Linux内核版本开放给NXP CPU的用户。用户从NXP下载对应CPU的Linux内核,然后将其移植到自己的产品上。对于i.mx6ull,教程中采用的是NXP官方维护的Linux版本imx_5.4.47_2.2.0,所以,我们将在imx_5.4.47_2.2.0版本上进行修改。其下载地址为。具体下载方法如下:

使用git clone命令获取Linux内核源码linux 路径,命令如下:

PS:对于教程中使用到的Linux内核源码,笔者已经将其在网盘中进行分享:

增加Linux-Kernel Recipe

在Linux内核移植过程中,需要修改相应的Linux内核源码,同样的,我们不会直接在Yocto中提供的recipe中直接修改,而是在我们之前创建的metadata中创建新的recipe的方式来对Linux内核编译过程进行配置。Linux内核的配置属于distro中的内容。在/sources/meta-bird-imx6ull/conf/distro路径下的bird-imx-fb.conf中,通过include conf/distro/include/bird-imx-preferred-env.inc的方式,引用了bird-imx-preferred-env.inc文件,在该文件中,通过PREFERRED_PROVIDER_virtual/kernel_imx变量定义了Linux内核的provider,如下所示:

可以看出,imx6ull Linux内核的provider是linux-imx,实际上,其对应的是/sources/meta-imx/meta-bsp/recipes-kernel/linux/路径下的linux-imx_5.4.bb文件。因此,增加相应的Linux内核recipe,步骤如下:

创建如下路径:/fsl-release-yocto/sources/meta-bird-imx6ull/recipes-kernel/linux,并将/sources/meta-imx/meta-bsp/recipes-kernel/linux路径下的linux-imx_5.4.bb拷贝至/fsl-release-yocto/sources/meta-bird-imx6ull/recipes-kernel/linux路径下,并将linux文件夹下的linux-imx_5.4.bb重命名为:linux-bird_5.4.bb。同时,将/sources/meta-bird-imx6ull/conf/distro/include/路径下的bird-imx-preferred-env.inc中的PREFERRED_PROVIDER_virtual/kernel_imx = "linux-imx"修改为PREFERRED_PROVIDER_virtual/kernel_imx = "linux-bird"。修改后的bird-imx-preferred-env.inc如下:

linux桌面路径_linux软件下载路径_linux 路径

2.增加默认配置文件:Linux内核功能是可以通过linux内核源码路径下的配置文件.config进行裁剪的,对于imx6ull CPU来说,.config文件可以由默认的配置文件defconfig生成。将Linux内核源码/arch/arm/configs路径下的imx_v7_defconfig文件复制到/sources/meta-bird-imx6ull/recipes-kernel/linux/files路径下,并将其重命名为defconfig,并且在linux-bird_5.4.bb文件中增加表里SRC_URI值,如下:

需要注意的是,linux内核功能的配置可以由多种修改配置路径共同决定的,最终生成.config文件。一般来说,在开始编译Linux内核时,会采用一个默认的配置信息,使Linux内核具有明确的初始状态,再在其他途径(方法)对linux内核进行配置。通常来说,默认配置文件的确定是需要多次反复迭代确定的,详细的修改方法,在后面修改默认配置文件章节会有介绍。

linux桌面路径_linux 路径_linux软件下载路径

修改完成后,使用 bitbake -c compile -f linux-bird 命令编译Linux内核,编译过程如下:

linux 路径_linux桌面路径_linux软件下载路径

可以看到,新增加的linux内核recipe参与了最终Linux内核的编译过程。但目前,在linux-bird_5.4.bb中内容和官方提供的linux-imx_5.4.bb完全一致,因此,编译出来的Linux内核也是和官方提供了一致的。接下来,就是需要通过修改linux-bird_5.4.bb文件,将编译Linux内核使用的源码指向我们下载保存在本地的Linux内核源码,采用本地的Linux内核源码构建Linux内核,从而实现,通过修改本地Linux内核源码配置Linux内核的目的。

修改Linux-kernel Recipe

对于Linux kerne的移植,更多的是需要通过修改Linux内核的配置信息等,使其能够正常工作于我们自己设计的硬件平台上。同样的,在修改Linux内核源码前,我们需要将从NXP官网下载的Linux内核源码放在本地,并且将OpenEmbedded编译所使用的Linux内核源码指向我们本地存放的Linux内核源码路径,这样,就可以实现只更改本地存储的Linux内核源码,而不至于影响到其他项目。教程中,将从NXP官网下载的imx_5.4.47_2.2.0.tar.bz2拷贝至/Linux/fsl-release-yocto路劲下,采用如下命令解压:

解压后,将其重命名为:linux-imx-bird,如下图所示:

linux桌面路径_linux软件下载路径_linux 路径

将Linux内核源码存放在/Linux/fsl-release-yocto/linux-imx-bird路径,并且采用Git管理之后,修改/fsl-release-yocto/sources/meta-bird-imx6ull/recipes-kernel/linux/linux-bird_5.4.bb文件,将其中的SRC_URI指向本地存放Linux内核源码的路径。如下图所示:

linux 路径_linux软件下载路径_linux桌面路径

linux 路径_linux软件下载路径_linux桌面路径

文档配套教学视频B站搜索“嵌入式孙工”

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!