IMX6ULL-UBOOT驱动移植

介绍

IMX6ULL正点原子开发板使用的是14x14_evk的芯片 其中14x14代表的是芯片的尺寸。
本教程的标识符以nsouther或者 NSOUTHER NSouther为主

添加板子自己的配置文件

板子的默认配置文件保存在 configs目录下,我们以mx6ull_14x14_evk_emmc_defconfig为主,将其复制一份并重命名为 mx6ull_14x14_nsouther_defconfig

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_14x14_nsouther_emmc_defconfig 

然后修改mx6ull_14x14_nsouther_emmc_defconfig的内容 如下所示

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

image.png
其中我们需要修改的是CONFIG_SYS_EXTRA_OPTIONS 将板子的配置文件改成mx6ull_nsouther_emmc 这个文件夹我们将在下一步创建
其次是修改初始化配置CONFIG_TARGET_MX6ULL_NSOUTHER_EMMC=y 记住这个配置后面要用!!!

添加开发板对应的头文件

进入include/configs文件夹,在这里的配置文件我们主要以mx6ullevk.h为主 在它的基础上修改。

cp -rf  mx6ullevk.h mx6ull_nsouther_emmc.h 

在这里我们主要修改头文件的宏定义,因为是拷贝的evk.h中的 所以要修改这个不能和他重复就行了 这里的宏定义可以随便起 但是最好是具有辨识度并且不重复。
image.png
其次在这个文件夹中我们还要修改网口地址 将335行的PHY地址修改为**0x0 ,**6ULL板子上有两个网口 网口1的地址为0x0 网口2的地址为0x1 上面的宏定义为1 表示我们选择ETH2网口作为UBOOT网络通信的网口
image.png

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

进入board/freescale目录下 这个目录主要存放的是freescale芯片不同板子对于的配置文件,这里我们以mx6ullevk为主进行修改配置

cd board/freesacle
cp -rf mx6ullevk mx6ull_nsouther_emmc

在这个mx6ull_nsouther_emmc配置文件夹中我们主要关注以下几个文件

mx6ull_nsouther_emmc.c
imximage_lpddr2.cfg
imximage.cfg
Kconfig
MAINTAINERS
Makefile

image.png

  • mx6ull_nsouther_emmc.c

在这个文件中 我们主要修改网口的的复位管脚,使其可以成功复位
首先屏蔽掉原始的配置文件 新增和板子对应的GPIO复位管脚 对于ETN1是IO5_IO07
对于ETH2是IO5_IO08
image.png

找到下面这一段配置文件 因为前面我们已经注释掉了他的配置文件 所以将这段删除掉

static iomux_v3_cfg_t const iox_pads[] = {
/* IOX_SDI */
MX6_PAD_BOOT_MODE0__GPIO5_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_SHCP */
MX6_PAD_BOOT_MODE1__GPIO5_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_STCP */
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_nOE */
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};

接下来是屏蔽74lv芯片的初始化配置功能,这里需要屏蔽两个函数 分别是
iox74lv_init iox74lv_set 这两个函数
image.png

修改fec1_pads 和fec2_pads配置信息 添加板子的复位引脚 在最后一行分别加入以下信息

//fec1
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
//fec2
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL)

image.png在下面的 setup_iomux_fec修改成以下的形式

static void setup_iomux_fec(int fec_id)
{if (fec_id == 0){imx_iomux_v3_setup_multiple_pads(fec1_pads,ARRAY_SIZE(fec1_pads));gpio_direction_output(ENET1_RESET, 1);gpio_set_value(ENET1_RESET, 0);mdelay(20);gpio_set_value(ENET1_RESET, 1);}else{imx_iomux_v3_setup_multiple_pads(fec2_pads,ARRAY_SIZE(fec2_pads));gpio_direction_output(ENET2_RESET, 1);gpio_set_value(ENET2_RESET, 0);mdelay(20);gpio_set_value(ENET2_RESET, 1);}}

image.png
找到**board_init() **,因为我们前面屏蔽掉了74lv的初始化函数 所以在board_init中屏蔽掉这两个函数
image.png

  • imximage_lpddr2.cfg

修改PLUGIN中的信息 替换为我们板级文件所在的地址
image.png

  • imximage.cfg

同样做替换
image.png

  • Kconfig

Kconfig中主要做以下修改 记住这个 if后面的 TARGET_MX6ULL_NSOUTHER_EMMC
与我们在上面的defconfig配置文件中的修改一致
image.png
image.png

  • MAINTAINERS

主要修改板级文件夹的路径 和.h头文件的路径

image.png

  • Makefile

在Makefile中主要修改obj-y 将其改成mx6ull_nsouther_emmc.o 有了这个目标才会去编译对应的文件
image.png

修改Kconfig图形化配置

找到 arch/arm/cpu/armv7/mx6/Kconfig,添加下面的内容注意这个config的内容与我们上面标红的 TARGET_MX6ULL_NSOUTHER_EMMC保持一致

config TARGET_MX6ULL_NSOUTHER_EMMCbool "Support mx6ull_nsouther_emmc"select MX6ULLselect DMselect DM_THERMAL

image.png

修改driver中的phy驱动

在** drivers/net/phy/phy.c 中 找到 genphy_update_link()函数 做以下修改。**

if (lan8720_flag == 0) {bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {udelay(100);}phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);lan8720_flag = 1;}

image.png

编译测试

首先先清除下工程

make distclean
make mx6ull_14x14_nsouther_emmc_defconfig
make -j6

image.png
将其下载到板子
时间正确,网络正常
image.png
image.png

测试网络信息

将ETH2通过网线连接到路由器 这里我路由器的网段是192.168.100的网段 配置的nfs服务器 以及 tftpboot服务器网址为192.168.100.20

setenv ipaddr 192.168.100.20
setenv serverip 192.168.100.80
setenv gatewayip 192.168.100.1
setenv netmask 255.255.255.0
setenv ethaddr 00:04:9f:04:f2:35saveenv

接下来我们ping一下主机 网络正常
image.png

测试tftpboot

前提是已经搭建好了tftpboot服务端 这里我们使用tftpboot命令下载内核
下载成功
image.png

网络部分移植测试到此结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SOT23-6封装单键触摸感应触发芯片TC233A

前言: 触摸芯片很多,现在触摸按键已经应用到很多行业,虽然不能覆盖所有的按键,但确实用的越来越多,国产的价格也便宜的令人发指,比如这个TC233A,也就一毛多一点。 TC233A概述 TC233A 是一个单…

【Shell语言】linux中awk命令

linux中awk命令 看这里放声嘶吼谁也不舍得沉默 宽阔也抓不住我下一秒钟的echo ——《暂时失控》苏打绿 awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 B…

请陪伴Kimi和GPT成长

经验的闪光汤圆 但是我想要写实的 你有吗? 岁数大了,希望如何学习新知识呢?又觉得自己哪些能力亟需补强呢? 看论文自然得用Kimi,主要是肝不动了,眼睛也顶不住了。 正好昨天跟专业人士学会了用工作流的办法跟…

Python中的Super方法实现问题及解决方案

1、问题背景 在Python中,super方法用于在子类中调用父类的方法。Guido van Rossum曾给出了一个纯Python实现的super方法,以便更好地理解其工作原理。然而,在这个实现中,存在一个问题:当传入的对象不是要调用的父类的实…

C++入门 (2)

文章目录 C入门C输入输出缺省参数全缺省半缺省函数声明与定义分离 函数重载C支持函数重载的原理--名字修饰 C入门 C输入输出 C输入输出包含在# include《iostream》中 cout 类似在控制台中输出&#xff0c;使用cout需要使用流插入符&#xff08;<<&#xff09; 这个符号…

Hotcoin4月16日上新热门资产:头部RWA技术提供方Centrifuge(CFG)

Hotcoin持续为全球600万用户发掘优质潜力资产&#xff0c;热门币种交易上热币。一文快速了解今日上新资产:Centrifuge(CFG) 推荐指数 8.2 交易对 CFG/USDT 交易时间 4月16日 19:00 资产赛道 RWA 项目简介 Centrifuge是一个去中心化资产融资协议&#xff0c;专注于释放现实世界资…

Object.hasOwn is not a function

背景 开发一个H5页面,使用Object.hasOwn来测试属性是否存在,在error监控中,发现某些用户访问会出现如下报错: 问题分析 因为不是所有的用户都报错,继而先去mdn上查看这个api的浏览器兼容性: Object.hasOwn() - JavaScript | MDN 从【Can I Use】上也查看了此web技术的…

STM32串口通信

一、串口发送 1.初始化引脚 void Serial_Init(uint32_t BaudRate) {RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE );RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 ,ENABLE );GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP…

[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?

本文由Markdown语法编辑器编辑完成&#xff0e; 1. 前言: DCM格式&#xff0c;是医学图像领域里面的通用格式&#xff0e;DCM图像一般分为两大部分&#xff0c;一部分是TAG信息&#xff0c;一部分是像素. 而TAG信息&#xff0c;一般又会分为两部分&#xff0c;如下图所示, 是…

C++_智能指针

文章目录 前言一、智能指针原理二、库支持的智能指针类型1.std::auto_ptr2.std::unique_ptr3.std::shared_ptr4.std::weak_ptr 三、删除器总结 前言 智能指针是一种采用RAII思想来保护申请内存不被泄露的方式来管理我们申请的内存&#xff0c;对于RAII&#xff0c;我们之前也已…

LeetCode-热题100:102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; [[3],[9,20],[15,7]] 示例 2&am…

【GEE实践应用】使用MODIS NDVI数据集绘制研究区域每日NDVI序列曲线

// 设置研究区域 var geometry table;// 选择MODIS NDVI 数据集 var modisNDVI ee.ImageCollection(MODIS/006/MOD13A2).filterBounds(geometry).filterDate(2000-01-01, 2023-12-31);// 计算每天的平均 NDVI var dailyMeanNDVI modisNDVI.map(function(image) {var date e…

AndroidStudio AGP 7+, 编译aar并输出到本地仓库

1 编写构建gradle脚本代码 1.1 配置publication和repository 在指定moudle目录下新建名为"maven-publish.gradle"文件&#xff0c;其声明的publication和repository如下所示&#xff1a; apply plugin: maven-publish// This creates a task called publishReleas…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境

从浅入深 学习 SpringCloud 微服务架构&#xff08;二&#xff09;模拟微服务环境&#xff08;1&#xff09; 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…

java高校办公室行政事务管理系统设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于mvc的高校办公室行政…

软件缺陷的生命周期

参考&#xff1a;Defect/Bug Life Cycle in Software Testing 什么是缺陷 软件缺陷一般被我们叫做Bug。对应的软件缺陷&#xff0c;就是我们所测试的程序中存在的无法正常运行或功能有相关缺陷。 IEEE729-1983对缺陷的标准定义&#xff1a; 从产品内部看&#xff0c;缺陷是…

基于快照行情的股票/基金 1分钟 K 线合成指南

1. 概述 由于不同交易所不同资产的交易规则是有差异的&#xff0c;导致不同交易所基于快照行情或逐笔成交合成不同资产1分钟 K 线的计算方法是不同的。 本教程旨在提高 DolphinDB 在具体业务场景下的落地效率&#xff0c;降低 DolphinDB 在实际业务使用中的开发难度。 本教程…

C语言如何使⽤指针?

一、问题 指针变量在初始化以后就可以使⽤和参与操作了&#xff0c;那么就要⽤到对指针变量最常⽤的两个操作符——> * 和 &#xff06; 。 二、解答 这⾥⼜要提到始终贯穿着指针的⼀个符号“ * ”&#xff0c;但是这⾥的“ * ”是作为指针运算符使⽤的&#xff0c;叫做取内…

如何合理利用多个中国大陆小带宽服务器?

我们知道在中国大陆带宽单价非常昂贵&#xff0c;一个1Mbps 带宽的机子一年就得卖好几百人民币&#xff0c;这是不值当的&#xff0c;当然我们可以去低价漂阿里云、腾讯云的轻量服务器&#xff0c;99包年&#xff0c;但是带宽太小很难崩。 所以&#xff0c;我们必须构建一个能够…

linux进阶篇:重定向和管道操作

Linux中的重定向和管道操作 llinux中的三种IO设备&#xff1a; 标准输入&#xff08;STDIN&#xff09;,文件描述符号为&#xff1a;0&#xff0c;默认从键盘获取输入 标准输出&#xff08;STDOUT&#xff09;,文件描述符号位&#xff1a;1&#xff0c;默认输出到显示终端 标准…