Linux系统移植:U-Boot 工程创建
Posted JeckXu666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统移植:U-Boot 工程创建相关的知识,希望对你有一定的参考价值。
文章目录
Linux系统移植:U-Boot 工程创建
本章用于分析 U-Boot 的工程文件目录功能,以及创建一个 U-Boot 工程做开发,此处的 U-Boot 以正点原子修改的 U-Boot 作为示例
一、U-Boot 文件目录
解压正点原子的 uboot 工程文件(工程下载链接 0 积分),目录如下:
我们在 linux 下编译一遍源码,然后把编译后结果放到 win 下,方便观看,编译后文件目录如下:
编译后比编译前多了许多文件,对文件和文件夹做一个梳理:
关键文件夹:
关键文件:
以上就是其关键文件,第二节对他其中 主要文件功能进行一个仔细的分析
二、U-Boot 目录解析
2.1 arch文件夹
文件夹存放着和各种芯片架构的有关文件
imx6ull 是 arm 架构的芯片,所以看一下 arm 文件夹
arm 文件夹内和 imx 有关的是 imx-common 文件夹;同时 cpu 文件夹下有个名为 uboot.lds 的链接脚本文件,这个就是 ARM 芯片所使用的 u-boot 链接脚本文件
cpu 文件夹下存放着各种具体内核架构的配置信息,比如 armv7 就是和 ARM-V7 架构有关的配置信息!
2.2 board 文件夹
该文件夹存放具体型号板子的适配 uboot
imx6ull 在飞思卡尔的板子内,进入可以看到
后面移植修改到原子的板子上,就是在这个基础上进行修改
2.3 config 文件夹
因为 uboot 是可配置的,所以此文件夹为 uboot 配置文件
我们修改时直接基于厂商的配置文件进行修改就行,此处对于原子的开发板来说,我们基于 mx6ull_14x14_ddr512_emmc_defconfig 和 mx6ull_14x14_ddr256_nand_defconfig 这两个文件中的一个进行修改就行(一个是 NAND ,一个是 EMMC),编译 uboot 前使用如下指令根据配置文件配置 uboot
make mx6ull_14x14_ddr512_emmc_defconfig
2.4 .u-boot.xxx_cmd 文件
u-boot.xxx_cmd 是由一系列编译生成的文件,包含一些执行命令,方便调用
比如 u-boot.imx 是在 u-boot.bin 文件的头部添加了 IVT、DCD 等信息生成的文件,这个生成工作是由文件 .u-boot.imx.cmd 来完成的,此文件内容如下
cmd_u-boot.imx := ./tools/mkimage -n board/freescale/mx6ull_alientek_emmc/imximage.cfg.cfgtmp -T imximage -e 0x87800000 -d u-boot.bin u-boot.imx
这条命令使用工具 mkimage 就是读取文件 imximage-ddr512.cfg.cfgtmp 里面的信息,然后将其添加到文件 u-boot.bin 的头部,最终生成 u-boot.imx
2.5 顶层Makefile 文件
图中是顶层 Makefile 文件,Makefile 支持嵌套的(顶层 Makefile 可以调用子目录中的 Makefile 文件)
一般大项目里面所有的源代码都不会放到同一个目录中,各个功能模块的源代码都是分开的,各自存放在各自的目录中。每个功能模块目录下都有一个 Makefile,这个 Makefile 只处理本模块的编译链接工作,这样所有的编译链接工作就不用全部放到一个 Makefile 中,可以使得 Makefile 变得简洁明了
2.6 u-boot.xxx 文件
u-boot.xxx 是一系列编译前后的文件,如下:
文件含义如下
文件 | 用途 |
---|---|
u-boot: | 编译出来的 ELF 格式的 uboot 镜像文件。 |
u-boot.bin: | 编译出来的二进制格式的 uboot 可执行镜像文件。 |
u-boot.cfg: | uboot 的另外一种配置文件。 |
u-boot.imx: | u-boot.bin 添加头部信息以后的文件,NXP 的 CPU 专用文件。 |
u-boot.lds: | 链接脚本。 |
u-boot.map: | uboot 映射文件,通过查看此文件可以知道某个函数被链接到了哪个地址上。 |
u-boot.srec: | S-Record 格式的镜像文件。 |
u-boot.sym: | uboot 符号文件。 |
u-boot-nodtb.bin: | 和 u-boot.bin 一样,u-boot.bin 就是 u-boot-nodtb.bin 的复制文件。 |
2.7 .config文件
uboot 配置文件, make xxx_defconfig 命令配置 uboot 以后就会自动生成,该文件中都是以 CONFIG_ 开头的配置项,这些配置项就是 Makefile 中的变量,因此后面都跟有相应的值和使能标志,用于 Makefile 调用
2.8 README 文件
README 文件是官方或者厂商提供的描述了 uboot 的详细信息,包括 uboot 该如何编译、uboot 中各文件夹的含 义、相应的命令等等,把它当说明书看就行
三、U-Boot 过程创建
我们将前几章编译后的 uboot 源码在 Ubuntu 下面用 vscode 创建一个工程,方便进行二次开发,创建工程步骤如下:
3.1 打开工程文件夹
vscode 打开工程文件夹:
打开后可以看到一堆文件,其中我们有很多文件不需要,所以要建立构建关系,排除一些不需要的文件,不加入工程构建中去
3.2 保存工作区
将工程保存为一个工作区
命名工作区,保存在源码文件根目录下
3.3 建立构建关系
在 VSCode IDE上建名为 .vscode 的文件夹,同时在 .vscode 文件夹中新建一个名为 settings.json 的文件,文件输入如下代码:
"search.exclude":
"**/node_modules": true,
"**/bower_components": true,
,
"files.exclude":
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
search.exclude 里面是需要在搜索结果中排除的文件或者文件夹,files.exclude 是左侧工程目录中需要排除的文件或者文件夹,本章要排除的文件如下:
"search.exclude":
"**/node_modules": true,
"**/bower_components": true,
"**/*.o":true,
"**/*.su":true,
"**/*.cmd":true,
"arch/arc":true,
"arch/avr32":true,
"arch/blackfin":true,
"arch/m68k":true,
"arch/microblaze":true,
"arch/mips":true,
"arch/nds32":true,
"arch/nios2":true,
"arch/openrisc":true,
"arch/powerpc":true,
"arch/sandbox":true,
"arch/sh":true,
"arch/sparc":true,
"arch/x86":true,
"arch/arm/mach*":true,
"arch/arm/cpu/arm11*":true,
"arch/arm/cpu/arm720t":true,
"arch/arm/cpu/arm9*":true,
"arch/arm/cpu/armv7m":true,
"arch/arm/cpu/armv8":true,
"arch/arm/cpu/pxa":true,
"arch/arm/cpu/sa1100":true,
"board/[a-e]*":true,
"board/[g-z]*":true,
"board/[0-9]*":true,
"board/[A-Z]*":true,
"board/fir*":true,
"board/freescale/b*":true,
"board/freescale/l*":true,
"board/freescale/m5*":true,
"board/freescale/mp*":true,
"board/freescale/c29*":true,
"board/freescale/cor*":true,
"board/freescale/mx7*":true,
"board/freescale/mx2*":true,
"board/freescale/mx3*":true,
"board/freescale/mx5*":true,
"board/freescale/p*":true,
"board/freescale/q*":true,
"board/freescale/t*":true,
"board/freescale/v*":true,
"configs/[a-l]*":true,
"configs/[n-z]*":true,
"configs/[A-Z]*":true,
"configs/M[a-z]*":true,
"configs/M[A-Z]*":true,
"configs/M[0-9]*":true,
"configs/m[a-w]*":true,
"configs/m[0-9]*":true,
"configs/[0-9]*":true,
"include/configs/[a-l]*":true,
"include/configs/[n-z]*":true,
"include/configs/[A-Z]*":true,
"include/configs/m[a-w]*":true,
"include/configs/[0-9]*":true,
,
"files.exclude":
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/*.o":true,
"**/*.su":true,
"**/*.cmd":true,
"arch/arc":true,
"arch/avr32":true,
"arch/blackfin":true,
"arch/m68k":true,
"arch/microblaze":true,
"arch/mips":true,
"arch/nds32":true,
"arch/nios2":true,
"arch/openrisc":true,
"arch/powerpc":true,
"arch/sandbox":true,
"arch/sh":true,
"arch/sparc":true,
"arch/x86":true,
"arch/arm/mach*":true,
"arch/arm/cpu/arm11*":true,
"arch/arm/cpu/arm720t":true,
"arch/arm/cpu/arm9*":true,
"arch/arm/cpu/armv7m":true,
"arch/arm/cpu/armv8":true,
"arch/arm/cpu/pxa":true,
"arch/arm/cpu/sa1100":true,
"board/[a-e]*":true,
"board/[g-z]*":true,
"board/[0-9]*":true,
"board/[A-Z]*":true,
"board/fir*":true,
"board/freescale/b*":true,
"board/freescale/l*":true,
"board/freescale/m5*":true,
"board/freescale/mp*":true,
"board/freescale/c29*":true,
"board/freescale/cor*":true,
"board/freescale/mx7*":true,
"board/freescale/mx2*":true,
"board/freescale/mx3*":true,
"board/freescale/mx5*":true,
"board/freescale/p*":true,
"board/freescale/q*":true,
"board/freescale/t*":true,
"board/freescale/v*":true,
"configs/[a-l]*":true,
"configs/[n-z]*":true,
"configs/[A-Z]*":true,
"configs/M[a-z]*":true,
"configs/M[A-Z]*":true,
"configs/M[0-9]*":true,
"configs/m[a-w]*":true,
"configs/m[0-9]*":true,
"configs/[0-9]*":true,
"include/configs/[a-l]*":true,
"include/configs/[n-z]*":true,
"include/configs/[A-Z]*":true,
"include/configs/m[a-w]*":true,
"include/configs/[0-9]*":true,
保存 json 文件排除完成,我们刷新一下 vscode 工作区看看,可以看到不需要的文件和文件夹已经排除出工作区
以上是关于Linux系统移植:U-Boot 工程创建的主要内容,如果未能解决你的问题,请参考以下文章