一、NXP官方U-boot编译

1、解压缩官方U-boot

解压缩命令

tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 

为了方便,修改文件夹名字,修改完成后如下图所示:

2、修改顶层Makefile

打开u-boot源码下的Makefile,设置编译架构和交叉编译器

在其中添加如下两行代码:

3、首次编译NXP官方u-boot

输入以下命令:

make distclean代表的是在编译前先清理工程。
make mx6ull_14x14_evk_emmc_defconfig 表示将该芯片的对应配置文件添加。
( u-boot支持的芯片的配置文件可以在configs中进行查看)
make -j2 代表采用双核进行编译

make distclean
make mx6ull_14x14_evk_emmc_defconfig
make -j2

编译完成如下图所示:

尽管编译没有报错,但这仅仅是NXP官方的u-boot,和我们自己的开发板有一定的差别,因此对于自己的开发板,应该创建一个新的配置文件进行配置和编译。

二、在U-boot中添加自己的开发板

1、先在 configs 目录下创建默认配置文件,

复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_my_defconfig,命令如下:

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_my_defconfig

然后将文件 mx6ull_my_defconfig中的内容改成下面的:

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

第一行和第四行的代码做出了修改

2、 添加板子对应的头文件

在目录 include/configs 下 添 加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制
include/configs/mx6ullevk.h,并重命名为 mx6ull_emmc_my.h,命令如下:

cd include/configs
cp mx6ullevk.h mx6ull_emmc_my.h

拷贝完成以后将:

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

修改成为:

#ifndef __MX6ULL_EMMC_MY
#define __MX6ULL_EMMC_MY

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

uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等
等。 NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下。

复制 mx6ullevk,将其重命名为 mx6ull_emmc_my,命令如下:

cd board/freescale/
cp mx6ullevk/ -r mx6ull_emmc_my

进入mx6ull_emmc_my目录中,将 其 中 的 mx6ullevk.c 文件 重命名为mx6ull_emmc_my.c,命令如下:

cd mx6ull_my/
mv mx6ullevk.c mx6ull_emmc_my.c

修改mx6ull_emmc_my/目录下的Makefile文件,修改完成后如下所示:

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

修改 mx6ull_emmc_my/目录下的 imximage.cfg 文件

修改 mx6ull_emmc_my/目录下的 Kconfig 文件

if TARGET_MX6ULL_EMMC_MYconfig SYS_BOARDdefault "mx6ull_emmc_my"config SYS_VENDORdefault "freescale"config SYS_CONFIG_NAMEdefault "mx6ull_emmc_my"endif

修改 mx6ull_my/目录下的 MAINTAINERS 文件

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

4、修改 U-Boot 图形界面配置文件

修改文件arch/arm/cpu/armv7/mx6/Kconfig

在 207 行加入如下内容:

config TARGET_MX6ULL_MYbool "Support mx6ull_emmc_my"select MX6ULLselect DMselect DM_THERMAL

在最后一行endif前加入以下内容:

source "board/freescale/mx6ull_emmc_my/Kconfig"

三、使用新添加板子的u-boot编译

编译命令如下:

make distclean
make mx6ull_my_defconfig
make -j2

编译结果如下:

编译完成以后就使用 imxdownload 将新编译出来的u-boot.bin 烧写到SD卡中测试,测试结果如下:

四、修改LCD驱动

进入目录board/freescale/mx6ull_emmc_my/,打卡mx6ull_emmc_my.c文件,修改内容如下所示:

struct display_info_t const displays[] = {{.bus = MX6UL_LCDIF1_BASE_ADDR,.addr = 0,.pixfmt = 24,.detect = NULL,.enable  = do_enable_parallel_lcd,.mode = {.name           = "TFT7016",.xres           = 1024,.yres           = 600,.pixclock       = 19531,.left_margin    = 140,.right_margin   = 160,.upper_margin   = 20,.lower_margin   = 12,.hsync_len      = 20,.vsync_len      = 3,.sync           = 0,.vmode          = FB_VMODE_NONINTERLACED
} } };

打开 include/configs/mx6ull_emmc_my.h,找到所有如下语句:

panel=TFT43AB

修改为:

panel=TFT7016

从先编译和烧写u-boot,启动后如下图所示:

并且屏幕已经亮起来了。

五、修改网络驱动

打开mx6ull_emmc_my.h文件找到如下内容,将ENET1的地址修改为0

由于正点原子开发板没有采用74LV595扩展IO,因此需要将74LV595的驱动代码进行删除,打开mx6ull_emmc_my.c文件,找到如下代码进行删除:

#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)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),
};static void iox74lv_init(void)
{int i;gpio_direction_output(IOX_OE, 0);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);
};void iox74lv_set(int index)
{int i;for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);if (i == index)gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);elsegpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);
};

并替换为如下代码:

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

将board_init函数中的imx_iomux_v3_setup_multiple_pads 和 iox74lv_init 这两个函数来初始化74lv595 的 GPIO,将这两行删除掉。

继续找到fec1_pads 和 fec2_pads,这两个结构图数组是两个网口的IO参数,需要在里面添加开发板对应的复位引脚,添加完后如下如所示:

setup_iomux_fec 就是根据 fec1_pads 和 fec2_pads 这两个网络 IO 配置数组来初始化
I.MX6ULL 的网络 IO,将其修改后如下所示:

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);}}

打开文件drivers/net/phy/phy.c,找到函数 genphy_update_link,添加如下代码:

六、启动U-boot,设置网络参数

设置与虚拟机相关的网络参数,我的设置如下:

setenv ipaddr 192.168.10.101
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.10.1
setenv netmask 255.255.255.0
setenv serverip 192.168.10.100
saveenv

设置完毕后进行验证,我的主机服务器地址为192.168.10.99,实现ping通:

至此U-boot移植完毕

移植NXP官方U-boot全过程相关推荐

  1. Uboot专题(一)—— 移植NXP官方Uboot(2016.03版本)

    linux系列目录: linux系统移植篇(二)-- Uboot使用介绍 Uboot专题(一)-- 移植NXP官方Uboot(2016.03版本) 文章目录 一.编译NXP官方uboot 1.获取ub ...

  2. i.MX6ULL系统移植 | 移植NXP官方linux4.1.15内核

    更新时间 更新内容 2021-11-15 初稿完成 2022-07-28 更新网络驱动移植部分 一.NXP官方linux内核 1. 下载 NXP官方linux仓库地址为:https://github. ...

  3. i.MX6ULL移植NXP官方Linux内核imx_5.4.47_2.2.0

    目录 开发环境 设置交叉编译工具链 下载NXP官方维护的内核 使用官方配置编译 使用4.9.88版本的设备树 通过网络下载内核镜像以及设备树 使用之前写在emmc中的根文件系统 添加自己的板子 使用n ...

  4. i.MX6ULL移植NXP官方uboot2020.04_5.4.47_2.2.0

    目录 开发环境 设置交叉编译工具链 下载nxp的uboot 移植uboot 编译uboot 烧写uboot镜像 建立自己的单板文件配置 解决适配问题 适配 lan8720a 网卡 查看公版原理图 查看 ...

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

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

  6. 【Linux系统移植】NXP 官方开发板 kernel内核 编译与烧录

    1.下载 NXP 官方 I.MX6ULL EVK 开发板的kernel :linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2.使用 FileZilla Client ...

  7. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核

    Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...

  8. IMX6ULL 基于NXP官方Linux源码添加自己单板

    编译NXP官方Linux内核 每个板子都有默认配置文件,都保 存 在 arch/arm/configs目录下 imx_v7_defconfig和imx_v7_mfg_defconfig 都可作为 I. ...

  9. 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

    源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...

最新文章

  1. 第 2 章 Editor
  2. Docker 镜像之存储管理
  3. kohana::message 和config
  4. boost::contract模块实现是否constexpr的测试程序
  5. 文本分类--情感分析
  6. 安装新硬盘-再次冲击Ubuntu之server篇
  7. 华为手机玩王者荣耀的时候微信消息通知不弹窗提示,打王者的时候微信不弹窗提示消息,(P30)【解决办法】
  8. springboot整合mongodb
  9. ARTS 2019 05 05 (29)
  10. 科普|股东需要对企业债务承担连带责任
  11. 对于阿里云手机 OS 大家都怎么看?
  12. getInputStream() has already been called for this request解决方法二
  13. 民航计算机初级职称有哪些,各系列专业职称资格分类一览表
  14. DotNetFX40
  15. 计算机辅助设计i ps,计算机辅助设计I(PS)
  16. Nginx搭建文件服务器以及文件在线预览和强制下载
  17. 计算机提取公式算等差平均,《等比数列前n项和》教案.doc
  18. 多元线性回归方程正规方程解(Normal Equation)公式推导详细过程
  19. django启用超级管理员_如何启用和连接Django管理界面
  20. 如何使用springboot和mybatis-Puls的IPage,Page实现分页查询

热门文章

  1. 华为三层交换机的工作原理
  2. CSDN博客访问量问题
  3. 【随记】Matlab画四象限图形
  4. 统计学基础--标准差
  5. Win10老是蓝屏收集错误信息重启无效怎么办?
  6. nginx rewrite 跨域
  7. C++旋转数组(三种解法详解)
  8. SpringBoot定时任务 @Scheduled详解
  9. java void的返回值_Java:void方法返回值?
  10. JS 时间戳转换成时间格式