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 {
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
#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命令了。
阅读全文
0 0
- at91sam9260的u-boot移植
- at91sam9260 OpenWRT u-boot移植
- AT91SAM9260下的U-Boot移植和添加LCD驱动支持
- AT91SAM9260下的U-Boot移植和添加LCD驱动支持
- 编译u-boot for at91sam9260
- U-Boot的移植
- U-Boot 的移植
- u-boot的移植
- U-BOOT的移植-Linux
- u-boot-2010.03的移植
- u-boot-2010.03的移植
- OK6410的u-boot移植
- S5PV210的u-boot移植
- S3C2440的U-Boot移植
- <三> u-boot 的移植
- S3C2440的U-Boot移植
- U-Boot的移植U-Boot Practically Porting Guide
- u-boot移植随笔:u-boot的内存分布图
- CS231N学习笔记1 Image Classification
- sftp JSCH连接sftp出现如下报错解决办法
- 5.读书笔记收获不止Oracle之 插入表性能示例
- HDU
- MongoDB数据插入insert和save的区别
- at91sam9260的u-boot移植
- SSM uploadify 图片上传
- 6.读书笔记收获不止Oracle之 逻辑体系
- PHP命名空间和自动加载类
- 时间配置
- C的时间函数
- handler线程,判断是否联网,Get获取网页 json解析,输入流转换字符串
- 图解css3核心技术与案例实战(第一章)
- 7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整