at91sam9260的u-boot移植

来源:互联网 发布:睡眠水 知乎 编辑:程序博客网 时间:2024/05/22 14:49

一、准备条件

u-boot源码:

VMware虚拟机和Ubuntu系统提供交叉编译的环境,Ubuntu版本10.04

交叉编译工具链:arm-linux-gcc4.0.0

二、移植步骤

把源码拷贝进Ubuntu系统的文件夹中,用tar命令解压

观察u-boot的目录结构:常用的board(板级目录)include(头文件 也是配置文件)drivers(驱动文件)等等

(1)上来第一步当然是读README

读README来得到u-boot的编译方式和配置方法。

If you are not using a native environment, it is assumed that you
have GNU cross compiling tools available in your path. In this case,
you must set the environment variable CROSS_COMPILE in your shell.
Note that no changes to the Makefile or any other source files are necessary.
说明了不需要修改Makefile文件和其他的源文件 只需要将交叉编译工具添加到shell里面、
export CROSS_COMPILE=arm-linux-
指定编译工具
(2)配置at91sam9260的配置文件
然后看查看顶层的Makefile文件对at91sam9260的说明
(3)然后直接进行编译
make all
然后经历一段时间的编译链接过程后,在当前文件夹中会生成二进制文件
至此我们的第一版u-boot文件就生成了。

三、u-boot烧写
我u-boot烧写是用的atmel的官方烧写软件SAM-BAv2.11
烧写完成后重新启动、发现了几个问题
(1)网络不通
首先我的板子用的网卡是和电口同一个。没有网卡芯片。所以u-boot在网络自协商后总是失败,link down。
现在需要骗过网络的自协商过程,让u-boot认为他是link up
找到u-boot源码中的自协商部分:
自协商是一个循环读MDIO引脚过程,然后做了一个循环。协商失败后,判断状态是否link。关于phy芯片的相关知识我在以前博客中有详细说明;http://blog.csdn.net/qq_37474534/article/details/78194608
然后我想骗过他,让他一直以为是link up,只需要这个函数的返回值是1就可以了。
if (!(status & BMSR_LSTATUS)) {
printf("%s: link down (status: 0x%04x)\n",
      netdev->name, status);
return 0;
} else {
改为:
if(0){
}else{
(2)网卡的RMII模式
在上一步完成后,我又欣喜的编译完成u-boot,结果还是没办法ping通网关。
发现电路图电路连接的不通 网卡模式也不同,而u-boot中默认的使用的是RMII模式,导致网络不通
源码中是如何选择RMII和MII模式呢?
只要define这个CONFIG_RMII就会选用RMII模式
在头文件中有这个define,这就是罪魁祸首。然后把这行代码注释掉就可以了。
/* Ethernet */
#define CONFIG_MACB 1
//#define CONFIG_RMII1
#define CONFIG_NET_MULTI 1
#define CONFIG_NET_RETRY_COUNT 20
#define CONFIG_RESET_PHY_R 1
然后选择了MII模式的。重新编译u-boot这次总归可以通网络了
(3)env无法保存到NAND_flash
发现新问题:
DRAM:  64 MB Flash:  1 MB NAND:  64 MiB *** Warning - bad CRC, using default environment
好像u-boot用的并不是我板子上的nand_flash。而且我saveenv保存设置好的addip serverip ethaddr重启后都没了。
然后继续去源码里面找问题
发现配置问题还是不对的,然后去看AT91sam9260ek.h文件。
启动nand_flash的代码竟然是注释掉的,看来是u-boot默认选择去挂载的data_flash,导致的。
找到问题根本所在就好解决了。
直接把data_flash的选项注释掉,#define CFG_USE_NANDFLASH
保存 重新编译:
烧录u-boot 终于完成了。现在我的u-boot也可以保存bootcmd bootarges环境变量了。
四、结束
把内核烧录进去,Linux在AT91上就启动了。
可以成功打出ls命令了。

原创粉丝点击