IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux系统移植:U-Boot 工程创建 -> 正文阅读

[系统运维]Linux系统移植:U-Boot 工程创建

Linux系统移植:U-Boot 工程创建

本章用于分析 U-Boot 的工程文件目录功能,以及创建一个 U-Boot 工程做开发,此处的 U-Boot 以正点原子修改的 U-Boot 作为示例

一、U-Boot 文件目录

解压正点原子的 uboot 工程文件(工程下载链接 0 积分),目录如下:

20211127165830

我们在 linux 下编译一遍源码,然后把编译后结果放到 win 下,方便观看,编译后文件目录如下:

20211127170324

编译后比编译前多了许多文件,对文件和文件夹做一个梳理:

关键文件夹:

20211127171742

关键文件:

20211127171951

以上就是其关键文件,第二节对他其中 主要文件功能进行一个仔细的分析

二、U-Boot 目录解析

2.1 arch文件夹

文件夹存放着和各种芯片架构的有关文件

20211127201013

imx6ull 是 arm 架构的芯片,所以看一下 arm 文件夹

20211127201238

arm 文件夹内和 imx 有关的是 imx-common 文件夹;同时 cpu 文件夹下有个名为 uboot.lds 的链接脚本文件,这个就是 ARM 芯片所使用的 u-boot 链接脚本文件

20211127201748

cpu 文件夹下存放着各种具体内核架构的配置信息,比如 armv7 就是和 ARM-V7 架构有关的配置信息!

2.2 board 文件夹

该文件夹存放具体型号板子的适配 uboot

20211127202859

imx6ull 在飞思卡尔的板子内,进入可以看到

20211127203040

后面移植修改到原子的板子上,就是在这个基础上进行修改

2.3 config 文件夹

因为 uboot 是可配置的,所以此文件夹为 uboot 配置文件

20211127203545

我们修改时直接基于厂商的配置文件进行修改就行,此处对于原子的开发板来说,我们基于 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 文件)

20211127204912

一般大项目里面所有的源代码都不会放到同一个目录中,各个功能模块的源代码都是分开的,各自存放在各自的目录中。每个功能模块目录下都有一个 Makefile,这个 Makefile 只处理本模块的编译链接工作,这样所有的编译链接工作就不用全部放到一个 Makefile 中,可以使得 Makefile 变得简洁明了

2.6 u-boot.xxx 文件

u-boot.xxx 是一系列编译前后的文件,如下:

20211127205119

文件含义如下

文件用途
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 打开工程文件夹:

20211128094412

打开后可以看到一堆文件,其中我们有很多文件不需要,所以要建立构建关系,排除一些不需要的文件,不加入工程构建中去

20211128094517

3.2 保存工作区

将工程保存为一个工作区

20211128095657

命名工作区,保存在源码文件根目录下

20211128095738

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 工作区看看,可以看到不需要的文件和文件夹已经排除出工作区

20211128100056

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:40:48  更:2021-11-29 16:40:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:40:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码