u-boot移植
来源:互联网 发布:张国荣热门知乎 编辑:程序博客网 时间:2024/06/08 14:59
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_defconfigmake menuconfigBoot images ---> (NAND) Extra Options (DEPRECATED)
启动介质修改为NAND。
然后结合之前的配置信息,裁剪不需要的功能。
make
最终会在当前目录下生成MLO,u-boot.img,这两个文件是我们需要使用的。
烧写
设置好网络环境,上电,进入u-boot交互界面
setenv serverip 192.168.1.2setenv ipaddr 192.168.1.110setenv gatewayip 192.168.1.1setenv netmask 255.255.255.0tftp 0x82000000 MLOnand erase 0x0 0x20000nand write.i 0x82000000 0x0 ${filesize}tftp 0x82000000 u-boot.imgnand erase 0x80000 0x1e0000nand 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目录里。
- XSBase255B -- u-boot移植
- u-boot移植心得
- u-boot移植日记
- U-BOOT移植
- 移植u-boot
- u-boot移植三
- U-BOOT移植总结
- U-boot移植说明
- at91rm9200移植u-boot
- lpc2210 u-boot移植
- U-BOOT移植小解
- U-BOOT全线移植
- u-boot移植s3c2410
- IXP425 U-boot移植
- u-boot移植手册
- U-boot移植过程
- u-boot移植
- lpc2210 u-boot移植
- 前端开发(HTML+CSS静态部分)
- Java中final关键字的使用
- 洛谷 P2679子串
- 1126. Eulerian Path (25)
- hadoop HDFS文件系统的特征
- u-boot移植
- Windows7系统中IPython Notebook的安装
- Class类文件的结构
- 背包九讲之0-1背包问题 滑动数组实现 Java实现
- 常用的数据库查询语句
- find locate whereis which type
- jQuery中获取三个高度方法
- java设计模式
- HDU 3555(数位dp)