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,註釋掉就好了。

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目錄裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章