驱动开发
文章平均质量分 69
立佳甲
菜鸡一枚
展开
-
第十一章 U-boot 顶层 Makefile 详解 (make 过程)
第 1137 行就是目标 u-boot.bin 的规则,目标 u-boot.bin 依赖于 u-boot-dtb.bin , 他们都是用了if_changed , if_changed是一个函数,这个函数在scripts/Kbuild.include 中有定义,而顶层 Makefile 中会包含 scripts/Kbuild.include 文件,这个前面已经说过了。stm32_gpio.o 是stm32_gpio.c 编译生成的.o 文件,这个是 ST 的 STM32 系列的 GPIO 驱动文件。原创 2024-04-10 11:04:42 · 1030 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (Makefile.build 脚本分析)
conf 是主机软件。因 此,第 8 行就是在“scripts/basic”中查找符合“tpl/%”的部分,然后将“tpl/”取消掉,但是“scripts/basic”没有“tpl/”,所以 src= scripts/basic。__build 是默认目标,因为命令“@make -f ./scripts/Makefile.build obj=scripts/basic”没有指定目标,所以会使用到默认目标:__build。依赖为$(obj)/conf,展开后就是 scripts/kconfig/conf。原创 2024-04-10 10:31:12 · 976 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (make xxx_defconfig 过程)
第 502 行将 MAKECMDGOALS 中不符合“config”和“%config”的部分过滤掉,如果剩下的部分不为空条件就成立,很明显此处条件成立,变量 config-targets=1。第 501 行判断 KBUILD_EXTMOD 是否为空,如果 KBUILD_EXTMOD 为空的话条件成立,经过前面的分析,我们知道 KBUILD_EXTMOD 为空,所以条件成立。第 527 行如果变量 config-targets 为 1 的话条件成立,很明显,条件成立,执行这个分支。不为空的话条件就成立。原创 2024-04-07 11:30:47 · 964 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (导出其他变量)
第 24 行 定 义 变 量 ARCH , 值 为 $(CONFIG_SYS_ARCH:"%"=%) , 提取CONFIG_SYS_ARCH 里面双引号“”之间的内容。第 45 行sinclude 和 include 的功能类似,在 Makefile 中都是读取指定文件内容,这里读取文件$(srctree)/arch/$(ARCH)/config.mk 的内容。第 43 行定义变量 CPUDIR,值为 arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)。原创 2024-04-07 11:05:05 · 611 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (交叉编译工具变量设置)
上面我们只是设置了 CROSS_COMPILE 的名字,但是交叉编译器其他的工具还没有设置。原创 2024-04-07 10:48:22 · 157 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (调用 scripts/Kbuild.include)
在 uboot 的编译过程中会用到 scripts/Kbuild.include 中的这些变量,后面用到的时候再分析。示例代码使用“include”包含了文件 scripts/Kbuild.include,此文件里面定义了很多变量。主 Makefile 会调用文件 scripts/Kbuild.include 这个文件。原创 2024-04-07 10:46:15 · 227 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (设置目标架构、交叉编译器和配置文件)
从示例代码 11.2.9.1 可以看出,每次编译 uboot 的时候都要在 make 命令后面设置 ARCH 和 CROSS_COMPILE,使用起来很麻烦,可以直接修改顶层 Makefile,在里面加入ARCH 和 CROSS_COMPILE 的定义。uboot 是可以配置的,这里设置配置文件为.config,.config 默认是没有的,需要使用命令“make xxx_defconfig”对 uboot 进行配置,配置完成以后就会在 uboot 根目录下生成.config。原创 2024-04-07 10:40:48 · 476 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (获取主机架构和系统)
从图 11.2.8.2 可以看出此时的主机 OS 为“Linux”,使用管道将“Linux”作为后面“tr'[:upper:]''[:lower:]'”的输入,“tr '[:upper:]' '[:lower:]'”表示将所有的大写字母替换为小写字母,因此得到“linux。左边的输出作为右边的输入,sed -e 是替换命令,“sed -e s/i.86/x86/”表示将管道输入的字符串中的“i.86”替换为“x86”,其他的“sed -e s”命令同理。对于我的电脑而言, HOSTARCH=x86_64.原创 2024-04-07 10:17:08 · 255 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (模块编译)
第 214 行判断 KBUILD_EXTMOD 是否为空,如果为空的话目标_all 依赖 all,因此要先编译出 all。要先编译出 modules,也就是编译模块。第 203 行 判 断 是 否 定 义 了 SUBDIRS , 如 果 定 义 了 SUBDIRS , 变 量KBUILD_EXTMOD=SUBDIRS,这里是为了支持老语法“make SUBIDRS=dir”第 220 行判断 KBUILD_SRC 是否为空,如果为空的话就设置变量 srctree 为当前目录,即srctree 为“.”。原创 2024-04-07 10:05:21 · 249 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解 (代码检查)
uboot 支持代码检查,使用命令“make C=1”使能代码检查,检查那些需要重新编译的文。如果 C 来源于命令行,那就将 C 赋值给变量KBUILD_CHECKSRC,如果命令行没有 C 的话 KBUILD_CHECKSRC 就为 0。第 193 行判断 C 是否来源于命令行。“make C=2”用于检查所有的源码文件。原创 2024-04-07 09:45:24 · 135 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解(设置编译结果输出目录)
uboot 可以将编译出来的目标文件输出到单独的目录中,在 make 的时候使用“O”来指定输出目录,比如“make O=out”就是设置目标文件输出到 out 目录中。这么做是为了将源文件和编译产生的文件分开,当然也可以不指定 O 参数,不指定的话源文件和编译产生的文件都在同一个目录内,一般我们不指定 O 参数。第 142 行判断“O”是否来自于命令行,如果来自命令行的话条件成立, KBUILD_OUTPUT就为$(O),因此变量 KBUILD_OUTPUT 就是输出目录。原创 2024-04-07 09:41:14 · 367 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解(静默输出)
因此$(filter 4.%,$(MAKE_VERSION))的 含 义 就 是 在 字 符 串 “ MAKE_VERSION ” 中 找 出 符 合 “ 4.% ” 的 字 符 (% 为 通 配 符 ) ,第 108 行 判 断 当 前 正 在 使 用 的 编 译 器 版 本 号 是 否 为 4.x , 判 断 $(filter4.%,$(MAKE_VERSION))和“ ”(空)是否相等。因此$(filter 4.%,$(MAKE_VERSION))不为空,条件成立,执行109~111 行的语句。原创 2024-04-07 09:32:12 · 405 阅读 · 0 评论 -
第十一章 U-boot 顶层 Makefile 详解(11.2.1-3)
分析 gcc 版本代码的时候一定是先从顶层 Makefile 开始的,然后再是子 Makefile,这样通过层层分析 Makefile 即可了解整个工程的组织结构。顶层 Makefile 也就是 uboot 根目录下的Makefile 文件,由于顶层 Makefile 文件内容比较多,所以我们将其分开来看。原创 2024-03-27 17:53:02 · 630 阅读 · 0 评论 -
第十一章 U-boot顶层Makefile详解(11.1)
将正点原子提供的 uboot 源码进行解压,解压完成以后的目录如图编译正点原子提供的 uboot 源码,然后将其发送到 Windows 下,编译后的目录如图: 对于上述文件: 这个文件夹里面存放着和架构有关的文件 。比如 arm、m68k、x86 等,我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可。 只截取了一部分,还有一部分 mach-xxx 的文件夹。mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星的 exyons 系列原创 2024-03-27 17:15:51 · 973 阅读 · 0 评论 -
9.3 TF-A编译测试
按 照 本 小 节 讲 解 的 方 法 编 译 生 成 tf-a-stm32mp157d-atk-serialboot.stm32 以后 , ../build/trusted 和 ../build/optee 目录就没了,也就是说此本小节的方法只能编译 tf-a-stm32mp157d-atk-serialboot.stm32了如果想重新编译 tf-a-stm32mp157d-atk-trusted.stm32,那么就按照以前的编译命令即可,不用修改 Makefile.sdk 文件!原创 2024-03-27 16:22:48 · 252 阅读 · 0 评论 -
9.2.2 修改设备树电源管理
ST 官方 STM32MP157 开发板用到了一颗 PMIC 芯片,型号为 STPMIC1A,PMIC 全称为Power Management IC,也就是集成电源管理芯片。随着 SOC 功能越来越强大,所需要的的电源要求也越来越高,最直观的就是电源种类很多。另外,电源的上电顺序也是有要求的。STPMIC1A 就是 ST 专门为 STM32MP1 系列设计的专用 PMIC。PMIC 芯片性能非常强大:· 输入电压 2.8V~5.5V。· 4 路可调的通用 LDO 输出。原创 2024-03-27 10:41:45 · 816 阅读 · 0 评论 -
9.2 TF-A 移植
设备树英文名字叫做 Device tree。用来描述板子硬件信息的。比如你的板子上的 CPU 有几个核、每个 CPU 核主频是多少,IIC、SPI 这些外设的寄存器范围是多少,IIC 接口下都挂了哪些设备等等。设备树文件是一种文本格式的文件,方便阅读与修改,文件后缀为.dts,设备树头文件后为.dtsi。和 C 语言一样.dts 可以引用头文件.dtsi, .dts 经过编译以后生成.dtb文件,.dtb 就是开发板要使用的。原创 2024-03-26 17:40:56 · 934 阅读 · 0 评论 -
第九章TF-A的移植
trusted 目录下的就是烧写到开发板中的 TF-A 镜像,进入 trusted 目录。从图 可以看出,编译出来了很多后缀为.bin、.elf、.ld、.stm32 这样的文件, 我们以前缀为“tf-a-stm32mp157d-ev1”的文件为例。正点原子 STM32MP157 开发板使用的主控型号是 STM32MP157DAA1,开发板硬件参考了 ST 官方的 STM32MP157 EVK 开发板,因此我们就需要使用表 9.1.2.1 中的这些文件,在移植的时候。原创 2024-03-26 17:10:17 · 202 阅读 · 0 评论