目录
01-BSP一般是由处理器芯片制造商提供还是开发板商提供?
芯片商一般会提供BSP,但是它的主要对象是处理器芯片,不包括板级的外设。开发板商会在芯片商提供的BSP基础上去添加开发板特有的外设驱动和配置。
详细介绍如下:
BSP(Board Support Package)的提供方取决于具体的硬件平台和应用场景,一般有两种主要来源:芯片开发商和开发板生产商。下面具体分析这两种情况,以及它们提供 BSP 的特点和区别。
1. 芯片开发商提供的 BSP
来源:
芯片开发商(如 NXP、TI、Qualcomm、Rockchip)通常会为其芯片产品提供一个官方 BSP。
特点:
-
通用性:
- 芯片厂商提供的 BSP 通常面向 芯片系列,涵盖所有可能使用该芯片的硬件平台。
- BSP 代码更贴近芯片级别,直接支持芯片的各种外设(如 GPIO、UART、SPI 等)。
- 不包含与特定开发板相关的外设配置。
-
内容:
- 驱动程序:支持芯片的通用硬件模块(如 GPIO 控制器、时钟管理、DDR 初始化等)。
- 内核补丁:针对芯片的 Linux 内核补丁,支持该芯片的硬件架构。
- 基础设备树:一个通用的设备树模板,描述芯片的硬件资源,但不包括板级外设。
- 工具链:为该芯片优化的交叉编译工具链。
-
典型使用场景:
- 芯片的参考开发板(通常由芯片厂商自己设计)。
- 为了开发基于该芯片的自定义硬件,需要在官方 BSP 基础上进行修改和移植。
优缺点:
- 优点:
- 官方 BSP 通常质量较高,支持芯片的所有核心功能。
- 可作为开发板厂商定制 BSP 的基础。
- 缺点:
- 不直接支持开发板上的特定外设(如按键、显示屏)。
- 用户需要额外移植工作,适配具体的开发板。
2. 开发板生产商提供的 BSP
来源:
开发板生产商(如友善之臂、百问网、全志科技等)会基于芯片厂商提供的官方 BSP,开发适配其开发板的 BSP。
特点:
-
定制性:
- 开发板生产商会在芯片厂商提供的 BSP 基础上,添加开发板特有的外设驱动和配置(如按键、LCD、摄像头等)。
- 提供更加完整的软硬件支持,能直接用于开发板。
-
内容:
- 驱动程序:除芯片通用驱动外,还包括开发板特定的外设驱动(如按键、蜂鸣器)。
- 设备树:完整的设备树文件,描述开发板上所有硬件资源及其连接方式。
- 启动配置:包括引导加载器(如 U-Boot)和内核启动参数。
- 文件系统:通常提供预编译的根文件系统,支持开发板的特定功能。
- 示例代码:提供示例程序和测试代码,方便用户快速上手。
-
典型使用场景:
- 面向具体开发板,开箱即用,适合初学者和快速开发项目。
- 可直接移植到类似的自定义硬件设计中。
优缺点:
- 优点:
- 即插即用,支持开发板的所有外设。
- 包括示例程序,降低开发门槛。
- 缺点:
- 与具体开发板绑定,通用性较差。
- BSP 质量可能不如芯片厂商的官方 BSP。
3. BSP 提供方的选择
-
芯片厂商 BSP:
- 适合对硬件较熟悉、需要开发自定义硬件的团队。
- 提供芯片级支持,但需移植和适配板级外设。
- 例子:
- NXP 提供的 i.MX6ULL 官方 BSP。
- TI 提供的 AM335x 官方 BSP。
-
开发板生产商 BSP:
- 适合初学者或需要快速开发的用户。
- 提供完整支持,减少适配工作量。
- 例子:
- 友善之臂的 NanoPi 开发板 BSP。
- 百问网的 i.MX6ULL 开发板 BSP。
4. 两者的关系
-
芯片厂商 BSP 是基础:
- 开发板厂商的 BSP 通常基于芯片厂商的 BSP 进行二次开发。
- 开发板厂商添加与开发板相关的设备树、驱动和示例代码。
-
两者可互为补充:
- 开发板厂商的 BSP 易用性更强,但可能只支持部分功能。
- 芯片厂商的 BSP 更通用,适合复杂项目开发。
5. 具体 BSP 安装和使用流程
无论 BSP 来源,使用方式类似:
- 下载 BSP 源码(从芯片厂商或开发板生产商)。
- 配置内核和设备树(根据项目需求选择功能)。
- 编译内核、设备树和文件系统。
- 烧录生成的镜像到硬件,启动开发板。
- 运行 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. 准备工作
首先,确保已经安装了必要的编译工具链(如gcc和make)以及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内核,并在开发板上使用它。

3808

被折叠的 条评论
为什么被折叠?



