version2.0是根据我上一个版本的uboot修改而来的,可以下载源码u-boot for tiny210 version1 后参照下面的内容进行修改 。

也可以参照 version1 从头构建tiny210的uboot 。
源码下载: u-boot for tiny210 version2.0
下面链接提供了较新版本和较老版本的下载链接:

ver2.1源码下载:u-boot for tiny210 ver2.1

ver1.0源码下载:u-boot for tiny210 ver1.0

version2实现的基本功能:
1. SD boot,基于linaro u-boot的SPL功能实现
2. 从SD卡的FAT分区上加载文件到SDRAM
3. 将环境变量保存至SD卡(有Writing to MMC(0)... mmc_send_cmd: error during transfer: 0x00208001 mmc write failed), 但数据保存是成功的,后续会修改。
+4. 添加DM9000网卡驱动,开启网络功能(例如:tftp,nfs等)
+5. 添加TAB键命令自动补全功能

网络部分修改过程:

1. 在include/configs/tiny210.h 添加下述宏

#define DM9000_16BIT_DATA
#define CONFIG_CMD_NET
#define CONFIG_DRIVER_DM9000       1
#define CONFIG_NET_MULTI               1
#define CONFIG_NET_RETRY_COUNT 1
#define CONFIG_DM9000_NO_SROM 1
#ifdef CONFIG_DRIVER_DM9000  
#define CONFIG_DM9000_BASE              (0x88001000)
#define DM9000_IO                       (CONFIG_DM9000_BASE)
#if defined(DM9000_16BIT_DATA)
#define DM9000_DATA                     (CONFIG_DM9000_BASE+0x300C)
#else
#define DM9000_DATA                     (CONFIG_DM9000_BASE+1)
#endif
#endif
#define CFG_PHY_UBOOT_BASE      MEMORY_BASE_ADDRESS + 0x3e00000
#define CFG_PHY_KERNEL_BASE     MEMORY_BASE_ADDRESS + 0x8000
#define CONFIG_ETHADDR          00:40:5c:26:0a:5b
#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR           192.168.186.13
#define CONFIG_SERVERIP         192.168.186.13
#define CONFIG_GATEWAYIP        192.168.0.1
#define CONFIG_CMD_DATE
#define CONFIG_ENV_OVERWRITE
#define CONFIG_OVERWRITE_ETHADDR_ONCE
 
 
123行:
#if 0
#undef CONFIG_CMD_NET
#undef CONFIG_CMD_NFS
#endif

红字部分与dm9000 相关的关键内容. 下面对关键部分作简要分析:

dm9000挂载的位置通过下图可以得到,并确定dm9000工作在16bit 模式,需定义 #define DM9000_16BIT_DATA
 
 
nCS1是SROMC_BANK1的片选线,可见dm9000是挂在SROMC_BANK1区域的,再根据datasheet可以推算出,dm9000挂载的位置,参见下图:

另外根据友善提供的linux-2.6.35 内核,参考其中dm9000的初始化配置,

#define S5PV210_PA_DM9000_A     (0x88001000)
#define S5PV210_PA_DM9000_F     (S5PV210_PA_DM9000_A + 0x300C)

static struct resource dm9000_resources[] = {
 [0] = {
  .start = S5PV210_PA_DM9000_A,
  .end = S5PV210_PA_DM9000_A + SZ_1K*4 - 1,
  .flags = IORESOURCE_MEM,
 },
 [1] = {
  .start = S5PV210_PA_DM9000_F,
  .end = S5PV210_PA_DM9000_F + SZ_1K*4 - 1,
  .flags = IORESOURCE_MEM,
 },
 [2] = {
  .start = IRQ_EINT(7),
  .end = IRQ_EINT(7),
  .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
 },
};

可以分别得到

#define CONFIG_DM9000_BASE              (0x88001000)
#define DM9000_IO                       (CONFIG_DM9000_BASE)
#define DM9000_DATA                     (CONFIG_DM9000_BASE+0x300C)

2.修改common/cmd_date.c

+32 :#if !defined(CONFIG_S5PC100) && !defined(CONFIG_S5PC110) && !defined(CONFIG_S5P6442)
+229 :#endif
3.修改 board/samsung/tiny210/tiny210.c

(1) 添加#include <netdev.h>//有int board_eth_init(bd_t *bis)的函数声明
(2)屏蔽掉下面smc9115_pre_init(); 函数的调用
158:
int board_init(void)
{
/* Set Initial global variables */
s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE;
// smc9115_pre_init();
pwm_pre_init();
#ifdef CONFIG_DRIVER_DM9000
dm9000_pre_init();
#endif
gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);
return 0;
}

(3)243:添加int board_eth_init(bd_t *bis)函数
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
return rc;
}
(4)修改 115: static void dm9000_pre_init(void) 函数,参考linux内核及datasheet,
可作如下修改.
static void dm9000_pre_init(void)
{
unsigned int tmp;
#if defined(DM9000_16BIT_DATA)
//SROM_BW_REG &= ~(0xf << 20);
//SROM_BW_REG |= (0<<23) | (0<<22) | (0<<21) | (1<<20);
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (0x1 << 4);
#else
SROM_BW_REG &= ~(0xf << 20);
SROM_BW_REG |= (0<<19) | (0<<18) | (0<<16);
#endif
SROM_BC1_REG = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));
tmp = MP01CON_REG;
tmp &=~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}

3.修改driver/net/dm9000x.c

551:
static void dm9000_get_enetaddr(struct eth_device *dev)
{
#if !defined(CONFIG_DM9000_NO_SROM)
int i;
for (i = 0; i < 3; i++)
dm9000_read_srom_word(i, dev->enetaddr + (2 * i));
#else 
if (!eth_getenv_enetaddr("ethaddr", mac_addr)) {
printf("Please set ethaddr!\n");
}
//memcpy(dev->enetaddr, "\x08\x90\x90\x90\x90\x90", 6);
#endif
}
4.修改/net/eth.h

308:
if ( !eth_write_hwaddr(dev, "eth", eth_number))
puts("Warning: failed to set MAC address\n");
TAB键命令补全修改过程:
在include/configs/tiny210.h 添加下述宏
/*auto complete command*/
#define CONFIG_CMDLINE_EDITING
#define CONFIG_AUTO_COMPLETE    实现

#define CONFIG_SYS_HUSH_PARSER
可以参考我的另一篇blog uboot命令自动补全.
至此version2 修改完成.
编译u-boot
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl
由于我的系统下装有两套交叉工具链,所以没有把 /opt/FriendlyARM/toolschain/4.5.1/bin/ 添加到环境变量,在使用工具链时要指明路径。
将u-boot镜像写入SD卡
将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.

执行下面的命令
$sudo dd iflag=dsync oflag=dsync if=spl/tiny210-spl.bin of=/dev/sdb seek=1
$sudo dd iflag=dsync oflag=dsync if=u-boot.bin of=/dev/sdb  seek=49

 
 
将SD卡插入开发板启动:
启动:
测试ping:
测试tftp:
 
 


 

u-boot for tiny210 version2.0(by liukun321咕唧咕唧)相关推荐

  1. u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)

    新版本下载: 下面的链接提供了较新版本的源码 ver4.0源码下载:u-boot for tiny210 ver4.0 ver3.1源码下载: u-boot for tiny210 ver3.1 ve ...

  2. u-boot for tiny210 ver2.2.1(by liukun321咕唧咕唧)

    这次更新没有增加具体功能,只修复了小bug.另外用一定篇幅说明如何解决u-boot for tiny210 在启动友善提供的mini210 linux内核/android出现卡死在Uncompress ...

  3. u-boot for tiny210 ver2.2(by liukun321咕唧咕唧)

    前三个版本都不支持nandflash的读写,这次更新(ver2.2)添加了nandflash驱动及yaffs文件系统的烧写功能.在kasim的建议下我从ver2.2开始用git源代码仓库管理我的源码. ...

  4. u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)

    这次更新,实现了自动识别Nand或MMC/SD启动(环境变量统一存放于Nandflash中),统一SD及Nand启动模式的nandflash驱动均为8bit HW ECC校验,并调整部分源码文件的结构 ...

  5. S5PV210之UBOOT-2011.06启动过程解析-基于u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)

    //主题:S5PV210之UBOOT-2011.06启动过程解析 //作者:kevinjz2010@gmail.com //版权:kevinjz原创 //平台:S5PV210 ARMV7 TINY21 ...

  6. Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.0:repackage (repackage)

    异常信息: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.0:repackage (repa ...

  7. 《Spring Boot开发:从0到1》大纲结构

    <Spring Boot开发:从0到1> 大纲结构v2.0 第一部分Spring Boot基础 第1章 Spring Boot史前简述 1.1 J2EE(Java 2 Platform E ...

  8. ava - 找不到项目 ‘org.springframework.boot:spring-boot-starter-parent:2.4.0‘

    选择"file"->"使缓存无效/重新启动-",然后选择"使无效并重新启动"选项解决了该问题.我想那只是一个过时的缓存. 关于java ...

  9. ESP32运行microPython报错:rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee

    使用Esp32调试microPython的时候 上传代码后一直报错(附:报错原因,以及解决方法) Arduino以及idf 均会出现 如下内容 无限循环打印 rst:0xc (SW_CPU_RESET ...

最新文章

  1. IBM Tivoli Netview在企业网络管理中的实践(附视频)
  2. Day 14 保护环境的建议
  3. apache解析php的方法
  4. 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习代理
  5. 用状态机STATE MACHINE实现有选择的文件转换
  6. 模型计算量(FLOPs)和参数量(Params)的理解
  7. 公众号文章折叠点击后展开案例_(案例)蜂窝纸板在包装中的应用重型箱
  8. 惠普cq40无线网卡驱动_网友问题解答:雷哥我惠普的电脑搜索不到自己的手机热点啊?...
  9. asp.net 获取全部在线用户_提取在线数据的9个最佳网页抓取工具
  10. 在Linux上配置xampp后远程访问域名报错
  11. 使用MacClean在Mac上释放磁盘空间的教程
  12. label之间展示间距_工法样板如何做?碧桂园质量工法样板展示区做法标准
  13. 悬置线高通滤波器设计
  14. 二维平面中二维向量的叉乘 得到的向量,x、y方向上的分量必定为0
  15. SpringMVC、Struts1和Struts2区别
  16. 工业物联网实施的6个常见误解
  17. 近中期3D编程研究目标
  18. 04 - SSH攻击Linux服务器(简单)
  19. 获取高德地图省市区县列表
  20. mc服务器 无限夜视,我的世界夜视指令是什么?这里告诉你无限夜视的方法

热门文章

  1. CVPR 2017论文集锦(论文分类)—— 附录部分翻译
  2. mysql存图片二进制文件_将图片(二进制文件)存储于数据库,论文件字节流与二进制字符串相互转换...
  3. 考研英语 - word-list-45
  4. 平价款的血糖血压监测工具,用它养成健康生活习惯,dido F50S Pro上手
  5. ThinkCMF引用第三方类库
  6. 到底什么是大数据?新手学习大数据的路径是什么?
  7. 私有镜像制作及上传harbor私有仓库
  8. python集成开发环境中可使用什么快捷键运行程序_1.4 Python集成开发环境(2)
  9. Command python setup.py egg_info failed with error code 1 in /tmp/pip-install-720GCk/MySQL-python/
  10. Java 将图片组合成PDF文件