u-boot 的编译和配置
目录
一、uboot 配置过程
顶层Makefile会包含2个配置文件:include/config/auto.conf、include/autoconf.mk。
u-boot中有非常多的配置文件:
1、.config:来自单板的默认配置、Kconfig;
2、include/config/auto.conf:来自.config,去掉了很多注释;
3、u-boot.cfg:它的内容跟头文件类似,来自:
(1) .config
(2) 头文件include/common.h,又包含了"#include <config.h>";
4、include/autoconf.mk:来自u-boot.cfg,但是移除include/config/auto.conf的内容以免重复。
配置过程分为两个阶段,如下图所示:
二、uboot 编译过程
执行 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 指令编译之后,结果如下图所示:
1、各类u-boot文件都依赖于u-boot,先编译得到u-boot,它由u-boot-init
、u-boot-main
两部分链接而成:
(1) u-boot-init为:arch/arm/cpu/armv7/start.o
在 arch/arm/Makefile文件中
:
(2) u-boot-main为:lib/built-in.o fs/built-in.o net/built-in.o 等,以下图片均是顶层 Makefile 中的:
/* 顶层 Makefile */
include config.mk # 里面会包含arch/arm/config.mk(含有ALL-y += u-boot-dtb.imx)
include arch/$(ARCH)/Makefile # arch/arm/Makefile, 里面含有head-y
libs-ylibs-y += lib/
libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
libs-$(CONFIG_OF_EMBED) += dts/
libs-y += fs/
libs-y += net/
libs-y += disk/
libs-y += drivers/
libs-y += drivers/dma/
libs-y += drivers/gpio/
libs-y += drivers/i2c/
libs-y += drivers/mmc/
libs-y += drivers/mtd/
libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
libs-y += drivers/mtd/onenand/
libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
libs-y += drivers/mtd/spi/
libs-y += drivers/net/
libs-y += drivers/net/phy/
libs-y += drivers/pci/
libs-y += drivers/power/ \
drivers/power/fuel_gauge/ \
drivers/power/mfd/ \
drivers/power/pmic/ \
drivers/power/battery/ \
drivers/power/regulator/
libs-y += drivers/spi/
libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
libs-y += drivers/serial/
libs-y += drivers/usb/dwc3/
libs-y += drivers/usb/emul/
libs-y += drivers/usb/eth/
libs-y += drivers/usb/gadget/
libs-y += drivers/usb/gadget/udc/
libs-y += drivers/usb/host/
libs-y += drivers/usb/musb/
libs-y += drivers/usb/musb-new/
libs-y += drivers/usb/phy/
libs-y += drivers/usb/ulpi/
libs-y += cmd/
libs-y += common/
libs-$(CONFIG_API) += api/
libs-$(CONFIG_HAS_POST) += post/
libs-y += test/
libs-y += test/dm/
libs-$(CONFIG_UT_ENV) += test/env/
libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
libs-y := $(sort $(libs-y))
u-boot-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
u-boot-alldirs := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
u-boot-init := $(head-y) # arch/arm/Makefile, 里面含有head-y
u-boot-main := $(libs-y)
2、由 u-boot 生成 u-boot-nodtb.bin
3、由 u-boot-nodtb.bin 生成 u-boot.bin
4、制作生成 u-boot.imx
5、顶层 Makefile 生成目标文件核心:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」