uboot官网

i.mx6ull uboot移植

  • 一、移植NXP官方的uboot
    • 1、编译NXP官方的uboot
    • 2、烧录到板子测试是否能启动
    • 3、添加新的开发板配置
      • a.修改默认配置文件
      • b.修改头文件
      • c.添加板级文件
      • c.修改开发板配置文件_Makefile
      • d.修改开发板配置文件_imximage.cfg
      • e.修改开发板配置文件_Kconfig
      • f.修改开发板配置文件_MAINTAINERS
      • g.修改uboot支持图形界面配置
    • 4、编译烧录验证
  • 二、修改LCD驱动
  • 三、修改网络驱动
    • 1、修改驱动
      • a. 修改网络PHY地址
      • b. 删除74LV595的驱动代码
        • aa、引脚替换
        • ab、删除初始化函数
        • ac.将iox74lv_set也删除掉
        • ad.删除函数调用
      • c.添加复位引脚驱动
      • d.设置IO的驱动
      • e.修改通用PHY 驱动函数
    • 2、编译烧录验证

一、移植NXP官方的uboot

1、编译NXP官方的uboot

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

2、烧录到板子测试是否能启动

3、添加新的开发板配置

a.修改默认配置文件

在uboot的configs目录下,复制原厂的配置文件defconfig

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_myself_defconfig

修改配置文件为:

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

主要修改了路径名 /freescale/mx6ull_myself/imximage.cfg
CONFIG_TARGET_MX6ULL_MYSELF=y

b.修改头文件

在uboot的include/configs目录下,复制原厂的配置文件defconfig

cd include/configs
cp include/configs/mx6ullevk.h mx6ull_myself.h
将
#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H 改为:
#ifndef __MX6ULL_MYSELF_CONFIG_H
#define __MX6ULL_MYSELF_CONFIG_H

c.添加板级文件

uboot中每个板子都有一对应的文件夹来存放级,比如开发上外设驱动等。
在board/freescale/目录下,复制原厂的板级文件夹

cd board/freescale/
cp mx6ullevk/ -r mx6ull_myself

重命名原来的.c文件

cd mx6ull_myself
mv mx6ullevk.c mx6ull_myself.c

c.修改开发板配置文件_Makefile

对\board\freescale\mx6ull_myself板级文件下的Makefile
修改目标编译文件

obj-y  := mx6ull_myself.o

d.修改开发板配置文件_imximage.cfg

对\board\freescale\mx6ull_myself板级文件下的imximage.cfg
修改开发板插件路径

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

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

e.修改开发板配置文件_Kconfig

修改结果如下:

if TARGET_MX6ULL_MYSELFconfig SYS_BOARDdefault "mx6ull_myself"config SYS_VENDORdefault "freescale"config SYS_SOC default "mx6" config SYS_CONFIG_NAMEdefault "mx6ull_myself"endif

f.修改开发板配置文件_MAINTAINERS

修改为:

MX6ULL_MYSELF BOARD
M:  Peng Fan <peng.fan@nxp.com>
S:  Maintained
F:  board/freescale/mx6ull_myself/
F:  include/configs/mx6ull_myself.h

g.修改uboot支持图形界面配置

在arch/arm/cpu/armv7/mx6/Kconfig下,大约207行添加以下内容:

config TARGET_MX6ULL_MYSELFbool "Support mx6ull_myself" select MX6ULL select DM select DM_THERMAL


翻到下面添加source

source "board/freescale/mx6ull_myself/Kconfig"

4、编译烧录验证

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_myself_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

二、修改LCD驱动

因无屏幕无法验证

三、修改网络驱动

此时开发板虽然正常启动,但是网卡是无法驱动的,我们需要对网卡的驱动进行修改
提示:正点原子阿尔法开发板有两个网口,mini版的只有一个,使用的是ENET2
mini版的原理图:

1、修改驱动

a. 修改网络PHY地址

#ifdef CONFIG_CMD_NET
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MII
#define CONFIG_FEC_MXC
#define CONFIG_MII
#define CONFIG_FEC_ENET_DEV     1#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_MICREL
#endif

b. 删除74LV595的驱动代码

aa、引脚替换

在板子的.c文件,找到IO扩展的代码

#define IOX_SDI IMX_GPIO_NR(5, 10)
#define IOX_STCP IMX_GPIO_NR(5, 7)
#define IOX_SHCP IMX_GPIO_NR(5, 11)
#define IOX_OE IMX_GPIO_NR(5, 8)

ENET1 的复位引脚连接到SNVS_TAMPER7 上,对应GPIO5_IO07,
ENET2 的复位引脚连接到SNVS_TAMPER8 上,对应GPIO5_IO08。
所以替换为以太网的复位引脚:

#define ENET1_RESET IMX_GPIO_NR(5, 7)
#define ENET2_RESET IMX_GPIO_NR(5, 8)

ab、删除初始化函数

找到函数iox74lv_init,将其删掉

ac.将iox74lv_set也删除掉

ad.删除函数调用

在 board_init 函数中删除iox74lv的函数调用

imx_iomux_v3_setup_multiple_pads(iox_pads, ARRAY_SIZE(iox_pads));
iox74lv_init();

c.添加复位引脚驱动

static iomux_v3_cfg_t const fec1_pads[] 中添加

MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),

static iomux_v3_cfg_t const fec2_pads[] 中添加

 MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),

d.设置IO的驱动

修改 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));// 添加网络复位 IO 的初始化代码并且复位一下 PHY 芯片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));// 添加网络复位 IO 的初始化代码并且复位一下 PHY 芯片gpio_direction_output(ENET2_RESET, 1);         gpio_set_value(ENET2_RESET, 0); mdelay(20); gpio_set_value(ENET2_RESET, 1); }
}

e.修改通用PHY 驱动函数

在路径 drivers/net/phy/ 找到 phy.c 文件
在前面添加:

static int lan8720_flag = 0;
int bmcr_reg = 0;
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;
}


按照教程使用 #ifdef CONFIG_PHY_SMSC 似乎不行,不知道为啥。

2、编译烧录验证

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_myself_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

i.mx6ull uboot移植相关推荐

  1. 野火i.MX6ULL Pro开发板U-Boot移植

    之前一直用STM32跑RTT,最近想做一台游戏机,主屏采用960*640,但是发现STM32的运存实在着急,2M根本不够用,64M勉勉强强,但是看了看价格就呵呵了.于是在网上搜了搜发现i.MX6ULL ...

  2. I.MX6ULL 官方 U-Boot 移植系列教程 1 —— 前期准备

    文章目录 前言 一.搭建开发环境 二.获取官方资料 1. 获取官方开发板资料 2. 获取官方 U-Boot 源码 总结 前言 去年入手了一块正点原子的 I.MX6U-ALPHA 开发板,跟着其配套的指 ...

  3. uboot移植到IMX6ULL平台详细过程

    uboot移植到IMX6ULL平台详细过程 文章目录 uboot移植到IMX6ULL平台详细过程 1.解压 2 编译 NXP 官方开发板对应的 uboot 3 烧写验证与驱动测试 1.SD 卡和 EM ...

  4. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A(对比原子和NXP官方测试板的网络芯片LAN8720A , KSZ8081 (也是飞凌)唯独复位引脚不同595芯片也涉及改动)

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

  5. UBOOT学习1——UBOOT移植流程

    UBOOT学习1--UBOOT移植流程 1.创建板级目录 在board/ 目录下创建目录更改文件(使用imx6ull) (1)创建板级.c文件 (2)更改镜像配置文件imximage.cfg 2.创建 ...

  6. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解

    u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...

  7. 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. U-Boot 移植初探

    1. NXP官方开发板uboot编译测试 uboot移植不需要从零开始将uboot移植到使用的开发板上.因为半导体厂商通常都会自己做一个开发板, 将uboot移植到他们自己的原厂开发板上,再将这个ub ...

  9. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  10. U-Boot移植教程之二:移植

    内容来自 韦东山<嵌入式Linux应用开发完全手册> 一.U-Boot移植 开发板smdk2410的配置适用于大多数S3C2410单板,或是只需要极少的修改即可使用.但是目前U-Boot中 ...

最新文章

  1. Analysis Services基础知识——深入SQL Server 2008
  2. C# 中是否支持 Like 和 ln 条件的参数化查询 ?
  3. maven打包时跳过测试
  4. php token 表单重复提交,PHP生成token防止表单重复提交2个例子
  5. activiti启动流程实例,添加进businessKey
  6. Display yuv formatted video by shader
  7. 使用derby导入mongodb数据
  8. 乱码问题的原理及解决方法
  9. 批量下载wsdl文件
  10. Zabbix自定义报警提示声音
  11. Android 实战 - 天气(有缺陷)APP
  12. 请问:现正在广告上的丰胸产物是不是实的?
  13. 腾讯云服务器网站504,使用腾讯、百度云CDN现403和504错误的解决及使用CDN踩的坑...
  14. 苹果Airplay2学习
  15. 非wait线程即时唤醒epoll_wait
  16. Android实现收款成功金额的语音播报功能(Nice tone)
  17. C++中或运算符(||)执行的逻辑及顺序
  18. Json转List时,字符串多次toJson出现异常
  19. bootstrap 登录页面切图(一)
  20. python爬虫笔记(八) 实例3:用Python批量爬取全站小说【以书趣阁为例】

热门文章

  1. 腾讯悄悄地发布了Linux版QQ-附安装-卸载方法
  2. 身份证归属地查询接口
  3. 爬取豆瓣网电视剧数据(共1500条)
  4. 基于SSM的小区物业管理系统(附源码+论文)
  5. 我们的后花园需要如何保护
  6. ROS教程(一):ROS安装教程(详细图文)
  7. 标准报表乱码出现??符号
  8. mx350显卡天梯图_显卡天梯图2020年终整理发布
  9. Python基于周立功ZCANPRO开发刷写脚本
  10. 计算机视觉 --基于opencv实现证件照换底色、翻转