完善以及裁剪U-boot
U-boot移植到这步就马上接近尾声了,这一节我们对U-boot做一些最后的完善。首先看一下开机时候打印出的信息。
解决打印出的WARING和ERROR信息
几个错误和警告信息都是用同样的套路,先看第一个 “WARNING: Caches not enabled” ,找一下在哪里打印的
- initr_caches(\common\board_r.c)
- enable_caches();(\arch\arm\lib\cache.c)
- puts(“WARNING: Caches not enabled\n”);
- enable_caches();(\arch\arm\lib\cache.c)
但是我们看一下
\arch\arm\cpu\arm920t\start.S,第143行
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
orr r0, r0, #0x00000002 @ set bit 1 (A) Align
orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
mcr p15, 0, r0, c1, c0, 0
在这里面已经是启用了I/Dcache,上面的注释是错的,所以就没有必要再修改,我们直接把打印信息注释掉就好了。
\arch\arm\lib\cache.c,第35行
__weak void enable_caches(void)
{
//puts("WARNING: Caches not enabled\n");
}
接是using default environment,出现这个是因为上电以后U-boot会去我们指定的地方读取环境变量,但是我们现在没有设置,所以会出现这个警告,现在我们看一下代码中在哪打印的,然后就可以找到存放环境变量的数组default_environment。从上一个个往下看,宏CONFIG_BOOTARGS表示U-boot传递给Linux内核的参数,在 \include\configs\smdk2440.h里找个地方定义
#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3"
表示信息都从串口传递,系统从第三个块运行。
#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel 0x200000;bootm 30000000"
表示u-boot上电一段时间后自动执行的命令,CONFIG_BOOTDELAY代表的就是这段时间的长度。CONFIG_BAUDRATE代表串口波特率。
这版少了网卡的MAC地址,直接在数组里面添加一项
#ifdef CONFIG_ETHADDR
"ethaddr=" __stringify(CONFIG_ETHADDR) "\0"
#endif
然后在头文件里修改一下网络相关的配置
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.9.172
#define CONFIG_SERVERIP 192.168.9.16
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
设置完这些以后只要我们把网卡的MAC地址也保存在环境变量里,就顺带的把dm9000 address not set问题也一起解决了。
但是看到这里我们没有找到相关的save指令,现在我们重启一下开发板,输入?save
看一下save是怎么用的。
接着我们在源码里搜索一下saveenv
发现有好多