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那裏定義spa

grep "DM9000_DATA" *nR

  參考別人配置文件
在這裏插入圖片描述
在這裏插入圖片描述debug

  在smdk2440.h中修改成以下內容3d

/*
 * 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的數據。code

修改內存控制器時序

  因爲以前在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
設爲:server

.long 0x00000740;    //BANKCON4

  參考手冊以下
  BWSCON位寬設置
在這裏插入圖片描述
  時序設置
在這裏插入圖片描述
  編譯燒寫
在這裏插入圖片描述blog

網卡的初始化的流程

搜索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和修改默認的環境變量。

如遇到排版錯亂的問題,能夠經過如下連接訪問個人CSDN。

**CSDN:[CSDN搜索「嵌入式與Linux那些事」]

相關文章
相關標籤/搜索