S3C2440移植uboot之支持DM9000

  上一节S3C2440移植uboot之支持NANDFLASH操作移植了uboot 支持了NANDFLASH的操作,这一节修改uboot支持DM9000。
@[TOC]

通过Makefile把dm9000x编译进uboot

cd drivers/net
vi Makefile

  需要在文件中添加以下宏


在这里插入图片描述

  在smdk2440.h中修改文件支持DM9000

#if 0
#define CONFIG_CS8900       /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE  0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000                    /*DM9000*/
#endif

  编译报错


在这里插入图片描述

编译报错 DM9000_DATA

  搜索DM9000_DATA那里定义

grep "DM9000_DATA" *nR

  参考别人配置文件


在这里插入图片描述

在这里插入图片描述

  在smdk2440.h中修改为如下内容

/*
 * Hardware drivers
 */
#if 0
#define CONFIG_CS8900       /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE  0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#else
#define CONFIG_DRIVER_DM9000                    /*DM9000*/
#define CONFIG_DM9000_BASE                   0x20000000  /*参考芯片手册 nGCS4*/
#define DM9000_IO                            CONFIG_DM9000_BASE          
#define DM9000_DATA                         (CONFIG_DM9000_BASE + 4)  /*bit 2 1  0*/
#endif

  我们的DM9000是放在2440的bank4(0X20000000)的片选上面,而DM9000的CMD引脚接在bank4的LADDR2上面。也就是说当0X20000000地址上读写数据时, 此时CMD为低,则读写的便是DM9000C的地址。向0X20000000+4地址上读写数据时,此时CMD为高,则读写的便是DM9000C的数据。

修改内存控制器时序

  由于之前在start.S里,就调用了board/samsung/smdk2440/lowlevl_init.S来初始化各个bank的配置、时序。所以我们只需要在那里修改bank4的内容即可。(也可以直接在dm9000x.c里的dm9000_initialize()函数设置)参考之前写的移植DM9000C驱动里的时序
  由于兼容DM9000E,所以修改的值尽量大一点, 修改\u-boot-2012.04.01\board\samsung\smdk2440\lowlevel_init.S
设为:

.long 0x00000740;    //BANKCON4

  参考手册如下
  BWSCON位宽设置


在这里插入图片描述

  时序设置


在这里插入图片描述

  编译烧写
在这里插入图片描述

网卡的初始化的流程

搜索No ethernet found

  1)uboot重定位后进入第二阶段board_init_r():

void board_init_r(gd_t *id, ulong dest_addr)        //gd    uboot重定位地址
{
  ... ...
  #if defined(CONFIG_CMD_NET)
       puts("Net:   ");
       eth_initialize(gd->bd);                 // 以太网初始化

#if defined(CONFIG_RESET_PHY_R)
       debug("Reset Ethernet PHY\n");
       reset_phy();

#endif
#endif    
... ...
}

  2)然后进入board_init_r()->eth_initialize():

int eth_initialize(bd_t *bis)
{
 ... ...
if (board_eth_init(bis) < 0)                         //初始化 单板上的以太网
printf("Board Net Initialization Failed\n");
... ...

if (!eth_devices) {                                   //初始化失败,打印"No ethernet found.\n"
              puts ("No ethernet found.\n");
              bootstage_error(BOOTSTAGE_ID_NET_ETH_START);
       }
 ... ...
}

  3)进入board_eth_init(), 位于board/samsung/smdk2440/smdk2440.c

int board_eth_init(bd_t *bis)
{
       int rc = 0;
#ifdef CONFIG_CS8900                                                  
       rc = cs8900_initialize(0, CONFIG_CS8900_BASE);        //初始化cs8900
#endif
       return rc;
}

  从上面代码看到,单板初始化board_eth_init()函数里,只支持初始化CS8900,没有DM9000C

支持DM9000C的初始化

  搜索dm9000_initialize,看下其它单板的board_eth_init()是如何初始化DM9000C的,如下图所示:


在这里插入图片描述

  所以,我们修改2440单板的board_eth_init(),使它支持DM9000C
  修改代码如下(位于board/samsung/smdk2440/smdk2440.c):

int board_eth_init(bd_t *bis)
{
       int rc = 0;

#ifdef CONFIG_CS8900                                                  
       rc = cs8900_initialize(0, CONFIG_CS8900_BASE);        //初始化cs8900
#endif

#ifdef CONFIG_DRIVER_DM9000                                           
       rc = dm9000_initialize(bis);                               //初始化DM9000C
#endif

       return rc;
}

编译测试

在这里插入图片描述

  然后试验,来ping下PC机,输入:

set ipaddr 192.168.159.120
ping 192.168.159.100

   打印如下图所示:


在这里插入图片描述

   上面表示,MAC(硬件地址)没有设置,我们需要设置ethaddr,来更改MAC地址
输入(参考别人的MAC地址):

set ethaddr 08:00:3e:26:0a:5b    //设置MAC地址
ping 192.168.159.100                 //重新ping    

便可以ping通.

TFTP下载测试

  使用tftp工具,通过网卡来下载内核
  tftp工具是通过电脑来设置本机为服务器,然后开发板作为客户端,便可以读取到PC机里的文件了
  1)PC机打开tftp工具,设置文件根目录,以及PC本机的IP地址
  2)进入开发板,输入:

set serverip   192.168.2.101                //设置PC机地址
tftp 30000000    uImage                     //下载PC机设置的tftp根目录下的uImage文件
bootm  30000000                             //使用bootm命令启动内核代码
在这里插入图片描述

  由于uboot没有配置mtdparts命令,所以启动内核没成功.
主要修改文件:include/configs/smdk2440.h lowevel_init.s
  下一节S3C2440移植uboot之裁剪和修改默认参数我们将裁剪uboot和修改默认的环境变量。

有任何疑问,点击我的头像可以在主页的个人介绍中找到我的联系方式,欢迎一起交流学习

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容