微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 移植最新uboot的总结

移植最新uboot的总结

时间:11-21 来源:互联网 点击:

CPUID: 32440001
FCLK: 400 MHz
HCLK: 100 MHz
PCLK: 50 MHz
DRAM: 64 MiB
WARNING: Caches not enabled
Flash: *** failed ***
### ERROR ### Please RESET the board ###

在源码里面搜索“Flash:”,可以发现出现错误的原因,是由于board_init_r函数里面,
如果你的程序是从nand启动,那么会卡死,做如下修改:
# endif
} else {
puts("0 KB\n\r");
//puts(failed);
//hang();
}

3.6 修改UBOOT支持NOR FLASH
drivers\mtd\jedec_flash.c 加上新的型号
#define CONFIG_SYS_MAX_FLASH_SECT(128)

修复了重定时留下来的BUG:SP要重新设置

SMDK2410 # loady 32000000
SMDK2410 # protec off all
SMDK2410 # erase 0 7ffff
SMDK2410 # cp.b 32000000 0 80000

3.7 修改UBOOT支持NAND FLASH
修改:include/configs/smdk2440.h: #define CONFIG_CMD_NAND

把drivers\mtd\nand\s3c2410_nand.c复制为s3c2440_nand.c

分析过程:
nand_init
nand_init_chip
board_nand_init
设置nand_chip结构体, 提供底层的操作函数
nand_scan
nand_scan_ident
nand_set_defaults
chip->select_chip = nand_select_chip;
chip->cmdfunc = nand_command;
chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;

nand_get_flash_type
chip->select_chip
chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
nand_command() // 即可以用来发命令,也可以用来发列地址(页内地址)、行地址(哪一页)
chip->cmd_ctrl
s3c2440_hwcontrol

chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
*maf_id = chip->read_byte(mtd);
*dev_id = chip->read_byte(mtd);

烧写实验:
①烧写到NOR Flash
SMDK2410 # loady 30000000
SMDK2410 # protect off all
SMDK2410 # erase 0 7ffff
SMDK2410 # cp.b 30000000 0 80000
②烧写到NAND Flash
SMDK2410 # nand erase 0 80000
SMDK2410 # nand write 0 0 80000 把norflash 0地址里面的程序烧写到nand flash 0地址里面去,烧写80000
比较
SMDK2410 # nand read 30000000 0 80000

NAND read: device 0 offset 0x0, size 0x80000
524288 bytes read: OK
SMDK2410 # cmp.b 0 30000000 80000
Total of 524288 bytes were the same

3.8 修改UBOOT支持DM9000网卡
①修改smdk2440.h使它支持网卡DM9000
#if 0
#define CONFIG_CS8900
#define CONFIG_CS8900_BASE0x19000300
#define CONFIG_CS8900_BUS16
#else
#define CONFIG_DRIVER_DM9000
#endif
然后编译出错:dm9000x.c:156: error: DM9000_DATA undeclared (first use in this function)
查找原因:
book@book-desktop:/work/system/u-boot-2012.04.01$grep "DM9000_DATA" * -nR
参考别人的代码:更改smdk2440.h和lowlevel_init.S里面的时序
还是有错误:看一下调用过程
eth_initialize
board_eth_init
cs8900_initialize

*** ERROR: `ethaddr not set
现在可以用tftp下载代码了:
SMDK2410 # set ipaddr 192.168.1.17
SMDK2410 # set ethaddr 00:0c:29:4d:e4:f4
到这里先要在xp打开tptp服务器,服务器ip为192.168.1.50
SMDK2410 # set serverip 192.168.1.50
SMDK2410 # tftp 30000000 uImage
SMDK2410 # bootm 30000000
移植网卡搞定。

4. 易用性修裁剪及制作补丁

没有tftp时colin 下载uboot
SMDK2410 # loady 30000000
SMDK2410 # protect off all
SMDK2410 # erase 0 7ffff
SMDK2410 # cp.b 30000000 0 80000

tftp可ping通时colin 下载uboot:
SMDK2410 # tftp 30000000 u-boot_new.bin
SMDK2410 # protect off all
SMDK2410 # erase 0 3ffff
SMDK2410 # cp.b 30000000 0 40000
SMDK2410 # reset //重启

①环境变量的保存
重启uboot后,会打印:*** Warning - bad CRC, using default environment,这说明没有找到环境变量,需要使用默认的环境变量
在si中搜索,可以发现默认的参数修改
②裁剪

③以前在设置好了环境变量的时候一直不敢用save命令
内核打印出来的分区信息
0x00000000-0x00040000 : "bootloader"
0x00040000-0x00060000 : "params"
0x00060000-0x00260000 : "kernel"
0x00260000-0x10000000 : "root"
以前是这么烧写:
nand erase 60000 200000
nand write 30000000 60000 200000
现在可以用分区名字代替:
tftp 30000000 uImage
nand erase.part kernel
nand write 30000000 kernel

set bootcmd nand read 30000000 kernel;bootm 30000000

最后看看能不能烧写文件系统:
一:
烧写JFFS2
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 5b89a8

set bootargs console=ttySA

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top