u-boot移植

u-boot的基础知识前面已经分析完,接下来针对我们自己的板子进行详细的移植。

修改代码

eeprom

由于板子中没有eeprom,所以下面这个函数需要修改。
board/ti/am335x/board.c

static inline int __maybe_unused read_eeprom(void)
{
    //return ti_i2c_eeprom_am_get(-1, CONFIG_SYS_I2C_EEPROM_ADDR);
    return 0;
}

网卡设置

int board_eth_init(bd_t *bis)
{
    ... ... 

    if (1 || board_is_bone() || board_is_bone_lt() ||
        board_is_idk()) {
        writel(MII_MODE_ENABLE, &cdev->miisel);
        cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
                PHY_INTERFACE_MODE_MII;
    }

    ... ...
}

管脚

管脚设置,使能Nand管脚
board/ti/am335x/mux.c

void enable_board_pin_mux(void)
{
    /* Do board-specific muxes. */
    if (1 || board_is_bone()) {
        /* Beaglebone pinmux */
        configure_module_pin_mux(mii1_pin_mux);
        configure_module_pin_mux(mmc0_pin_mux);
#if defined(CONFIG_NAND)
        configure_module_pin_mux(nand_pin_mux);
#elif defined(CONFIG_NOR)
        configure_module_pin_mux(bone_norcape_pin_mux);
#else
        configure_module_pin_mux(mmc1_pin_mux);
#endif
    }
    ... ...
}

代码修改如上,就可以支持我们的板子。

配置

下面裁剪u-boot,去除不需要的功能,如MMC等。有些功能是通过menuconfig来配置,有些则需要在am335x_evm.h等头文件中设置。有几个特别注意的配置:

设置启动参数

"nandargs=setenv bootargs console=${console} " \
    "${optargs} " \
    "root=${nandroot} noinitrd " \
    "rootfstype=${nandrootfstype}\0" \
"nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \
"nandrootfstype=ubifs ubi.fm_autoconvert=1\0" \
"console=ttyO0,115200n8\0" \
"nandboot=echo Booting from nand ...; " \
    "run nandargs; " \
    "nand read ${fdtaddr} NAND.SPL.backup2; " \
    "nand read ${loadaddr} NAND.kernel; " \
    "bootm ${loadaddr} - ${fdtaddr}\0"

#define BOOT_TARGET_DEVICES(func) \
    func(NAND, nand, 0) \

#define CONFIG_BOOTCOMMAND \
    "run nandboot"

设置Nand分区

#define MTDPARTS_DEFAULT        "mtdparts=nand.0:" \
                    "128k(NAND.SPL)," \
                    "128k(NAND.SPL.backup1)," \
                    "128k(NAND.SPL.backup2)," \
                    "128k(NAND.SPL.backup3)," \
                    "1920k(NAND.u-boot)," \
                    "128k(NAND.u-boot-env)," \
                    "5m(NAND.kernel)," \
                    "-(NAND.file-system)"
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x00080000

#define CONFIG_CMD_SPL_NAND_OFS 0x00060000 /* os parameters */
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x00280000 /* kernel offset */
#define CONFIG_CMD_SPL_WRITE_SIZE   0x20000

环境变量

把环境变量放到Nand中

#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET       0x00260000

网卡地址

定义CONFIG_ETHADDR

#define CONFIG_ETHADDR 38:d2:69:77:b4:94

否则会报警告:

Net:   <ethaddr> not set. Validating first E-fuse MAC

另外还需要在include/env_default.h的default_environment数组中添加

#ifdef  CONFIG_ETHADDR
    "ethaddr="  __stringify(CONFIG_ETHADDR) "\0"
#endif

falcon模式

启动源如果是Nand,则默认会开启falcon模式,如果不需要,则应该关闭
include/configs/ti_armv7_common.h

#if 0
 #define CONFIG_SPL_OS_BOOT
#endif

找到CONFIG_SPL_OS_BOOT,注释掉就好了。

扫描二维码关注公众号,回复: 13410066 查看本文章

Makefile

最后一点,在修改顶层Makefile

 ifeq ($(HOSTARCH),$(ARCH))
 CROSS_COMPILE ?=
 endif
+ARCH = arm
+CROSS_COMPILE = arm-linux-

编译

make am335x_boneblack_defconfig
make menuconfig
Boot images  --->
    (NAND) Extra Options (DEPRECATED) 

启动介质修改为NAND。
然后结合之前的配置信息,裁剪不需要的功能。

make

最终会在当前目录下生成MLO,u-boot.img,这两个文件是我们需要使用的。

烧写

设置好网络环境,上电,进入u-boot交互界面

setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.110
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0

tftp 0x82000000 MLO
nand erase 0x0 0x20000
nand write.i 0x82000000 0x0 ${filesize}

tftp 0x82000000 u-boot.img
nand erase 0x80000 0x1e0000
nand write.i 0x82000000 0x80000 ${filesize}

上面的命令适用于新版本u-boot,譬如我目前用的版本,老版本如2011.09则不适用。
如果当前u-boot是老版本的,在烧写新版本时需要加上nandecc hw 2;
否则,会出现一个奇怪的现象:设备上电后,一直打印CCC,这儿说的一直是一直动态的打印。

串口烧写

当Nand里面没有u-boot,或u-boot不可用时,如何烧写?可以采用sd卡烧写,我们采用的是串口烧写。
串口烧写的方式如下,串口工具是secureCRT。
上电,从串口中打印CCCCC字符,打开文件传输协议Transfer –> Send Xmodem(1K mode),
选择 u-boot-spl.bin文件进行传输。传输成功后,AM335x内部的ROM会引导启动。当这个启动完成之后会再一次出现CCCCC字符,这时打开文件传输协议Transfer –> Send Ymodem(1K mode),传输文件u-boot.img.传输完成后,SPL会引导启动这个在RAM里面的u-boot。
此处用到的u-boot-spl.bin,是在成功编译u-boot后生成的,位于顶层目录下的spl目录里。

猜你喜欢

转载自blog.csdn.net/donglicaiju76152/article/details/77917453