BSP一般是由处理器芯片制造商提供还是开发板商提供?BSP是如何整合(编译)进内核中的?

01-BSP一般是由处理器芯片制造商提供还是开发板商提供?

芯片商一般会提供BSP,但是它的主要对象是处理器芯片,不包括板级的外设。开发板商会在芯片商提供的BSP基础上去添加开发板特有的外设驱动和配置。

详细介绍如下:

BSP(Board Support Package)的提供方取决于具体的硬件平台和应用场景,一般有两种主要来源:芯片开发商开发板生产商。下面具体分析这两种情况,以及它们提供 BSP 的特点和区别。


1. 芯片开发商提供的 BSP

来源

芯片开发商(如 NXP、TI、Qualcomm、Rockchip)通常会为其芯片产品提供一个官方 BSP。

特点

  1. 通用性

    • 芯片厂商提供的 BSP 通常面向 芯片系列,涵盖所有可能使用该芯片的硬件平台。
    • BSP 代码更贴近芯片级别,直接支持芯片的各种外设(如 GPIO、UART、SPI 等)。
    • 不包含与特定开发板相关的外设配置。
  2. 内容

    • 驱动程序:支持芯片的通用硬件模块(如 GPIO 控制器、时钟管理、DDR 初始化等)。
    • 内核补丁:针对芯片的 Linux 内核补丁,支持该芯片的硬件架构。
    • 基础设备树:一个通用的设备树模板,描述芯片的硬件资源,但不包括板级外设。
    • 工具链:为该芯片优化的交叉编译工具链。
  3. 典型使用场景

    • 芯片的参考开发板(通常由芯片厂商自己设计)。
    • 为了开发基于该芯片的自定义硬件,需要在官方 BSP 基础上进行修改和移植。

优缺点

  • 优点
    • 官方 BSP 通常质量较高,支持芯片的所有核心功能。
    • 可作为开发板厂商定制 BSP 的基础。
  • 缺点
    • 不直接支持开发板上的特定外设(如按键、显示屏)。
    • 用户需要额外移植工作,适配具体的开发板。

2. 开发板生产商提供的 BSP

来源

开发板生产商(如友善之臂、百问网、全志科技等)会基于芯片厂商提供的官方 BSP,开发适配其开发板的 BSP。

特点

  1. 定制性

    • 开发板生产商会在芯片厂商提供的 BSP 基础上,添加开发板特有的外设驱动和配置(如按键、LCD、摄像头等)。
    • 提供更加完整的软硬件支持,能直接用于开发板。
  2. 内容

    • 驱动程序:除芯片通用驱动外,还包括开发板特定的外设驱动(如按键、蜂鸣器)。
    • 设备树:完整的设备树文件,描述开发板上所有硬件资源及其连接方式。
    • 启动配置:包括引导加载器(如 U-Boot)和内核启动参数。
    • 文件系统:通常提供预编译的根文件系统,支持开发板的特定功能。
    • 示例代码:提供示例程序和测试代码,方便用户快速上手。
  3. 典型使用场景

    • 面向具体开发板,开箱即用,适合初学者和快速开发项目。
    • 可直接移植到类似的自定义硬件设计中。

优缺点

  • 优点
    • 即插即用,支持开发板的所有外设。
    • 包括示例程序,降低开发门槛。
  • 缺点
    • 与具体开发板绑定,通用性较差。
    • BSP 质量可能不如芯片厂商的官方 BSP。

3. BSP 提供方的选择

  • 芯片厂商 BSP

    • 适合对硬件较熟悉、需要开发自定义硬件的团队。
    • 提供芯片级支持,但需移植和适配板级外设。
    • 例子:
      • NXP 提供的 i.MX6ULL 官方 BSP。
      • TI 提供的 AM335x 官方 BSP。
  • 开发板生产商 BSP

    • 适合初学者或需要快速开发的用户。
    • 提供完整支持,减少适配工作量。
    • 例子:
      • 友善之臂的 NanoPi 开发板 BSP。
      • 百问网的 i.MX6ULL 开发板 BSP。

4. 两者的关系

  1. 芯片厂商 BSP 是基础

    • 开发板厂商的 BSP 通常基于芯片厂商的 BSP 进行二次开发。
    • 开发板厂商添加与开发板相关的设备树、驱动和示例代码。
  2. 两者可互为补充

    • 开发板厂商的 BSP 易用性更强,但可能只支持部分功能。
    • 芯片厂商的 BSP 更通用,适合复杂项目开发。

5. 具体 BSP 安装和使用流程

无论 BSP 来源,使用方式类似:

  1. 下载 BSP 源码(从芯片厂商或开发板生产商)。
  2. 配置内核和设备树(根据项目需求选择功能)。
  3. 编译内核、设备树和文件系统。
  4. 烧录生成的镜像到硬件,启动开发板。
  5. 运行 BSP 提供的示例程序,测试硬件功能。

6. 小结

  • 芯片厂商 BSP:提供芯片级支持,通用性强,但需要适配具体硬件。
  • 开发板厂商 BSP:面向开发板,定制性强,易用性高。
  • 开发板厂商 BSP 通常基于芯片厂商的 BSP 开发,两者相辅相成。

根据开发需求,可以选择直接使用开发板 BSP 或在芯片厂商 BSP 的基础上自行开发和移植。

02-BSP是如何整合(编译)进内核中的?

以IMX6ULL为例,说明其BSP是如何编译进Linux内核并使用的?【不要使用Yocto】
关于为什么不要使用Yocto的说明:Yocto语法复杂,并且Yocto动辄10GB,下载安装都很困难,普通笔记本编译可能需要 2-3 天甚至更久,非常不适合初学者。

在IMX6ULL上,BSP(板级支持包)通常是一个与Linux内核紧密集成的硬件平台支持库,包含了与特定硬件平台相关的驱动程序、初始化代码、设备树文件等内容。以下是编译并使用IMX6ULL BSP的步骤,且不依赖Yocto。

1. 准备工作

首先,确保已经安装了必要的编译工具链(如gccmake)以及Linux内核的源代码。你可以从Linux Kernel Archive获取内核源代码,或者使用NXP提供的版本。

2. 获取IMX6ULL BSP

NXP会提供IMX6ULL的BSP,通常可以通过以下途径获取:

  • NXP官方网站下载。
  • 使用git从NXP的开源仓库获取。例如,NXP提供了一个imx6ull的内核驱动支持库。
git clone https://github.com/NXP/imx6ull.git

这将包含针对IMX6ULL的相关驱动、设备树和配置文件。

3. 配置内核

在内核源码目录中,你需要为IMX6ULL配置内核。进入内核源代码目录后,可以执行以下命令来配置内核:

make imx6ull_defconfig

这会自动应用适用于IMX6ULL开发板的默认配置。你也可以手动编辑.config文件来修改配置。
问:配置文件哪里来?
如果你从NXP的官方SDK或BSP包中下载代码,可能会发现arch/arm/configs目录下有imx6ull_defconfig,然后把它复制到Linux内核源码的arch/arm/configs目录下。

4. 添加BSP驱动和设备树

IMX6ULL的BSP包含了特定的驱动程序和设备树文件。你需要将这些文件集成到内核中:

  • 设备树:设备树描述了硬件设备的布局,并提供了内核与硬件通信所需的信息。对于IMX6ULL,你可以使用NXP提供的设备树文件,通常位于arch/arm/boot/dts目录中。
    • 例如,imx6ull-14x14-evk.dts或类似的设备树文件。
make ARCH=arm imx6ull-14x14-evk.dtb
  • 驱动程序:BSP驱动程序通常会放在drivers目录下,包含了如I2C、SPI、GPIO、串口、USB等外设的驱动,你需要把这些驱动程序复制到内核源码的drivers/目录下。

5. 编译内核

一旦配置和驱动都准备好,你可以开始编译内核。编译内核包括编译内核映像、设备树和模块等。通常可以使用以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

这一步可以参考我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144421577

6. 安装并烧录内核

编译完成后,你将得到内核映像(zImage)、设备树文件(.dtb)和模块。接下来,你需要将这些文件安装到开发板的文件系统中。

  • zImage.dtb文件烧录到SD卡或者通过其他方式加载到设备上。
  • 将编译的内核模块(.ko文件)安装到文件系统的/lib/modules目录中。

这一步可以参考我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144421577

7. 配置引导加载程序(如U-Boot)

确保U-Boot的配置文件和环境变量已正确设置,以便从SD卡启动IMX6ULL,并加载内核映像、设备树文件和根文件系统。

  • U-Boot的设备树文件可能需要根据具体硬件进行定制。常见的IMX6ULL引导配置如下:
setenv bootargs console=tty1 root=/dev/mmcblk0p2 rootwait
load mmc 0:1 ${loadaddr} zImage
load mmc 0:1 ${fdtaddr} imx6ull-14x14-evk.dtb
bootz ${loadaddr} - ${fdtaddr}

8. 启动并测试

完成上述步骤后,你可以通过重新启动IMX6ULL开发板来加载内核并验证设备是否正常工作。你可以通过串口控制台查看启动日志,检查内核是否正确识别并初始化IMX6ULL的硬件设备。

总结

在IMX6ULL平台上,BSP的集成主要包括选择合适的设备树文件、配置内核、编译驱动并通过引导加载程序加载这些文件。通过这些步骤,你可以编译一个适用于IMX6ULL的Linux内核,并在开发板上使用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值