[UBOOT][STM32]编写LED支持教程
@[toc] 前提1.目的:uboot启动时没有状态提醒,无法知道当前板子运行到了什么阶段2.所以需要一个LED来指示当前的U-BOOT状态 编写 参考:board/st/stm32f429-discovery/led.c 在自己的板级目录下makefile修改. 加入led.c的编译 12//board/st/stm32h750-art-pi/Makefileobj-y += led.o 添加led.c文件并编写 board/st/stm32h750-art-pi/led.c GPIO编号转换成引脚的宏已经写好了,对应修改成自己的引脚既可 gpio_direction_output(RED_LED, 1);这个就是配置后输出对应的电平,根据需要修改高低电平既可 1234567891011121314151617181920212223242526272829303132333435#include "acpi/acpi_device.h"#include <status_led.h...
[U-BOOT][STM32]设置使用SD卡中的linux程序启动
@[toc] https://github.com/wdfk-prog/u-boot/tree/art-pi-debug 前提 使用SD卡启动linux,可以方便linux的升级 当然SD卡linux去写入flash替换正在运行的linux程序也是可以的 操作步骤Kconfig配置 打开fat文件系统支持,这一块根据自己SD卡的格式化文件系统去配置. 这里就使用fat32去举例了. SD卡格式化程序可以使用格式化程序,这个是SD卡协会推荐的格式化程序,暂时没遇见格式化后无法识别的情况. 12CONFIG_CMD_FAT=yCONFIG_FS_FAT=y env或cli命令实现 可以编译时存入env变量中,直接从bootmenu中选择启动SD卡的linux还是flash中烧录的 12//stm32h750-art-pi.envbootmenu_0=load from SD=mmc dev 0;fatload mmc 0 0xC1000000 APT_Pi_Krl.itb.bin; bootm 0xC1000000; 这段代码也可以在CLI命令行环境中手动输入执行哦...
[U-BOOT][STM32]SD卡导入导出环境变量
@[toc] https://github.com/wdfk-prog/u-boot/tree/art-pi-debug 前提 u-boot的环境变量十分重要,可以说有了环境变量.u-boot的配置和灵活性得到了提高. 只有u-boot编译了相关程序,使用环境变量执行命令,可扩展性将会大大增加. 操作步骤 结合之前的内容 Kconfig需要启用如下配置 用于导入导出env变量,编辑env变量 CONFIG_ENV_IS_IN_FAT这个是用于从fat中加载env变量环境到内存中.没有设置将从默认的编译程序中加载,这种就不可改变了.但是存在fat文件系统中的env环境变量,是可以一直保存与修改的,掉电后还可生效. 1234567891011// configs/stm32h750-art-pi_defconfig## Command line interface -> Environment commands#CONFIG_CMD_EXPORTENV=yCONFIG_CMD_IMPORTENV=yCONFIG_CMD_EDITENV=yCONFIG_CMD_SAV...
[U-BOOT][STM32F40xx]移植与编写
@[toc] https://github.com/wdfk-prog/u-boot/tree/f4debug 参考 参考uboot现有支持板子与芯片型号 1234567891011├── common├── stih410-b2260├── stm32f429-discovery├── stm32f429-evaluation├── stm32f469-discovery├── stm32f746-disco├── stm32h743-disco├── stm32h743-eval├── stm32h750-art-pi├── stm32mp1└── stm32mp2 使用stm32f429-discovery作为模板配置使用 编译与修改 编译 12export CROSS_COMPILE=arm-none-eabi- ARCH=arm;make configs/stm32f429-discovery_defconfigmake -j12 将编译后的.bin文件烧录到指定地址CONFIG_TEXT_BASE=0x08000000 这个时候是看不到任何现象的...
[uboot][stm32]配置LTDC屏幕
@[toc] https://github.com/wdfk-prog/u-boot 前提 手上刚好有块屏幕,尝试在uboot中点亮一下 使用前请使用其他手段点亮该屏幕确保屏幕的完好再进行操作.确保配置的参数及引脚是可用的. dts设备树修改 ltdc状态修改为重定向前绑定,另外进行GPIO的绑定.根据需要自行配置.注意我使用的是H7系列芯片.不同系列芯片AF的内容不一致,需要自行查看修改. 12345678910111213141516171819202122232425262728293031323334<dc { pinctrl-0 = <<dc_pins>; pinctrl-names = "default"; status = "okay"; bootph-all;};&pinctrl { ltdc_pins: ltdc@0 { pins { pinmux = <STM32_PI...
[Linux][ARM][asm bug]BUG宏的理解
@[toc] https://github.com/wdfk-prog/linux-studyhttps://github.com/wdfk-prog/other 编写原因 阅读linux源码时,看到了#define BUG()的定义,便尝试理解.发现自行理解较难,便去网上搜索.搜索了好久,才终于搞懂这一块干了什么.所以写这个文章,给后面的人减少点搜索工作量. 网上搜索的要么不够深入,要么根本不是arm架构的实现. BUG_INSTR 的指令理解 #define BUG()这块自行理解既可,这里着重说明BUG_INSTR为什么要这么写 1234567891011121314151617/* * Use a suitable undefined instruction to use for ARM/Thumb2 bug handling. * We need to be careful not to conflict with those used by other modules and * the register_undef_hook() system. */ ...
[Linux][ARM][decompress]decompress使用的malloc函数分析
@[toc] https://github.com/wdfk-prog/linux-study 前言 之所以写这个文章,是因为阅读linux源码时被坑了.直接F12跳转到了其他地方.分析了半天都看不明白.晕头转向的.跳回来在分析了一遍才发现有个坑的地方.特除记录说明. lib/decompress_inflate.c 这里的__gunzip函数需要进行malloc.如果直接用F12进行跳转到函数声明与定义的地方,大概率是跳转到include/linux/decompress/mm.h 123456/* Use defines rather than static inline in order to avoid spurious * warnings when not needed (indeed large_malloc / large_free are not * needed by inflate */#define malloc(a) kmalloc(a, GFP_KERNEL)#define free(a) kfree(a) 实际上这里还未进...
[linux][stm32]早期调试启用(DEBUG_LL)教程
@[toc] https://github.com/wdfk-prog/linux/tree/ART-PI_DEBUG DEBUG_LL的功能 开启早期的调试功能 12345678910111213# These options are only for real kernel hackers who want to get their hands dirty.config DEBUG_LL bool "Kernel low-level debugging functions (read help!)" depends on DEBUG_KERNEL help Say Y here to include definitions of printascii, printch, printhex in the kernel. This is helpful if you are debugging code that executes before the console is initialized. Note that select...
[Linux][STM32H7]深入解析:系统时钟源为何被无故修改
@[toc] 问题背景分析在Linux环境下开发STM32H7系列芯片时,发现系统时钟sys_ck的时钟源并非手册标明的默认HSI(High Speed Internal oscillator),而是被配置为PLL1。这种现象需要从系统启动流程的底层进行分析。 关键发现通过追踪系统启动流程,发现u-boot引导阶段已经对时钟进行了重新配置。在u-boot的时钟驱动代码中明确设置了PLL1作为系统时钟源: 1234/* 选择PLL1作为系统时钟源(sys_ck) */clrsetbits_le32(®s->cfgr, RCC_CFGR_SW_MASK, RCC_CFGR_SW_PLL1);while ((readl(®s->cfgr) & RCC_CFGR_SW_MASK) != RCC_CFGR_SW_PLL1) ; 这段代码位于drivers/clk/stm32/clk-stm32h7.c文件的configure_clocks函数中,执行以下操作: 清除RCC_CFGR寄存器中的时钟源选择位 设置PLL1作为新的系统...
[Linux][PR]使用B4向linux内核提交补丁
@[toc] https://people.kernel.org/monsieuricon/sending-a-kernel-patch-with-b4-part-1 1. 使用pip安装1234$ pip install --user b4[...]$ b4 --version0.11.1 2. 使用b4切换分支1b4 prep -n [name-of-branch] -f [nearest-tag] 例如:b4 prep -n __reserved_mem_init_node v6.15-rc2,最好使用-f固定tag版本 3. b4 prep --edit-cover 将自己的补丁信息描述清楚并提交 可以参考修改的文件的其他pr的描述格式进行提交 例如 123456789101112131415of: reserved-mem: Warn for missing initfn in __reservedmem_of_tableFor the data in __reservedmem_of_table, its function pointer initfn ...
![[UBOOT][STM32]编写LED支持教程](/images/covers/08.jpg)
![[U-BOOT][STM32]设置使用SD卡中的linux程序启动](/images/covers/09.jpg)
![[U-BOOT][STM32]SD卡导入导出环境变量](/images/covers/01.jpg)
![[U-BOOT][STM32F40xx]移植与编写](/images/covers/05.jpg)
![[Linux][ARM][asm bug]BUG宏的理解](/images/covers/06.jpg)
![[linux][stm32]早期调试启用(DEBUG_LL)教程](/images/covers/02.jpg)
![[Linux][PR]使用B4向linux内核提交补丁](/images/covers/03.jpg)
