热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux系统移植:官板uboot修改(上)

目录Linux系统移植:官板uboot修改(上)一、添加开发板配置文件二、添加开发板头文件三、添加开发板板级文件3.1修改Makefile

目录

  • Linux系统移植:官板 uboot 修改(上)
    • 一、添加开发板配置文件
    • 二、添加开发板头文件
    • 三、添加开发板板级文件
      • 3.1 修改 Makefile 文件
      • 3.2 修改 imximage.cfg 文件
      • 3.3 修改 Kconfig 文件
      • 3.4 修改 MAINTAINERS 文件
    • 四、修改 uboot 图形界面配置文件
    • 五、编译修改后 uboot


Linux系统移植:官板 uboot 修改(上)

基于官方 uboot 进行修改,适配原子开发板

一、添加开发板配置文件

在 configs 下拷贝 mx6ull_14x14_evk_emmc_defconfig 文件重命名为 mx6ull_alientek_emmc_defconfig

修改 mx6ull_alientek_emmc_defconfig 中的内容如下:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC=y
CONFIG_CMD_GPIO=y

主要修改第一行的参数(配置文件路径)和第四行的变量名称

二、添加开发板头文件

复制 include/configs/mx6ullevk.h,重命名为 mx6ull_alientek_emmc.h 在该文件夹下做开发板头文件

20220216224040

修改一下头文件的宏:

20220216224116

如果要使能或者禁止 uboot 的某些功能(裁剪 uboot),在该文件里面做修改即可,该文件里面一些参数功能如下:

  • PHYS_SDRAM_SIZE:板子 DRAM 的大小

  • CONFIG_DISPLAY_CPUINFO:uboot 启动的时候可以输出 CPU 信息

  • CONFIG_SYS_MALLOC_LEN :malloc 内存池大小,这里设置为 16MB

  • CONFIG_BOARD_EARLY_INIT_F:定义该宏后,board_init_f 函数就会调用 board_early_init_f 函数

  • CONFIG_BOARD_LATE_INIT:定义后 board_init_r 函数就会调用 board_late_init 函数

  • CONFIG_MXC_UART_BASE:串口寄存器基地址,这样 uboot 可以操作串口的寄存器,初始化串口以及通过串口打印消息,IMX 串口地址如下:

    20220217142842

  • CONFIG_SYS_FSL_ESDHC_ADDR:EMMC 所使用接口的寄存器基地址,也就是 USDHC2 的基地址

  • CONFIG_SYS_FSL_USDHC_NUM:表示 USDHC 数量

  • IIC 相关宏:
    20220217145351

  • 如果使用 NAND 的话,可以对 NAND 的分区设置,设置宏如下:
    20220217145550

    NAND 分区如下:
    20220217145613

    这里可以修改代码调整的,我们没用到就不管了

  • CONFIG_MFG_ENV_SETTINGS:定义了一些环境变量,使用 MfgTool 烧写系统时候会用到这里面的环境变量
    20220217150003

  • CONFIG_EXTRA_ENV_SETTINGS:也是设置一些环境变量
    20220217150140

  • CONFIG_BOOTCOMMAND:此宏就是设置环境变量 bootcmd 的值

    20220217150152

  • 下面一段设置命令 memtest 相关宏定义:使能命令 memtest,设置 memtest 测试的内存起始地址和内存大小20220217150255

  • CONFIG_SYS_LOAD_ADDR:表示 linux kernel 在 DRAM 中的加载地址,也就是 linux kernel 在 DRAM 中的存储首地址,CONFIG_LOADADDR=0X80800000

  • CONFIG_SYS_HZ:系统时钟频率

  • CONFIG_STACKSIZE:栈大小

  • CONFIG_NR_DRAM_BANKS:DRAM BANK 的数量

  • PHYS_SDRAM:DRAM 控制器**(MMDC0)**所管辖的 DRAM 范围起始地址,也就是 0X80000000

  • CONFIG_SYS_SDRAM_BASE:DRAM 的起始地址

  • CONFIG_SYS_INIT_RAM_ADDR:内部 IRAM 的起始地址(也就是 OCRAM 的起始地址),为 0X00900000

  • CONFIG_SYS_INIT_RAM_SIZE:内部 IRAM 的大小

  • CONFIG_SYS_INIT_SP_OFFSET:初始 SP 偏移

  • CONFIG_SYS_INIT_SP_ADDR:初始 SP 地址

  • CONFIG_SYS_MMC_ENV_DEV:默认的 MMC 设备,这里默认为USDHC2,也就是 EMMC

  • CONFIG_SYS_MMC_ENV_PART:模式分区,默认为第 0 个分区

  • CONFIG_MMCROOT:设置进入 linux 系统的 根文件系统 所在的分区,这里设置为 “/dev/mmcblk1p2”,也就是 EMMC 设备的第 2 个分区。第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统

  • CONFIG_ENV_SIZE:环境变量大小,默认为 8KB

  • CONFIG_ENV_OFFSET&#xff1a;环境变量偏移地址&#xff0c;这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话&#xff0c;环境变量偏移地址为 12*64KB。如果环境变量保存在 SPI FLASH 中的话&#xff0c;偏移地址为 768*1024。如果环境变量保存在 NAND 中的话&#xff0c;偏移地址为 60<<20(60MB)&#xff0c;并且重新设置环境变量的大小为 128KB

  • USB相关宏&#xff1a;
    20220217151650

  • 网口相关宏&#xff1a;
    使能 dhcp、ping 等命令20220217151806

    宏定义控制 dhcp、ping 等命令&#xff0c;IMX_FEC_BASE 为 ENET 接口的寄存器首地址&#xff0c;宏 CONFIG_FEC_MXC_PHYADDR 为网口 PHY 芯片的地址。宏 CONFIG_FEC_XCV_TYPE 为 PHY 芯片所使用的接口类型

  • 其他配置宏&#xff1a;
    20220217152011

    CONFIG_VIDEO 宏用于开启 LCD

    CONFIG_VIDEO_LOGO 使能 LOGO 显示

    CONFIG_CMD_BMP 使能 BMP 图片显示指令&#xff0c;可以在 uboot 中显示图片


三、添加开发板板级文件

每个板子都有一个对应的文件夹来存放板级文件&#xff0c;比如开发板上外设驱动文件等&#xff0c;NXP 板级文件夹都存放在 board/freescale 目录下&#xff0c;我们复制 mx6ullevk&#xff0c;将其重命名为 mx6ull_alientek_emmc

20220217152654

将其中的 mx6ullevk.c 文件重命名为 mx6ull_alientek_emmc.c&#xff0c;然后对该目录下板级文件做进一步修改&#xff1a;

3.1 修改 Makefile 文件

修改文件名称为 mx6ull_alientek_emmc.o

obj-y :&#61; mx6ull_alientek_emmc.oextra-$(CONFIG_USE_PLUGIN) :&#61; plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o$(OBJCOPY) -O binary --gap-fill 0xff $< $&#64;

3.2 修改 imximage.cfg 文件

将 imximage.cfg 中的下面

PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000

改成

PLUGIN board/freescale/mx6ull_alientek_emmc /plugin.bin 0x00907000

就是改文件路径

3.3 修改 Kconfig 文件

修改 Kconfig 文件&#xff0c;修改关联文件名称&#xff0c;修改后如下

if if TARGET_MX6ULL_ALIENTEK_EMMCconfig SYS_BOARDdefault "mx6ull_alientek_emmc"config SYS_VENDORdefault "freescale"config SYS_SOCdefault "mx6"config SYS_CONFIG_NAMEdefault "mx6ull_alientek_emmc"endif

3.4 修改 MAINTAINERS 文件

修改 MAINTAINERS 文件的相关目录文件名称&#xff0c;修改后的内容如下

MX6ULLEVK BOARD
M: Peng Fan <peng.fan&#64;nxp.com>
S: Maintained
F: board/freescale/mx6ull_alientek_emmc/
F: include/configs/mx6ull_alientek_emmc.h

四、修改 uboot 图形界面配置文件

因为 uboot 是支持图形界面配置的&#xff0c;修改一下方便后面配置&#xff0c;修改 arch/arm/cpu/armv7/mx6/Kconfig&#xff0c;添加如下内容&#xff1a;

config TARGET_MX6ULL_ALIENTEK_EMMCbool "Support mx6ull_alientek_emmc"select MX6ULLselect DMselect DM_THERMAL

位置如下&#xff1a;

20220217154227

在最后一行的 endif 的前一行添加如下内容&#xff1a;

source "board/freescale/mx6ull_alientek_emmc/Kconfig"

添加后如下&#xff1a;

20220217154304

五、编译修改后 uboot

在 uboot 根目录下新建一个名为 boot_build.sh 的 shell 脚本&#xff0c;用于编译&#xff0c;脚本添加内容如下&#xff1a;

#!/bin/bash
make ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- distclean
make ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make V&#61;1 ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- -j16

给予 boot_build.sh 可执行权限&#xff0c;然后运行脚本来完成编译

chmod 777 boot_build.sh
./boot_build.sh

执行完成编译后如下&#xff1a;

20220217161109

下载 uboot.bin 到 SD 卡&#xff0c;插卡观察 我们修改后的 U-Boot&#xff1a;
20220217170444


推荐阅读
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 本文档提供了首次周测的答案解析,涵盖特殊符号、命令作用、路径说明以及实战练习等内容。 ... [详细]
  • Cadence SPB 16.5 安装指南与注意事项
    本文提供了详细的 Cadence SPB 16.5 安装步骤,包括环境配置、安装过程中的关键步骤以及常见问题的解决方案。适合初次安装或遇到问题的技术人员参考。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文详细介绍了在Mac操作系统中使用Python连接MySQL数据库的方法,包括常见的错误处理及解决方案。 ... [详细]
  • Nagios可视化插件开发指南 —— 配置详解
    本文详细介绍了Nagios监控系统的配置过程,包括数据库的选择与安装、Nagios插件的安装及配置文件的解析。同时,针对常见的配置错误提供了具体的解决方法。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
author-avatar
紫色冰姬YOU
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有