u-boot移植--基于正点原子iMX6ull开发板

简介:

更好的阅读体验请见: uboot启动流程分析

添加自己的开发板

uboot的板级配置文件在顶层目录的*configs*文件夹里,

cp mx6ull_14x14_evk_emmc_defconfig mx6ull_jarvis_emmc_defconfig

复制一份mx6ull_14x14_evk_emmc_defconfig,这是NXP针对imx6ull这个板子的配置文件,复制改成自己的mx6ull_jarvis_emmc_defconfig

修改mx6ull_jarvis_emmc_defconfig,加粗部分是自己修改的。

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/**mx6ull_jarvis_emmc**/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_**MX6ULL_JARVIS_EMMC**=y
CONFIG_CMD_GPIO=y

添加开发板对应的头文件

使用命令cp mx6ullevk.h mx6ull_jarvis_emmc.h,在 目 录 include/configs 下 添 加 开 发 板 对 应 的 头 文 件 , 复 制  include/configs/mx6ullevk.h,并重命名为mx6ull_jarvis_emmc.h

添加开发板对应的板级文件夹

cd board/freescale/
cp mx6ullevk/ -r mx6ull_jarvis_emmc
cd mx6ull_jarvis_emmc
mv mx6ullevk.c mx6ull_jarvis_emmc.c

修改*board/freescale/mx6ull_jarvis_emmc/Makefile*。

# (C) Copyright 2015 Freescale Semiconductor, Inc.
#
# SPDX-License-Identifier:  GPL-2.0+
#
obj-y  := **mx6ull_jarvis_emmc.o**
extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o
  $(OBJCOPY) -O binary --gap-fill 0xff $< $@

修改*board/freescale/mx6ull_jarvis_emmc/imximage.cfg *34行。

改为PLUGIN board/freescale/mx6ull_jarvis_emmc/plugin.bin 0x00907000

修改*board/freescale/mx6ull_jarvis_emmc/Kconfig*。

if **TARGET_MX6ULL_JARVIS_EMMC**
config SYS_BOARD
  default "**mx6ull_jarvis_emmc**"
config SYS_VENDOR
  default "freescale"
config SYS_CONFIG_NAME
  default "**mx6ull_jarvis_emmc**"
endif

修改*board/freescale/mx6ull_jarvis_emmc/MAINTAINERS*

MX6ULLEVK BOARD
M:  Peng Fan <peng.fan@nxp.com>
S:  Maintained
F:  board/freescale/mx6ull_alientek_emmc/
F:  include/configs/mx6ull_alientek_emmc.h
F:  configs/mx6ull_14x14_evk_defconfig
F:  configs/mx6ull_9x9_evk_defconfig

修改uboot图形界面配置文件*arch/arm/cpu/armv7/mx6/Kconfig*

在207行后加入

config TARGET_MX6ULL_JARVIS_EMMC
  bool "Support mx6ull_jarvis_emmc"
  select MX6ULL
  select DM
  select DM_THERMAL

然后在endif前加入

source "board/freescale/mx6ull_jarvis_emmc/Kconfig"

编译测试

修改uboot顶层Makefile

在250行添加

ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-

如果uboot工程里没有执行过make  mx6ull_jarvis_emmc_defconfig,就先执行一下,然后再执行make

烧写

拨码开关设置到USB,选择u-boot.imx文件,烧写,烧写完后设置拨码开关从EMMC启动。

网络异常,图片无法展示
|

网络异常,图片无法展示
|

看到找不到网络设备和不支持屏幕,还要修改屏幕驱动和eth相关的东西。

屏幕&网络驱动移植

正点原子imx6ull开发板使用的PHY芯片是 LAN8720A。

原子这款开发板与NXP官方的原理图是一样的,除了phy的复位脚不同

网络异常,图片无法展示
|

网络异常,图片无法展示
|

从原理图看到ENET1,对应eth0网口,复位脚接到了GPIO5_IO07

ENET2,对应eth1网口,复位脚接到了GPIO5_IO08。

软件层面的修改

修改*include/configs/mx6ull_jarvis_emmc.h*

大概在333行的位置。

#if (CONFIG_FEC_ENET_DEV == 0)
#define IMX_FEC_BASE      ENET_BASE_ADDR
**#define CONFIG_FEC_MXC_PHYADDR          0x0**
#define CONFIG_FEC_XCV_TYPE             RMII
#elif (CONFIG_FEC_ENET_DEV == 1)
#define IMX_FEC_BASE      ENET2_BASE_ADDR
#define CONFIG_FEC_MXC_PHYADDR    0x1
#define CONFIG_FEC_XCV_TYPE    RMII
#endif
#define CONFIG_ETHPRIME      "FEC"
#define CONFIG_PHYLIB
#define **CONFIG_PHY_SMSC**
#endif

修改*board/freescale/mx6ull_jarvis_emmc/mx6ull_jarvis_emmc.c*

内容比较多,一共修改了3个文件,内容较多,输出diff。

  1. board/freescale/mx6ull_jarvis_emmc/mx6ull_jarvis_emmc.c
  2. drivers/net/phy/phy.c
  3. include/configs/mx6ull_jarvis_emmc.h

踩坑

记录我踩的一个坑,由于编译工具链版本太高,导致调用htons函数有问题。

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

使用GCC4.9的工具链没问题。


ps:我是哆哆,一枚二本机械狗,从华为外包逆袭到芯片原厂公司,目前从业于半导体行业,在一家芯片原厂公司任职Linux固件工程师,喜欢阅读内核源码,深入操作系统的世界,除此之外,星主还喜欢个人成长,秉承终身学习,终身成长,坚持运动。

星主从最开始玩51单片机,到stm32,然后玩Linux,逼自己看过很多书籍,自学的过程走过很多弯路,最后也如愿以偿。所以,我想把我的经验分享给朋友们。同时,打造一个嵌入式圈子,欢迎所有嵌入式行业的朋友进来。期待你的关注!

相关文章
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
1113 5
|
机器学习/深度学习 自然语言处理 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
759 13
RT-DETR改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
|
存储 Linux
logstash与Rsyslog安装配置
通过将Logstash和Rsyslog结合使用,可以实现强大的日志收集和处理功能。Rsyslog负责接收和转发系统日志,Logstash负责解析和存储日志数据。以上指南提供了详细的安装和配置步骤,确保了两者能够无缝协作,以满足各种日志管理需求。希望本文能帮助你在实际项目中高效地部署和使用Logstash与Rsyslog。
471 8
|
存储 机器学习/深度学习 人工智能
文档智能与RAG技术在LLM中的应用评测
本文介绍了阿里云在大型语言模型(LLM)中应用文档智能与检索增强生成(RAG)技术的解决方案,通过文档预处理、知识库构建、高效检索和生成模块,显著提升了LLM的知识获取和推理能力,尤其在法律、医疗等专业领域表现突出。
1564 1
|
存储 Dart
Flutter&鸿蒙next 实现一个计算器应用
本文介绍了如何使用 Flutter 创建一个简单的计算器应用,包括基本的加减乘除运算。文章详细讲解了界面布局、计算逻辑和状态管理的实现步骤,通过具体的代码示例展示了如何构建计算器界面、处理用户输入和显示计算结果。
541 0
|
存储 Linux
如何查看Linux设备的硬盘信息?
【4月更文挑战第12天】在Linux系统中,查看硬盘信息的常用命令。
905 4
|
开发框架 前端开发 JavaScript
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
|
缓存 前端开发 安全
前后端分离架构下Java Web开发的挑战与解决方案
前后端分离架构下Java Web开发的挑战与解决方案
539 1
如何方法vscode窗口,快速升级本屏,多屏,ctrl + \,Ctrl+Shift+P,命令提示窗
如何方法vscode窗口,快速升级本屏,多屏,ctrl + \,Ctrl+Shift+P,命令提示窗