微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uboot移植到S3C44B0X开发板的经历

uboot移植到S3C44B0X开发板的经历

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

In: serial
Out: serial
Err: serial
MAC: 26:26:26:26:26:26
Hit any key to stop autoboot: 0
=>

(10) 希望环境变量存贮到flash
B2板缺省的定义是把环境变量存贮到EEPROM上,虽然armsys上也有,但我也搞不清楚它的硬件配置,因此希望把环境变量存贮到flash上.

增加配置: include/configs/wx20.h (从evb4510.h中学来!)
79 #define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
80 CFG_CMD_DATE | \
81 CFG_CMD_ELF | \
82 CFG_CMD_NET | \
83 CFG_CMD_ENV|CFG_CMD_FLASH 200)this.width=200>screen.width/2)this.style.width=screen.width/2;" border=0>
173 #define CFG_ENV_IS_IN_FLASH
174 #undef CFG_ENV_IS_NOWHERE
175
176 #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x20000) /* environment start address */
177 #define CFG_ENV_SECT_SIZE 0x10000 /* Total Size of Environment Sector */

编译运行, 并操作setenv, saveenv, printenv. 看起来正常.
=> setenv ipaddr 192.168.1.100
=> saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...
done
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
ð printenv

但重新启动机器后,参数没有起作用,还是缺省的.仔细看了环境变量的程序,发现是由于ENV_IS_EMBEDDED定义造成的,而此变量定义是在./tools/envcrc.c中:
# if (CFG_ENV_ADDR >= CFG_MONITOR_BASE) && \
((CFG_ENV_ADDR + CFG_ENV_SIZE) <= (CFG_MONITOR_BASE + CFG_MONITOR_LEN))
# define ENV_IS_EMBEDDED 1
# endif

因此在wx20.h中增加了:
#define CFG_MONITOR_BASE PHYS_SDRAM_1 (我还没搞清楚这个变量干啥的.)
主要是去除ENV_IS_EMBEDDED的定义。

结果确实准备使用flash的环境变量,但每次总是说标志头错误,经过仔细调试,最终发现flash写出现错误,原因是我忘了修改wx/common/flash.c中的CONFIG_B2为CONFIG_WX20. 修改后就正常了.

(11) arm-linux和arm-elf
上面调试一直是arm-elf,原因是以前有问题时怀疑编译器问题而修改了,因此没有改变。改用arm-linux编译后:

U-Boot 1.1.3 (Jul 3 2005 - 07:01:36)

U-Boot code: 0C100000 -> 0C117DA0 BSS: -> 0C11C0F0
RAM Configuration:
Bank #0: 0c000000 8 MB
env_init flash_addr=20000
flash_addr=20000 env_ptr=20000 env_ptr->data=bootargs=setenv bootargs root=/dev/ram ip=192.168.1.100:::::eth0:off ether=25,0,0,0,eth0 ethaddr=00:50:c2:1e:af:fb
envptr->crc=1470de2 1470de2
buffer->crc=1470de2
[flash_get_size, 224] Entering ...
[flash_get_size, 232] value=bf
[flash_get_size, 255] value=234b
Flash: 2 MB
env_ptr=20000
gd->env_addr=20004 gd->env_valid=1
env_relocate[211] offset = 0x0
env_relocate[229] malloced ENV at 00000000
In:
Out:
Err:

死机!!!

然后改回arm-elf编译:
U-Boot 1.1.3 (Jul 3 2005 - 07:04:48)

U-Boot code: 0C100000 -> 0C119B98 BSS: -> 0C11DCD8
RAM Configuration:
Bank #0: 0c000000 8 MB
env_init flash_addr=20000
flash_addr=20000 env_ptr=20000 env_ptr->data=bootargs=setenv bootargs root=/dev/ram ip=192.168.1.100:::::eth0:off ether=25,0,0,0,eth0 ethaddr=00:50:c2:1e:af:fb
envptr->crc=1470de2 1470de2
buffer->crc=1470de2
[flash_get_size, 224] Entering ...
[flash_get_size, 232] value=bf
[flash_get_size, 255] value=234b
Flash: 2 MB
env_ptr=20000
gd->env_addr=20004 gd->env_valid=1
env_relocate[211] offset = 0x0
env_relocate[229] malloced ENV at 0c0dfc08
In: serial
Out: serial
Err: serial
rtl8019 MAC: 2a:2a:2a:2a:2a:2a
Hit any key to stop autoboot: 0
=>

正常!因此最好是用arm-elf编译. 我在看网上查资料时记得有人说过"用arm-linux编译时,malloc返回0,而改成arm-elf编译时就好了".有个印象,具体帖子不记得在哪里了.所以后来我就一直使用arm-elf编译,没有再去试arm-linux编译.

(12) 网卡调试
剩下来的事情就是调网络了.根据上面配置rtl8019as后,网络仍然不同,然后参考uclinux驱动中的寄存器定义修改,网络就可以了.具体修改是:
drivers/rtl8019.h
36 #define ETH_ADDR_SFT (8)
37 #define EI_SHIFT(x) ((x)
38
39 #define RTL8019_REG_00 (RTL8019_BASE + EI_SHIFT(0x00))
40 #define RTL8019_REG_01 (RTL8019_BASE + EI_SHIFT(0x01))
......

(13) 开始load uclinux
设置好本机ip地址,服务器ip地址, 下载文件名这些参数后,就可以load uclinux了.

=> tftpboot
eth_init...00:50:c2:1e:af:fb
TFTP from server 192.168.1.25; our IP address is 192.168.1.100
Filename image.bin.
Load address: 0xc008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###############################
死机!

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

网站地图

Top