iMX6ULL-UBoot移植

U-Boot移植

文章目录

  • U-Boot移植
  • 1 获取源码
    • 1.1 从u-boot官网获取
    • 1.2 从芯片厂商获取
    • 1.3 从开发板厂商获取
  • 2 移植
    • 2.1 生成自己的配置文件
      • 2.1.1 拷贝参考板的配置文件
      • 2.1.2 生成修改配置文件
      • 2.1.3 添加对应的头文件
      • 2.1.4 添加板级文件夹
      • 2.1.5 修改板级文件夹中的内容
    • 2.2 编译生成的配置文件
    • 2.3 将编译生成的镜像下载到TF卡中
    • 2.4 启动卡发板,查看报错信息
      • 2.4.1修改LCD驱动
      • 2.4.2 网络驱动修改

1 获取源码

1.1 从u-boot官网获取

u-boot官网

使用官方的u-boot的前提是芯片厂商已经将芯片适配相关的代码开源到u-boot官方源码中(要不从头构建太麻烦了,对于现在学习都费劲的我实在是完不成)。

1.2 从芯片厂商获取

从芯片厂商处获得的u-boot一定是对相关芯片适配过的。

1.3 从开发板厂商获取

对于学习使用的开发板,开发板厂商一定会对相关板子进行适配(直接拿来就能用的那种)。

2 移植

2.1 生成自己的配置文件

2.1.1 拷贝参考板的配置文件

I.MX6U-MINI板子使用的参考配置文件为mx6ull_14x14_evk_emmc_defconfig ,其在configs 文件夹下,将mx6ull_14x14_evk_emmc_defconfig 拷贝一份,并将其命名为自己的配置文件。

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_hello_emmc_defconfig

2.1.2 生成修改配置文件

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_hello_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"  //mx6ull_hello_emmc是等会自己需要创建的
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_HELLO_EMMC=y  //CONFIG_TARGET_MX6ULL_HELLO_EMMC也是需要修改的
CONFIG_CMD_GPIO=y

2.1.3 添加对应的头文件

在目录 include/configs文件夹下添加对应的头文件

cp include/configs/mx6ullevk.h include/configs/mx6ull_hello_emmc.h

mx6ull_hello.h文件中的宏修改为自己的,将

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

修改为:

#ifndef __MX6ULL_HELLO_EMMC_CONFIG_H
#define __MX6ULL_HELLO_EMMC_CONFIG_H

如果我们自己要想使能或者禁止 uboot 的某些功能,那就在 mx6ull_hello_emmc.h 里面做修改即可。

2.1.4 添加板级文件夹

板级文件夹是存放板级文件,比如开发板上外设驱动文件等,也就是2.1.2中提到的mx6ull_hello_emmc的文件夹,也是拷贝NXP的板级文件夹,并对其内容进行修改。

cd /board/freescale 
cp mx6ullevk mx6ull_hello_emmc -r

2.1.5 修改板级文件夹中的内容

  1. /board/freescale/mx6ull_hello_emmc 中的mx6ullevk.c重命名为mx6ull_hello_emmc.c

    mv mx6ullevk.c mx6ull_hello_emmc.c
    
  2. 修改mx6ull_hello_emmc文件夹下的Makefile文件,将Makefile修改为

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

    只用改为**obj-y := mx6ull_hello_emmc.o**,才会编译mx6ull_hello_emmc.c文件。

  3. 修改mx6ull_hello_emmc文件夹下的imximage.cfg文件

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

    修改为

    PLUGIN	board/freescale/mx6ull_hello_emmc/plugin.bin 0x00907000
    
  4. 修改mx6ull_hello_emmc文件夹下的Kconfig文件

    if TARGET_MX6ULL_HELLO_EMMC 
    
    config SYS_BOARD
    	default "mx6ull_hello_emmc"
    
    config SYS_VENDOR
    	default "freescale"
    
    config SYS_CONFIG_NAME
    	default "mx6ull_hello_emmc"
    
    endif
    
    
  5. 修改mx6ull_hello_emmc文件夹下的 MAINTAINERS文件

    MX6ULLEVK BOARD
    M:	Peng Fan 
    S:	Maintained
    F:	board/freescale/mx6ull_dang_emmc/
    F:	include/configs/mx6ull_dang_emmc.h
    F:	configs/mx6ull_dang_emmc_defconfig
    

2.2 编译生成的配置文件

make mx6ull_hello_emmc_defconfig #使用mx6ull_hello_emmc_defconfig配置文件生成u-boot
make -j4 

已经将ARCHCROSS_COMPILE 的参数添加到顶层makefile中了。

2.3 将编译生成的镜像下载到TF卡中

./imxdownload u-boot.bin /dev/sdb #先查看fdisk查看是哪个设备

使用正点原子的下载文件将u-boot.bin 下载到 tf 卡中。

2.4 启动卡发板,查看报错信息

启动开发板后发现屏幕有问题,网络报错。

2.4.1修改LCD驱动

  1. 首先查看LCD屏幕使用的各个GPIO是否相同
  2. LCD背光引脚设置
  3. LCD屏幕参数

查看之后发现引脚相同,所以只需要调整LCD参数。

屏幕使用时是4.3寸的屏幕,找到其对应参数,将其填入之后,具体参数如下:

struct display_info_t const displays[] = {{
	.bus = MX6UL_LCDIF1_BASE_ADDR,
	.addr = 0,
	.pixfmt = 24,
	.detect = NULL,
	.enable	= do_enable_parallel_lcd,
	.mode	= {
		.name			= "TFT4384",
		.xres           = 800,
		.yres           = 480,
		.pixclock       = 32258,
		.left_margin    = 88,
		.right_margin   = 40,
		.upper_margin   = 32,
		.lower_margin   = 13,
		.hsync_len      = 48,
		.vsync_len      = 3,
		.sync           = 0,
		.vmode          = FB_VMODE_NONINTERLACED
} } };

之后进行编译下载,发现LCD屏幕正常点亮。

2.4.2 网络驱动修改

根据原理图查看开发板和参考板的硬件区别是什么,然后对其就行修改。

(懒了,以后补

你可能感兴趣的:(嵌入式,#,IMX6ULL,linux,uboot,im6ull)