手把手教你学BSP(11.4):--BSP实例:基于Intel x86架构的PC平台的BSP

安装yocto系统过程记录 yocto os可以高度定制,针对不同硬件进行裁剪,高度适配各种设备,因此在嵌入式系统中有广泛应用。 我的目标是在intel的某款pc上安装yocto os,主要参考的资料为: [1] https://www.yoctoproject.org/docs/2.4.2/yocto-project-qs/yocto-project-qs.html#yp-resources 这个是yocto 2.4.2的... 阅读详情

目录

案例背景

步骤一:硬件初始化

1.1 配置BIOS/UEFI

步骤二:Bootloader配置

2.1 获取并配置GRUB

2.1.1 安装GRUB

2.1.2 配置GRUB

2.1.3 更新GRUB配置

2.1.4 安装GRUB到目标磁盘

步骤三:设备驱动编写

3.1 编写GPIO设备驱动

3.2 编写USB设备驱动

步骤四:内核配置和编译

4.1 获取并配置Linux内核

步骤五:生成最终映像

5.1 创建文件系统映像

5.2 合并所有组件

总结


基于Intel x86架构的PC平台的BSP。这个实例将涵盖硬件初始化、设备驱动编写、Bootloader配置、内核配置和编译等步骤。我们将使用GRUB作为Bootloader,Linux内核作为操作系统,并编写一些简单的设备驱动。

案例背景

假设我们要为一个基于Intel Core i5处理器的PC平台开发一个Linux BSP。该平台具有以下硬件特性:

  • Intel Core i5 处理器
  • 8GB DDR4 RAM
  • 256GB SSD 存储
  • USB 接口
  • HDMI 输出
  • Ethernet 接口
  • Wi-Fi 和蓝牙

步骤一:硬件初始化

1.1 配置BIOS/UEFI

在实际开发中,硬件初始化通常由BIOS/UEFI完成。我们可以确保BIOS/UEFI配置正确,以便后续的Bootloader和内核能够正常启动。

步骤二:Bootloader配置

2.1 获取并配置GRUB

GRUB(Grand Unified Bootloader)是常用的Linux Bootloader。我们将使用GRUB来引导Linux内核。

2.1.1 安装GRUB
 

sh

深色版本

# 在开发机器上安装GRUB
sudo apt-get update
sudo apt-get install grub-pc
2.1.2 配置GRUB

编辑 /etc/grub.d/40_custom 文件,添加启动条目。

 

sh

深色版本

# /etc/grub.d/40_custom

menuentry 'Custom Linux' {
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='(hd0,gpt1)'
    linux /vmlinuz root=/dev/sda2 ro
    initrd /initrd.img
}
2.1.3 更新GRUB配置
 

sh

深色版本

sudo update-grub
2.1.4 安装GRUB到目标磁盘
 

sh

深色版本

sudo grub-install /dev/sda

步骤三:设备驱动编写

3.1 编写GPIO设备驱动
 

c

深色版本

// drivers/gpio/x86_gpio.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/of.h>
#include <linux/of_gpio.h>

static struct gpio_desc *led_gpio;

static int __init x86_gpio_init(void)
{
    struct device_node *np;
    np = of_find_compatible_node(NULL, NULL, "x86,gpio-led");
    if (!np) {
        pr_err("Failed to find GPIO node\n");
        return -ENODEV;
    }

    led_gpio = of_get_gpio(np, 0);
    if (!gpio_is_valid(led_gpio)) {
        pr_err("Invalid GPIO\n");
        return -EINVAL;
    }

    gpio_direction_output(led_gpio, 0);

    pr_info("GPIO driver initialized\n");
    return 0;
}

static void __exit x86_gpio_exit(void)
{
    gpio_set_value(led_gpio, 0);
    gpio_free(led_gpio);
    pr_info("GPIO driver exited\n");
}

module_init(x86_gpio_init);
module_exit(x86_gpio_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("x86 GPIO Driver");
3.2 编写USB设备驱动
 

c

深色版本

// drivers/usb/x86_usb.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/usb.h>

static struct usb_driver x86_usb_driver = {
    .name = "x86_usb",
    .id_table = x86_usb_id_table,
    .probe = x86_usb_probe,
    .disconnect = x86_usb_disconnect,
};

static const struct usb_device_id x86_usb_id_table[] = {
    { USB_DEVICE(0x1234, 0x5678) },
    { /* end of list */ }
};
MODULE_DEVICE_TABLE(usb, x86_usb_id_table);

static int x86_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    pr_info("USB device probed\n");
    // 初始化USB设备
    // ...
    return 0;
}

static void x86_usb_disconnect(struct usb_interface *interface)
{
    pr_info("USB device disconnected\n");
    // 清理USB设备
    // ...
}

static int __init x86_usb_init(void)
{
    pr_info("USB driver initialized\n");
    return usb_register(&x86_usb_driver);
}

static void __exit x86_usb_exit(void)
{
    usb_deregister(&x86_usb_driver);
    pr_info("USB driver exited\n");
}

module_init(x86_usb_init);
module_exit(x86_usb_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("x86 USB Driver");

步骤四:内核配置和编译

4.1 获取并配置Linux内核
 

sh

深色版本

# 克隆Linux内核仓库
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux

# 切换到稳定的内核版本
git checkout v5.10.0

# 配置内核
make menuconfig
# 或者使用默认配置
make defconfig

# 编译内核
make -j4

# 编译模块
make modules

# 编译设备树(如果需要)
# make dtbs

步骤五:生成最终映像

5.1 创建文件系统映像

使用 Buildroot 或其他工具创建文件系统映像。

 

sh

深色版本

# 克隆Buildroot仓库
git clone https://github.com/buildroot/buildroot.git
cd buildroot

# 切换到支持x86的配置
make x86_64_defconfig

# 编译文件系统映像
make
5.2 合并所有组件

将生成的内核映像、设备树和文件系统映像合并到一个最终的映像文件中。

 

sh

深色版本

# 假设生成的文件如下:
# linux/arch/x86/boot/bzImage
# buildroot/output/images/rootfs.ext4

# 创建最终映像文件
sudo dd if=linux/arch/x86/boot/bzImage of=/dev/sda1
sudo dd if=buildroot/output/images/rootfs.ext4 of=/dev/sda2

总结

通过以上步骤,我们完成了一个基于Intel x86架构的PC平台的Linux BSP开发过程,包括硬件初始化、设备驱动编写、Bootloader配置、内核配置和编译,以及最终映像的生成。每个步骤都非常重要,确保每一步都正确无误才能使整个系统正常运行

Linux嵌入式学习第四节:BSP工程管理 前言 本文作为本人学习Linux嵌入式记录文档,仅供参考。 开发板:正点原子阿尔法开发板(I.MX6ULL) 环境:Ubuntu 20.04 (LTS) (内核版本:Linux 5.4.0) 交叉编译器:arm-linux-gnueabihf 4.9.4 一、目的 1、规范开发流程 2、模块化,方便后续开发调试 3、使工程更加美观 二、过程 1、为什么进行BSP工程管理 在我学习是,看到正点原子关于这一讲的视频前,看到BSP我就深深的迷茫了,啥叫BSP啊,本着面向百度编程的基本思路,. 阅读详情

相关推荐

深入解析ATCA/AMC架构:基于PowerPC的嵌入式通信计算平台设计实践

在嵌入式系统与通信设备领域,模块化与标准化是构建高可靠、可扩展硬件平台的核心思想。其基本原理是通过定义统一的机械、电气与互连规范,将计算、存储、网络等功能解耦为独立模块,再通过背板进行集成。这种架构的技术价值在于极大降低了系统集成的复杂度与开发周期,使工程师能聚焦于上层应用创新。在电信、工业控制等关键任务场景中,它对保障系统的长期稳定运行与平滑升级至关重要。具体到技术实现,AdvancedTCA (ATCA) 与 AdvancedMC (AMC) 标准定义了从机箱、散热、管理到模块间高速互联(如PCI Ex

weixin_34218890的博客 477

BSP和PC机主板上的BIOS区别

BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化..)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备

1494

VMware中搭建VxWorks 6.9虚拟目标机:从bootrom到Workbench调试全指南

在嵌入式开发中,实时操作系统(RTOS)的验证与调试往往依赖特定硬件平台,而虚拟化技术为开发者提供了低成本、高灵活性的替代路径。VxWorks作为广泛应用的RTOS,其x86架构支持通过虚拟机软件构建完整的运行环境。利用VMware模拟标准PC硬件,可以加载VxWorks 6.9的BSP与bootrom,实现网络引导、FTP镜像加载以及目标机Shell交互。这种方案不仅适用于驱动验证、应用开发与自动化测试,还能通过网络协议让宿主机与目标机无缝通信。Wind River Workbench作为集成开发环境,通

weixin_34199405的博客 386

008-BSP学习笔记-buildroot构建

buildroot构建文件系统

qq_38292379的博客 1017

MPC5200与mobileGT平台:汽车电子经典架构的设计哲学与实战解析

在嵌入式系统与汽车电子领域,硬件平台选型与软件架构设计是决定项目成败的核心。其原理在于通过高度集成的SoC(系统级芯片)与成熟的软件栈,在严苛环境下实现稳定、实时的多任务处理。这种技术方案的价值在于能够显著降低系统复杂度、加速产品从原型到量产的进程,并确保长期可靠性。典型的应用场景包括车载信息娱乐系统、智能座舱以及需要集成导航、通信与预警功能的域控制器。本文以经典的MPC5200处理器及其mobileGT生态为例,深入剖析其“All-in-One”的集成设计、革命性的BestComm DMA控制器以及分层解

weixin_34239592的博客 408

ARM、x86、RISC-V三大架构中断流程深度对比:一条主线看懂GIC、APIC与PLIC

中断是嵌入式系统与底层软件开发中响应异步事件的核心机制,其本质是处理器在执行流中插入一段优先级更高的处理逻辑。中断控制器作为连接外设与CPU的枢纽,负责中断源的收集、优先级仲裁与分发,不同架构的实现方式各有特色:ARM采用GIC统一管理中断状态机,x86依赖APIC与IDT实现向量号驱动的查表分发,RISC-V则通过PLIC与CLINT配合CSR寄存器提供极致精简的软件自管理模型。理解三者共通的“请求-仲裁-响应-处理-恢复”主线,不仅有助于快速上手内核移植、驱动开发和BSP bringup,更能举一反三地

weixin_33824363的博客 384

Intel D2000 Quark微控制器开发套件:x86架构嵌入式开发实战指南

微控制器(MCU)作为嵌入式系统的核心,其架构选择直接影响开发体验与系统性能。x86架构凭借其成熟的指令集和广泛的软件生态,在工业控制、物联网边缘计算等领域展现出独特优势。其原理在于提供与PC环境一致的开发工具链和确定性执行时序,技术价值体现在降低现有x86代码的移植成本与风险,并满足工业场景对实时性和可靠性的严苛要求。应用场景广泛覆盖智能家居节点、工业数据采集及低功耗网络设备等。本文聚焦于Intel D2000 Quark微控制器开发套件,深入解析其如何为开发者提供开箱即用的硬件平台与软件栈,并融入对低功

weixin_30493401的博客 333

手把手教你学BSP(8.1)--BSP 设备驱动开发的选择驱动模型:Linux 字符设备驱动模型

顺序访问:字符设备通常支持顺序访问,每次读写操作的数据量较小。非缓冲:字符设备通常是非缓冲的,即数据直接从设备读取或写入设备。多用户支持:字符设备可以支持多个用户同时访问。c深色版本return 0;return 0;return 0;int ret;// 动态分配设备号return ret;// 初始化字符设备return ret;// 创建设备类// 创建设备文件return 0;

MHD0815的博客 881

Intel 与 Yocto 项目的深度融合:全面解析与平台对比

meta-intel 是 Intel 维护的 Yocto 元数据层,包含多个子层,以支持不同类别的 Intel 硬件。:通用 Intel 硬件支持,包括 x86_64 平台的基本优化。:适用于 Intel Core 系列处理器,支持工业与消费级嵌入式应用。:提供 Intel QuickAssist Technology(QAT)加速库,适用于网络加速应用。:支持 Intel FPGA 产品,包括 SoC FPGA 的 Linux 适配。

Interview_TC的博客 1273

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 810

CNC数控机床数据采集,CNC数据采集 设备联网 车间数字化

cnc数据采集 cnc机床数据采集 免受权采集 设备联网

weixin_38175277的博客 2762

AI PC处理器ARM架构-引入NPU和大模型

AI PC处理器架构变化:ARM低功耗、引入NPU和大模型

2037

学习笔记( 11 ) - 解决:finalshell连接虚拟机(ubuntu)超时,主机ping不通虚拟机,主机没有VMnet8网卡, Connection refused: connect

解决:finalshell连接虚拟机(ubuntu)超时,主机ping不通虚拟机,主机没有VMnet8网卡, Connection refused: connect

烟溪彭于晏的博客 2万+

coreboot 安全架构实战指南:验证启动、度量启动、Intel TXT 与内存清零

> 导读:coreboot 的固件安全体系由四大模块构成——Google vboot 验证启动、TPM 度量启动(Measured Boot)、全 DRAM 内存清零(Memory Clearing)与 Intel TXT 可信执行技术,它们共同回答"固件是否可信、可信证据如何记录、机密残留如何清除"三个核心问题。读完本文,你将掌握 vboot 的 SPI Flash 分区布局与签名流程、度量启动

gitblog_00597的博客 655

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1344

LangChain4j 开发

市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上): 构建

m0_62943934的博客 2774

VMware中搭建VxWorks 6.9开发环境:从BSP配置到Workbench调试

实时操作系统(RTOS)在工业控制与嵌入式领域应用广泛,其中VxWorks 6.9凭借高可靠性和实时性,仍是许多旧项目的核心。然而,真实x86开发板停产、硬件调试不便,让开发者转向虚拟化方案。VMware通过模拟标准PC硬件,使VxWorks的BSP能够直接识别网卡、串口等设备,从而在虚拟机中完成编译、引导、FTP下载和任务调试的全流程。理解bootrom引导、启动行参数、WDB调试组件等原理,是打通虚拟环境的关键。这种方案不仅降低了入门门槛,也便于老项目维护与自动化测试。本文基于实际经验,细致介绍从VMw

weixin_33805743的博客 412

FX5U PLC运动控制库安装(PLCopen Motion Control FB参考)

下面我们介绍三菱FX5U PLC的运动控制库PLCopen Motion Control FB的安装。

RXXW_Dor的博客 1502

英特尔Edison开发板深度解析:x86架构在嵌入式开发中的实践与挑战

嵌入式开发是物联网和智能硬件领域的核心技术,其核心在于将计算能力嵌入到专用设备中,实现特定功能。从原理上看,嵌入式系统通常基于微控制器或微处理器,运行实时操作系统或精简Linux,通过GPIO、I2C、SPI等接口与传感器、执行器交互。在技术演进中,ARM架构凭借其高能效比占据了主导地位,而x86架构则以其成熟的软件生态和强大的计算性能,在需要复杂处理能力的边缘计算场景中展现出独特价值。本文以英特尔Edison开发板为例,探讨x86架构在嵌入式领域的应用实践。Edison板集成了双核Atom处理器和Quar

weixin_30247781的博客 383

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

coreboot 在 QEMU Q35 虚拟主板上的运行与 x86_64 实验支持指南

本文以 coreboot 的 `emulation/qemu-q35` 虚拟主板(对应 QEMU 的 `-M q35` 机器,芯片组为 q35/ich9)为主线,完整说明如何在 QEMU 中构建、运行与调试 coreboot,包括默认 32 位(i386)版本与实验性 x86_64 版本两种运行方式,以及如何使用 KVM 加速并识别潜在的固件缺陷。读完本文,你将掌握 qemu-q35 主板的构建配

gitblog_02539的博客 315

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

How to Make a Computer Operating System 第 1 章:x86 架构入门与本项目(devos)总体技术规格

> 本篇是开源教程《How to Make a Computer Operating System in C++》的第 1 章导读。它以 x86 架构(Intel 8086 以来的向后兼容指令集家族)为切入点,明确本项目将从零构建一个运行在 32 位 IBM PC 兼容机上的 UNIX 风格操作系统(仓库中命名为 devos),并逐条拆解其整体技术规格——从 C++ 内核、GRUB 引导、模块化驱

gitblog_00344的博客 208

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

国产芯片如何重塑工控机底层架构与现场实践

工控机作为工业自动化系统的硬件基石,其核心正经历从x86通用计算向国产化专用节点的范式迁移。这一转变源于工控场景对确定性、长生命周期和安全合规的本质需求,而非单纯性能比拼。飞腾、龙芯、兆芯、海光等国产芯片凭借宽温运行、原生实时支持、x86兼容或国密内建等差异化能力,在运动控制、边缘AI、HMI交互和安全可信等关键环节形成技术闭环。其价值不仅体现为供应链韧性提升,更在于驱动BSP适配、驱动移植、协议栈优化和系统加固等工程实践体系的重构。本文聚焦现场工程师真实痛点——OPC UA证书链重签、Modbus TCP

weixin_34162228的博客 171
上一篇: 手把手教你学BSP(11.3)--BSP实例:基于Raspberry Pi 4 Model B的Linux BSP开发实例
下一篇: 手把手教你学BSP(11.5)--BSP实例:基于NVIDIA Jetson Nano的Linux BSP
小蘑菇二号
博客等级 码龄9年 4万+粉丝 8228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

小蘑菇二号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值