linux系统移植:u-boot工程创建(代码片段)

JeckXu666 JeckXu666     2023-02-16     616

关键词:

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移植(代码片段)

文章目录Linux系统移植:正点原子U-Boot移植一、What‘sU-Boot?1.1U-Boot简介1.2U-Boot选择二、正点原子U-Boot编译2.1编译环境2.2编译脚本三、U-Boot烧写与启动Linux系统移植:正点原子U-Boot移植一、What‘sU-Boot?1.1U-Boot简介Linux系统启... 查看详情

linux系统移植:u-boot链接脚本(代码片段)

文章目录Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍二、u-boot.lds分析Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍前面提到的U-Boot的本质就是一个大的裸机程序,执行的时候需要先找到程序入口,而程序的链接... 查看详情

linux系统移植:nxp官板uboot移植(代码片段)

文章目录Linux系统移植:NXP官板uboot移植一、获取官板U-Boot二、编译下载U-Boot源码三、官方驱动验证Linux系统移植:NXP官板uboot移植移植NXP的IMX6ULL官板U-Boot到原子的开发板一、获取官板U-Boot去NXP官网下载评估板的U-Boot,... 查看详情

linux系统移植:u-boot顶层makefile分析(下)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情

linux系统移植:u-boot启动流程(上)(代码片段)

目录Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解二、lowlevel_init函数详解三、s_init函数详解四、_main函数详解Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解根据链接文件,可以... 查看详情

linux系统移植:u-boot常用指令(下)(代码片段)

文章目录Linux系统移植:U-Boot常用指令(下)一、U-Boot常用命令(上)1.1EMMC和SD卡命令1.2FAT格式文件系统命令1.3EXT格式文件系统命令1.4NAND操作命令1.5BOOT操作命令1.6其他常用命令Linux系统移植:U-Boot常用指令... 查看详情

正点原子i.mx6u-mini移植篇u-boot移植过程详解(代码片段)

...以后Linux还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以U-Boot、Linuxkernel和rootfs这三者一起构成了一个完整的Linux系统,一个可以正常使用、功能完善的Linu... 查看详情

linux系统移植:u-boot常用指令(上)(代码片段)

文章目录Linux系统移植:U-Boot常用指令(上)一、U-Boot命令行二、U-Boot常用命令(上)2.1help帮助命令2.2信息查询命令2.3环境变量修改命令2.4内存操作命令2.5网络操作命令Linux系统移植:U-Boot常用指令(... 查看详情

linux系统移植:u-boot顶层makefile分析(上)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(上)一、版本号二、传递变量到子make三、命令输出四、静默输出五、编译输出目录六、代码检查七、模块编译八、获取主机架构和系统九、设置目标架构、交叉编译器和配置... 查看详情

成为linux程序员需要学习啥

1第一部分:LINUX平台搭建与环境熟悉 了解Linux系统;区分各种版本的Linux系统,以便于拓展Linux视野。1、Linux简介;2、Linux系统的主要特点;3、Linux的组成;4、主要的Linux版本;5、嵌入式Linux简介与发展第二部分虚拟机安装和LINU... 查看详情

linux系统移植:u-boot启动流程(中)(代码片段)

Linux系统移植:U-Boot启动流程(中)一、board_init_f函数详解board_init_f函数是_main函数初始化中调用的重要函数之一,函数主要有两个工作:初始化一系列外设,比如串口、定时器,打印一些消息初始化gd... 查看详情

linux系统移植博文导航

Linux系统移植专栏更新很久了,博主今天就把以前的博文整理一下,希望对感兴趣的朋友有所帮助,在此感谢CSDN这个平台给出了这个一个交流的机会,也感谢大家的支持。Linux相关的网站U-BootLinux内核busyboxLinux系统移植Linux系统移... 查看详情

u-boot-2014.10移植(代码片段)

1/***************************************************23*u-boot版本:u-boot-2014.1045*gcc版本:/home/flinn/tools/4.4.3/bin/arm-none-linux-gnueabi-67*89*服务器:ubuntu14.051011*1213*编译命令:makesmdk2440_config;make1 查看详情

系统移植知识点总结(代码片段)

系统移植知识点总结系统移植学习各知识点总结接下来我们了解一下常见的操作系统简单了解一下系统移植bootloaderu-boot源码u-boot简单移植操作系统os文件系统fileSystem系统移植学习各知识点总结首先我们来了解一个设备要运行起... 查看详情

怎样移植u-boot和linux到s3c2440开发板

...启动。本文就介绍如何实现该功能,并组成一个最简单的系统,这不仅要移植uboot,还要移植linux内核及创建一个根文件系统。首先我们对nandflash进行分区,规划好每个文件存放在nandflash的位置。下面是nandflash的分区:第0分区:0... 查看详情

linux内核移植入门(代码片段)

...性,支持的硬件平台广泛2.超强的网络功能3.多任务多用户系统4.模块化的设计五大子系统:1.进程管理子系统2.内存管理子系统3.文件系统子系统4.网络协议子系统5.设备管理子系统获取linux内核:1.内核官方发布点2.芯片厂商提供内核... 查看详情

全志h3系统移植|移植主线最新uboot2023.04和kernel6.1.11到nanopineo开发板(代码片段)

文章目录环境说明uboot移植kernel移植rootfs移植测试环境说明OS:Ubuntu20.04.5LTSGCC:arm-none-linux-gnueabihf-gcc10.3.0编译器下载地址:Downloads|GNU-ADownloads–ArmDeveloperuboot移植当前最新版本v2023.04-rc2下载地址:https://github.com/u-boot/u-boot/archive/re... 查看详情

六,移植uboot-设置默认环境变量,完善u-boot(代码片段)

文档时间:2018-08-14交叉编译器:arm-linux-gcc-4.3.2Ubuntu版本:16.04uboot版本:2013.10 1,修改uboot默认环境变量前面章节得到的uboot串口打印信息如下:可以看出,读出的是坏的CRC,使用默认的环境变量,搜索"usingdefaultenvironment",... 查看详情