- 博客(53)
- 收藏
- 关注
原创 附录_板上Qt开发环境速查
本文为FS-MP1A板上Qt开发环境速查手册,聚焦能力边界与快速上手。核心要点:使用buildroot交叉编译工具链(qmake+arm-none-linux-gnueabihf-g++),运行必带-platform linuxfb;仅支持linuxfb后端,禁用QML/OpenGL;屏幕480×854,触摸通过evdev支持多点;无中文字体、无声卡。推荐命令行流程:qmake → make → sudo cp to /opt → ssh run -platform linuxfb。调试用日志重定向与fb0
2026-10-10 08:29:33
287
原创 41_番外_板上桌面_Qt自制启动器
本篇打造基于Qt的板上桌面系统,实现纯Painter自绘界面,集成状态栏(CPU/内存/时间/LED控制)与三款应用卡片(像素马里奥、系统监视器、Hello World)。通过QProcess管理子进程生命周期,程序退出自动返回桌面;结合init.d脚本实现开机自启,使开发板上电即用。支持触摸启动、状态实时刷新与远程控制,完整呈现“从命令行工具到迷你设备”的蜕变,为实验成果提供统一入口。
2026-10-10 08:28:20
307
原创 40_番外_板上系统监视器_Qt读系统状态与触屏控LED
本文展示在 FS-MP1A 开发板上运行自研系统监视器,通过 Qt 实时读取 /proc 与 /sys 中的 CPU、内存、负载、温度等状态,并以像素风仪表盘呈现。支持单点触控操作 LED 模式切换:手动(MAN)、流水(FLOW)、闪烁(BLINK)、磁盘活动(DISK)及负载跟随(FOLLOW),实现软硬件联动。程序自动恢复启动前的 LED 状态,源码全公开于仓库,完整复现仅需前置环境配置。
2026-10-09 08:34:04
439
原创 39_番外_板上像素马里奥_Qt自制游戏
在 FS-MP1A 开发板上,仅用 QPainter 与纯代码实现自研像素马里奥:零图片素材、零第三方库、全部图形由字符画生成,支持触控操作、状态机与最高分存档。工程三件套完整开源,适配 480×854 屏幕,逻辑分辨率 240×400 整数倍缩放,实机运行流畅,展现嵌入式图形开发极限创意。
2026-10-09 08:33:35
391
原创 38_实验三十七_Qt交叉开发环境与第一个应用
本实验在Ubuntu上配置Qt Creator交叉开发环境,将Buildroot生成的ARM交叉工具链(gcc/gdb/qmake)注册为Kit,开发板设为Generic Linux设备,完成SSH部署与远程调试。导入Hello World项目后,通过-platform linuxfb参数编译并一键部署至开发板屏幕,成功显示按钮;结合-g -O0与取消Shadow Build,实现远程断点调试。全链路打通“主机写代码、板子显效果”的嵌入式GUI开发闭环,为后续QT应用开发奠定基础。
2026-10-09 08:32:58
174
原创 37_实验三十六_buildroot支持QT5与新系统启动
LVGL 与 QT 之间课件选 QT——理由在 10.1:LVGL 虽然也能跑 Linux,但要自己移植、比较复杂;QT 被 Buildroot/Yocto 集成,做根文件系统时勾选即得(运行环境:各种库与环境变量;开发环境:交叉工具链 + qmake)。Buildroot 目前只支持 QT5、不支持 QT6。eglfs(要 OpenGL/EGL 栈)、linuxfb(直接用传统 framebuffer)、wayland、xcb(X.org)。我们选linuxfb——跑 QT 程序时要加参数。
2026-10-09 08:30:56
118
原创 36_实验三十五_设备树版LED驱动
本实验将LED驱动与硬件描述分离,通过设备树定义寄存器地址(reg)、兼容性(compatible)及状态(status),驱动使用OF函数从设备树读取配置,实现“同一份驱动适配不同硬件”。步骤包括:在设备树中添加LED节点并重编dtb;加载新dtb启动系统;编译部署驱动并测试。验证了设备树驱动的可移植性与高效调试优势,为后续硬件扩展奠定基础。
2026-10-09 08:29:43
238
原创 35_实验三十四_设备树语法与OF函数
本文详解设备树的起源、语法与内核使用机制。针对早期ARM Linux硬编码板级信息的弊端,林纳斯怒斥推动设备树(FDT)普及,实现硬件描述与驱动代码分离。设备树以.dts源文件编写,经dtc编译为.dtb二进制格式,由Bootloader传入内核。核心语法包括:节点与属性结构、标签引用(&label)实现配置覆盖与追加、标准属性如compatible(驱动匹配)、status(设备启停)、reg(地址映射)、#address-cells/#size-cells(地址解析规则)。通过实例说明如何在板级DTS中
2026-10-08 00:21:33
247
原创 34_实验三十三_LED驱动两个版本
本实验基于STM32MP157A开发板,实现LED驱动的两个版本:寄存器直控(led.c)与自动创建设备文件(mdevled.c)。前者手动通过mknod建立设备文件,后者使用alloc_chrdev_region、cdev_add、class_create和device_create实现自动注册。两版均通过BSRR寄存器控制PZ5引脚,写入1亮灯、0灭灯。测试程序ledApp统一接口,验证驱动功能。实验强调设备文件自动生成、注销顺序及内核资源管理,为后续驱动开发奠定基础。
2026-10-08 00:20:42
245
原创 33_实验三十二_GPIO寄存器与LED硬件
本实验以STM32MP157A开发板为例,详解GPIO寄存器控制原理。GPIO是外设操作的基础,其输入/输出、复用等功能均由寄存器配置决定。通过分析七组核心寄存器(MODER、OTYPER、OSPEEDR、PUPDR、IDR、ODR、BSRR),掌握引脚模式设置与电平控制方法。结合原理图,明确三颗绿色LED连接于GPIOZ的PZ5/PZ6/PZ7,采用高电平点亮(正逻辑)。实验确立“读写内存地址即控制硬件”的核心思想,为后续编写寄存器直控与设备文件驱动奠定基础。
2026-10-08 00:20:22
329
原创 附录_换机换板快速恢复到实验三十一结束状态
本文为《第7章 字符设备驱动》的恢复手册,指导换电脑或换板后快速复现实验三十一结束态。核心要点:驱动模块、测试程序位于根文件系统(NFS共享),设备文件在tmpfs中需重建。恢复流程包括:解压驱动源码并编译(改KERNELDIR路径)、拷贝.ko至根文件系统、执行depmod登记、交叉编译测试程序、最后通过modprobe与mknod完成全链验证。关键避坑:所有拷贝操作须sudo,taint提示可忽略,toychar2/3不可同时加载。三条验收判据通过即完成恢复。
2026-10-08 00:19:58
262
原创 32_实验三十一_toychar虚拟字符设备驱动
本实验实现首个内核模块toychar虚拟字符设备,分三步演进:1)注册模块初始化/退出函数;2)注册字符设备(主设备号200);3)实现open/read/write/release操作并使用copy_to_user/from_user完成用户与内核空间数据交换。通过Makefile编译生成.ko模块,加载后用mknod创建设备文件,配合用户态测试程序验证读写功能,掌握驱动开发核心流程。
2026-10-08 00:19:20
342
原创 31_实验三十_驱动分层与模块机制
本文详解驱动分层与模块机制,揭示从应用程序到硬件的四层架构:应用层、库层、内核层、驱动层。重点解析insmod时内核如何通过设备号与file_operations结构体实现文件操作到驱动函数的映射,阐明字符设备驱动的核心三要素——设备号注册、file_operations定义、模块加载卸载机制,为下一篇从零编写字符设备驱动奠定基础。
2026-10-07 12:53:40
265
原创 附录_换机换板快速恢复到实验二十九结束状态
换电脑或板子后,快速恢复实验二十九结束态:依托NFS共享的两套根文件系统(busybox/buildroot)、buildroot源码树及NFS配置,通过解包或重编源码、配置NFS服务、设置板子启动指向,实现无人值守自动tftp加载内核、NFS挂载根文件系统并登录。关键点:补全depmod配置、避免运行中删除根目录,确保modprobe无报错、debugfs已挂载,双根可切换。
2026-10-07 12:52:08
130
原创 30_实验二十九_buildroot根文件系统微调
本实验通过调整bootargs使系统从NFS加载buildroot根文件系统,解决启动时的权限与模块依赖问题。针对课件中常见的Set UID、/lib/modules缺失、depmod配置等四类报错,实测发现因普通用户解包导致busybox未保留s位,故无需去s操作;仅需修复属主并创建模块目录结构。进一步优化命令行提示符、挂载debugfs,并掌握rcS自启机制,实现根文件系统“能启动”到“趁手用”的跃迁,为后续驱动调试与自启脚本开发奠定基础。
2026-10-07 12:51:36
319
原创 29_实验二十八_buildroot配置与编译
本实验基于Buildroot构建嵌入式Linux根文件系统,通过menuconfig配置目标架构(ARM little endian, cortex-A7)、工具链(复用gcc-arm-9.2)、用户体系及第三方软件包(如kmod、ssh),实现命令、目录、权限、依赖的全自动管理。相较BusyBox方案,Buildroot省去手动建目录、配用户、理依赖等繁琐操作,一键生成完整根文件系统。编译后输出rootfs.tar,可直接挂载至NFS供后续实验使用,显著提升开发效率。
2026-10-07 12:43:33
320
原创 28_实验二十七_NFS挂载根文件系统
本实验通过NFS实现开发板挂载Ubuntu上的根文件系统,完成“改根不烧卡”闭环。在服务器端配置NFS共享目录,启用v2协议并开放root权限;客户端修改bootargs,使用root=/dev/nfs nfsroot=...启动。内核需开启uevent helper并创建.scmversion文件以确保模块版本一致。成功后,板子可直接从网络加载根文件系统,后续实验无需反复烧写,大幅提升开发效率。
2026-10-07 12:28:58
270
原创 27_实验二十六_etc与dev目录构建
本实验在BusyBox根文件系统基础上,构建etc与dev目录,完善系统启动机制。通过编写inittab实现init进程的初始化流程(sysinit、askfirst等),配置rcS脚本自动挂载文件系统并启动mdev设备管理,设置fstab和profile以支持动态设备创建与命令行提示符。结合内核配置,完成/dev目录的自动化建设,使根文件系统从“躯壳”变为可运行的完整系统,为后续上板点火奠定基础。
2026-10-05 00:16:51
280
原创 26_实验二十五_busybox构建根文件系统
本实验基于STM32MP157A开发板,使用交叉编译器arm-none-linux-gnueabihf-编译BusyBox 1.32.0,构建Linux根文件系统骨架。通过配置menuconfig启用mdev、depmod等关键功能,避免后续实验因缺失依赖而失败。编译后安装生成/bin、/sbin等目录,并将交叉编译器自带的glibc共享库拷贝至lib目录,确保动态链接正常。最终实现根文件系统核心命令集与运行环境的完整搭建,为后续实验奠定基础。
2026-10-05 00:12:53
303
原创 25_实验二十四_根文件系统全景
本文详解根文件系统的核心概念:其本质是Linux启动后挂载的初始文件系统,包含/bin、/sbin、/dev、/etc、/lib等必需目录,承载命令、配置、库与设备文件。强调内核与根文件系统的分工,区分“文件系统”的物理与虚拟含义,并解析/dev中字符/块设备文件的主次号机制及mknod创建方式。通过ls -l首字母识别文件类型(如c为字符设备、l为符号链接),揭示inode作为文件唯一标识的原理,为后续构建自定义根文件系统奠定认知基础。
2026-10-05 00:04:19
607
原创 附录_换机换板快速恢复到实验二十三结束状态
换电脑或开发板后,快速恢复至实验二十三结束状态:通过 git bundle 恢复内核源码树,重装工具链与 tftp 服务器,重新烧写 U-Boot 及环境变量,从 tftp 加载自编内核与设备树。三步判据验收:U-Boot 正常、内核点火成功、系统自动登录。核心资产(源码、工具链、二进制)均在资料包与 git 仓库中可追溯,确保第6章实验顺利启动。
2026-10-05 00:02:11
242
原创 24_实验二十三_运行内核
本实验成功将自编内核uImage与设备树dtb通过TFTP加载至内存,经bootm点火启动。首阶段无bootargs运行,触发“找不到根”panic,但确认eMMC盘号为mmcblk2p4;第二阶段设置root=/dev/mmcblk2p4,成功挂载出厂根文件系统,进入Linux命令行,终结第5章“内核找不到根”难题,完成从编译到运行的闭环验证。
2026-10-05 00:01:09
1068
原创 23_实验二十二_移植网卡驱动
本实验将MAE0621A网卡驱动移植至Linux内核,通过四步协同:1)替换drivers/net/phy/目录下的maxio.c与phy_device.c;2)在Makefile中添加编译项;3)在Kconfig中配置选项;4)在设备树中启用ethernet0节点。重点在于覆盖原生phy_device.c以适配芯片“先写后读”的特殊需求,并确保三件套(代码、Makefile、Kconfig)完整联动。此操作为后续网络挂载根文件系统奠定基础,是实现高效开发调试的关键一步。
2026-10-04 23:57:55
420
原创 22_实验二十一_移植eMMC驱动
本实验通过在设备树 fsmp1x.dtsi 中添加 &sdmmc2 节点,启用板载 eMMC 支持。内核已内置 STM32 SDMMC 驱动(CONFIG_MMC_STM32_SDMMC=y),仅需补全设备树描述即可让内核识别 eMMC。重点配置包括引脚复用、电源供应、8位总线宽度及 status = "okay"。完成修改后重编内核与 dtb,确保实验二十三可成功挂载根文件系统。
2026-10-03 13:24:17
256
原创 21_实验二十_编译内核与设备树
本实验成功编译出自定义的 uImage 和 stm32mp157a-fsmp1a.dtb,基于实验十九的内核源码与配置,通过修改顶层 Makefile 添加架构与交叉编译器定义,并执行 make uImage LOADADDR=0xC2000040 与 make dtbs 完成构建。产物分别位于 arch/arm/boot/ 和 arch/arm/boot/dts/,为后续实验二十一至二十三的驱动移植与 TFTP 点火奠定基础。文件版本带 git 哈希,便于识别,大小差异不影响点火验证。
2026-10-03 13:23:11
383
原创 20_实验十九_内核源码准备与配置
本实验在Ubuntu虚拟机中完成,核心任务是为FS-MP1A开发板准备Linux内核编译环境。首先下载并安装ARM官方gcc-arm-9.2交叉编译器(通过清华TUNA镜像),确保后续编译busybox及内核的兼容性;其次安装u-boot-tools以获取mkimage工具,用于生成uImage;接着解压ST提供的5.4.31内核源码,并按series文件顺序打上23个补丁,使内核支持STM32MP1平台;最后合并multi_v7_defconfig与fragment配置,生成并保存stm32_fsmp1a
2026-10-02 21:54:49
342
原创 19_实验十八_认识Linux内核
本文为《移植Linux内核》系列开篇认知篇,介绍内核版本号(如5.4.31)、源码目录结构及“内核文件四兄弟”(vmlinux、Image、zImage、uImage)的关系。通过分析Makefile中的版本字段,理解版本号含义;梳理顶层目录功能,明确arch、drivers、dts等关键路径;强调内核与根文件系统分离、设备树作为硬件说明书的作用,为后续自主编译、配置、移植内核奠定基础。
2026-10-02 21:51:56
346
原创 18_实验十七_其他命令与自定义启动变量
本实验通过reset、run、go三条命令,掌握U-Boot中自定义启动变量的使用。重点利用run命令结合自定义环境变量(如mybootemmc、mybootnet),实现eMMC与网络启动的一键切换,提升调试效率。实验验证了启动路径的判别依据(TFTP/bytes read)及复位原因(0x54软复位),为后续章节的内核替换与NFS根文件系统调试奠定基础。
2026-10-01 21:46:25
366
原创 17_实验十六_启动Linux内核命令
本实验通过TFTP将uImage内核与设备树加载至DRAM,使用bootm命令成功启动Linux内核,破解了此前autoboot中“bootm找不到内核”的谜题。关键在于:点火前必须先“装弹”——即确保内存中有合法镜像。将tftp与bootm三步固化至bootcmd后,实现自动网络启动。实验揭示了bootm语法、镜像格式、环境变量配置及看门狗复位机制等核心知识点,为后续自定义启动流程与内核移植奠定基础。
2026-10-01 21:46:19
339
原创 16_实验十五_ext4文件系统操作命令
本实验基于FS-MP1A开发板,演示U-Boot中ext4文件系统操作命令:ext4ls查看eMMC 1:2分区内容,确认其为有效ext4格式并包含出厂启动文件;ext4load读取内核镜像至内存;结合tftp下载,使用ext4write将文件写入eMMC分区。全程验证“网络→内存→落盘”链路,强调文件名、路径、大小校验及写后复扫的重要性,为后续实验奠定基础。
2026-09-30 23:22:30
288
原创 15_实验十四_eMMC和SD卡操作命令
本实验通过U-Boot的mmc命令族,全面探查FS-MP1A开发板上eMMC与SD卡的存储结构。重点实测并确认:设备号0为SD卡、1为eMMC,当前设备由启动源决定;eMMC采用GPT分区表,共五分区(ssbl/bootfs/vendorfs/rootfs/userfs),各分区起止扇区已精确获取。通过mmc info/list/dev/part/read完成基础操作验证,明确扇区单位(512字节)、进制转换规则及分区编号体系。强调write/erase/hwpartition等高危命令仅作了解,禁止在U-
2026-09-30 23:16:33
316
原创 实验十三 网络操作命令——Ubuntu 里配置 TFTP 服务,板子第一次从网络拉文件
本实验在Ubuntu虚拟机中配置tftpd-hpa TFTP服务,实现开发板通过网络下载内核镜像。基于实验九的直连网络拓扑,将虚拟机网卡桥接至宿主机USB网卡,设定服务器IP为192.168.0.100,板子IP为192.168.0.8,并修改serverip环境变量。通过ping验证连通性后,使用tftp命令从服务器下载uImage文件至板子内存,完成首次网络拉取。该通道为后续内核调试奠定基础,且提前完成第5章所需服务配置。
2026-09-29 10:48:17
626
原创 附录 开发环境搭建——Linux系统安装
本文为《开发环境搭建——Linux系统安装》的附录,详细记录在Windows中通过VMware Workstation安装Ubuntu 20.04 LTS的全过程,包括虚拟机创建、硬件配置(如内存、处理器、网络模式设为“仅主机”)、磁盘容量设置(建议100GB)及文件共享。强调使用desktop-amd64版本ISO以确保后续实验兼容性,并指出原文编号笔误与实际盘符差异(Z:盘)。关键步骤均标注“关联后续实验”,便于问题回溯。第四节补充实操中遇到的网络配置与环境差异问题,指导后续实验网络调试。
2026-09-29 10:46:49
596
原创 13_实验十二_U-Boot命令行与环境变量操作
本实验聚焦U-Boot命令行与环境变量的使用,无需编译或烧写,仅通过串口操作STM32MP>提示符完成。重点掌握:倒计时设置(setenv bootdelay 5 + saveenv)、帮助系统(help/?)、命令缩写与Tab补全、三条查询命令(bdinfo/printenv/version),以及环境变量的增删改查与保存纪律。强调“改完必存”,确保配置持久有效,为后续内核移植与网络启动奠定基础。
2026-09-28 00:08:14
333
原创 附录_换机换板快速恢复到实验十一结束状态
换电脑或板子后,快速恢复实验十一完成状态:驱动与配置在git中,启动镜像在SD卡,环境变量需重置。仅需三步:1)安装工具链并确认源码干净;2)若新卡则分区重建;3)重编u-boot.stm32并烧写至sdb3,再执行env default -a清除遗留环境。无需重改驱动或menuconfig,确保串口输出符合四条判据(TF-A、U-Boot横幅、功能正常、环境正确),即可直接进入实验十二。
2026-09-27 02:44:38
166
原创 12_实验十一_trusted版U-Boot移植
本实验完成U-Boot从basic版到trusted版的移植,核心是将FSBL由SPL替换为TF-A。基于前期驱动适配成果,仅需在menuconfig中重做F-1、F-3、F-5三处配置改动,并加载ST原厂trusted配置。通过保存basic配置、distclean清理、复制并加载trusted defconfig,最终编译生成u-boot.stm32,烧写至SD卡sdb3分区。启动后显示in trusted mode,验证成功。全程无需重写驱动或设备树,体现“先basic后trusted”移植策略的高效
2026-09-26 13:29:21
473
原创 11_实验十_F-6支持eMMC
实验十成功为F-6支持eMMC,通过修改设备树使U-Boot识别板载eMMC。虽驱动已存在,但因设备树未配置SDMMC2,导致无法访问。本实验仅需在stm32mp15xx-fsmp1x.dtsi中添加&sdmmc2节点,并在u-boot.dtsi中更新aliases与dm-spl配置,无需编写新代码。经核对引脚复用定义一致后,重新编译烧写,U-Boot启动日志出现MMC1即表示成功。此举为后续系统移植与量产启动奠定基础,完成F系列驱动修复闭环。
2026-09-26 13:24:51
298
原创 10_实验九_F-5替换网卡驱动
实验九修复网卡驱动问题,针对FS-MP1A开发板更换为MAE0621A网卡芯片后U-Boot无法初始化的问题。通过替换dwc_eth_qos.c、改造phy.c并新增maxio.c三个驱动文件,修改include/phy.h添加函数声明,更新Makefile与Kconfig,并在menuconfig中启用PHY_MAXIO选项,最终成功编译烧写,实现网络功能正常,完成ping通验证。
2026-09-25 02:48:21
694
原创 09_实验八_F-4关闭LTDC显示
本实验针对FS-MP1A开发板在U-Boot阶段无需显示的问题,关闭未使用的LTDC显示控制器。通过将设备树中<dc节点的status = "okay"改为"disabled",禁用该控制器,避免潜在驱动冲突。修改仅涉及一行,保留port段以确保sii9022等外设引用有效。编译后验证无报错,串口输出正常,成功消除冗余驱动,为后续移植扫清障碍。
2026-09-25 02:43:14
429
原创 08_实验七_F-3去掉ADC功能
实验七 F-3 修复 U-Boot 启动报错:因 FS-MP1A 开发板无开机电流检测电路,而 U-Boot 默认启用 ADC 功能导致 stm32 vrefbuf timed out 及 board_check_usb_power 失败。通过 make menuconfig 关闭两项配置——CONFIG_CMD_ADC(命令行 ADC 工具)与 CONFIG_ADC(ADC 驱动),彻底移除 ADC 功能,消除报错。修改后重新编译、烧写镜像,启动日志中相关错误消失,系统正常进入 STM32MP> 命令行。
2026-09-24 00:15:02
270
yesplaymusic-0.4.9.pacman
2025-09-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅