基于IMX6Q的u-boot-2017.11的移植(1)->初步移植

1.下载u-boot
2.tar -xjvf u-boot-2017.11.tar.bz2
3.cd cd u-boot-2017.11/
4.进入到配置文件夹cd configs/
5.ls mx6q*
    mx6qarm2_defconfig  mx6qarm2_lpddr2_defconfig  mx6qsabrelite_defconfig
经过对这几个配置文件的查看,我最终选择的mx6qarm2_defconfig进行移植修改
6.回到uboot的根目录cd ..
7.vim Makefile
    VERSION = 2017
    PATCHLEVEL = 11
    SUBLEVEL =
    EXTRAVERSION =
    NAME =
    #add by xcl
    ARCH=arm
    CROSS_COMPILE=arm-linux-gnueabihf-

8.make mx6qarm2_defconfig
9.make 
10.将编译生成的镜像u-boot.imx烧写到sd卡,插入sd卡到电脑执行:sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2
注意:这儿的/dev/sdb可能在你的电脑不同,请通过插拔sd卡进行确认
11.修改DCD对内存进行配置:vim ./board/freescale/mx6qarm2/imximage.cfg
    /*
     * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
     * Jason Liu <r64343@freescale.com>
     *
     * SPDX-License-Identifier:	GPL-2.0+
     *
     * Refer doc/README.imximage for more details about how-to configure
     * and create imximage boot image
     *
     * The syntax is taken as close as possible with the kwbimage
     */

    /* image version */
    IMAGE_VERSION 2

    /*
     * Boot Device : one of
     * spi, sd (the board has no nand neither onenand)
     */
    BOOT_FROM	sd

    /*
     * Device Configuration Data (DCD)
     *
     * Each entry must have the format:
     * Addr-type           Address        Value
     *
     * where:
     *	Addr-type register length (1,2 or 4 bytes)
     *	Address	  absolute address of the register
     *	value	  value to be stored in the register
     */
    /* DCD */
    DATA 4, 0x020e0798, 0x000C0000
    DATA 4, 0x020e0758, 0x00000000
    DATA 4, 0x020e0588, 0x00000030
    DATA 4, 0x020e0594, 0x00000030
    DATA 4, 0x020e056c, 0x00000030
    DATA 4, 0x020e0578, 0x00000030
    DATA 4, 0x020e074c, 0x00000030
    DATA 4, 0x020e057c, 0x00000030
    DATA 4, 0x020e058c, 0x00000000
    DATA 4, 0x020e059c, 0x00000030
    DATA 4, 0x020e05a0, 0x00000030
    DATA 4, 0x020e078c, 0x00000030
    DATA 4, 0x020e0750, 0x00020000
    DATA 4, 0x020e05a8, 0x00000018
    DATA 4, 0x020e05b0, 0x00000018
    DATA 4, 0x020e0524, 0x00000018
    DATA 4, 0x020e051c, 0x00000018
    DATA 4, 0x020e0518, 0x00000018
    DATA 4, 0x020e050c, 0x00000018
    DATA 4, 0x020e05b8, 0x00000018
    DATA 4, 0x020e05c0, 0x00000018
    DATA 4, 0x020e0774, 0x00020000
    DATA 4, 0x020e0784, 0x00000018
    DATA 4, 0x020e0788, 0x00000018
    DATA 4, 0x020e0794, 0x00000018
    DATA 4, 0x020e079c, 0x00000018
    DATA 4, 0x020e07a0, 0x00000018
    DATA 4, 0x020e07a4, 0x00000018
    DATA 4, 0x020e07a8, 0x00000018
    DATA 4, 0x020e0748, 0x00000018
    DATA 4, 0x020e05ac, 0x00000018
    DATA 4, 0x020e05b4, 0x00000018
    DATA 4, 0x020e0528, 0x00000018
    DATA 4, 0x020e0520, 0x00000018
    DATA 4, 0x020e0514, 0x00000018
    DATA 4, 0x020e0510, 0x00000018
    DATA 4, 0x020e05bc, 0x00000018
    DATA 4, 0x020e05c4, 0x00000018
    DATA 4, 0x021b0800, 0xa1390003
    DATA 4, 0x021b080c, 0x001F001F
    DATA 4, 0x021b0810, 0x001F001F
    DATA 4, 0x021b480c, 0x001F001F
    DATA 4, 0x021b4810, 0x001F001F
    DATA 4, 0x021b083c, 0x43180330
    DATA 4, 0x021b0840, 0x03180310
    DATA 4, 0x021b483c, 0x43200330
    DATA 4, 0x021b4840, 0x0320025C
    DATA 4, 0x021b0848, 0x40363838
    DATA 4, 0x021b4848, 0x38362E3C
    DATA 4, 0x021b0850, 0x3E3C4840
    DATA 4, 0x021b4850, 0x44364640
    DATA 4, 0x021b081c, 0x33333333
    DATA 4, 0x021b0820, 0x33333333
    DATA 4, 0x021b0824, 0x33333333
    DATA 4, 0x021b0828, 0x33333333
    DATA 4, 0x021b481c, 0x33333333
    DATA 4, 0x021b4820, 0x33333333
    DATA 4, 0x021b4824, 0x33333333
    DATA 4, 0x021b4828, 0x33333333
    DATA 4, 0x021b08b8, 0x00000800
    DATA 4, 0x021b48b8, 0x00000800
    DATA 4, 0x021b0004, 0x00020036
    DATA 4, 0x021b0008, 0x09444040
    DATA 4, 0x021b000c, 0x8A8F7955
    DATA 4, 0x021b0010, 0xFF328F64
    DATA 4, 0x021b0014, 0x01FF00DB
    DATA 4, 0x021b0018, 0x00001740
    DATA 4, 0x021b001c, 0x00008000
    DATA 4, 0x021b002c, 0x000026D2
    DATA 4, 0x021b0030, 0x008F1023
    DATA 4, 0x021b0040, 0x00000047
    DATA 4, 0x021b0000, 0x841A0000
    DATA 4, 0x021b001c, 0x04088032
    DATA 4, 0x021b001c, 0x00008033
    DATA 4, 0x021b001c, 0x00048031
    DATA 4, 0x021b001c, 0x09408030
    DATA 4, 0x021b001c, 0x04008040
    DATA 4, 0x021b0020, 0x00005800
    DATA 4, 0x021b0818, 0x00011117
    DATA 4, 0x021b4818, 0x00011117
    DATA 4, 0x021b0004, 0x00025576
    DATA 4, 0x021b0404, 0x00011006
    DATA 4, 0x021b001c, 0x00000000

    /* set the default clock gate to save power */
    DATA 4 0x020c4068 0x00C03F3F
    DATA 4 0x020c406c 0x0030FC03
    DATA 4 0x020c4070 0x0FFFC000
    DATA 4 0x020c4074 0x3FF00000
    DATA 4 0x020c4078 0x00FFF300
    DATA 4 0x020c407c 0x0F0000C3
    DATA 4 0x020c4080 0x000003FF

    /* enable AXI cache for VDOA/VPU/IPU */
    DATA 4 0x020e0010 0xF00000CF
    /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
    DATA 4 0x020e0018 0x007F007F
    DATA 4 0x020e001c 0x007F007F
进行编译下载启动,但是没有输出,继续查找修改......

12.追踪到./board/freescale/mx6qarm2/mx6qarm2.c 
    static void setup_iomux_uart(void)
    {
	    imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
    }

    iomux_v3_cfg_t const uart4_pads[] = {
	MX6_PAD_KEY_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
	MX6_PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
    };这儿配置的是串口4,我们需要串口1
修改为:
    static void setup_iomux_uart(void)
    {
	    imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
    }
    iomux_v3_cfg_t const uart1_pads[] = {
	MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
	MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
    };
13.vim include/configs/mx6qarm2.h
将#define CONFIG_MXC_UART_BASE            UART4_BASE
修改为:#define CONFIG_MXC_UART_BASE            UART1_BASE
14.下载到sd卡:sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2
插入开发部从sd卡启动串口输出为:
    U-Boot 2017.11 (Jan 04 2018 - 20:45:47 +0800)                                   
                                                                                    
    CPU:   Freescale i.MX6Q rev1.5 at 792 MHz                                       
    Reset cause: POR                                                                
    Board: MX6Q-Armadillo2                                                          
    DRAM:  2 GiB                                                                    
    MMC: 
15.调试发现:
    ./board/freescale/mx6qarm2/mx6qarm2.c 
    iomux_v3_cfg_t const usdhc3_pads[] = {
	MX6_PAD_SD3_CLK__SD3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_CMD__SD3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_NANDF_CS0__GPIO6_IO11  | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
    };在这儿我们使用的串口1引脚被重新配置了,所以不能输出。
修改为:
    iomux_v3_cfg_t const usdhc3_pads[] = {
	MX6_PAD_SD3_CLK__SD3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_CMD__SD3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	/*MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
	MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),*//*modefied by xcl*/
	MX6_PAD_NANDF_CS0__GPIO6_IO11  | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
};
16.下载到开发板:sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2
串口输出为:
    U-Boot 2017.11 (Jan 04 2018 - 20:58:38 +0800)                                   
                                                                                    
    CPU:   Freescale i.MX6Q rev1.5 at 792 MHz                                       
    Reset cause: POR                                                                
    Board: MX6Q-Armadillo2                                                          
    DRAM:  2 GiB                                                                    
    MMC:   FSL_SDHC: 0, FSL_SDHC: 1                                                 
    MMC Device -1 not found                                                         
    *** Warning - No MMC card found, using default environment                      
                                                                                    
    In:    serial                                                                   
    Out:   serial                                                                   
    Err:   serial                                                                   
    Net:   FEC                                                                      
    Error: FEC address not set.                                                     
                                                                                    
    Hit any key to stop autoboot:  0                                                
    switch to partitions #0, OK                                                     
    mmc1(part 0) is current device                                                  
    switch to partitions #0, OK                                                     
    mmc1(part 0) is current device                                                  
    ** Unable to read file boot.scr **                                              
    reading zImage                                                                  
    8472784 bytes read in 405 ms (20 MiB/s)                                         
    Booting from mmc ...                                                            
    ** Unable to read file imx6q-arm2.dtb **                                        
    Kernel image @ 0x12000000 [ 0x000000 - 0x8148d0 ]                               
                                                                                    
    Starting kernel ...                                                             
说明:以前我用三星soc的时候的启动的大概流程是,固化rom的代码只拷贝启动设备的前一段代码,然后我们需要在这段代码中进行内存初始化和剩余uboot代码的拷贝,但是由于imx6的启动方式所以代码拷贝的全部工作都被固化的程序做了,这个主要得益于ivt和dcd。                                                   



  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值