文檔時間:2018-08-13linux
交叉編譯器:arm-linux-gcc-4.3.2服務器
Ubuntu版本:16.04函數
uboot版本:2013.10測試
1,修改代碼,把 DM9000 編譯進 ubootspa
uboot-2013.10自己就帶有 dm9000網卡驅動的支持,相關代碼位於 drivers/net 下的 dm9000x.c 和 dm9000x.h 文件code
前面章節修改的 uboot 打印信息以下:server
uboot 默認支持的網卡是 CS8900,打開 drivers/net 目錄下的 Makefile,找到與 cs8900 和 dm9000 有關的語句:blog
能夠看出要想將 dm9000x.c 文件編譯進去,必須包含 CONFIG_DRIVER_DM9000 這個宏,搜索 CONFIG_CS8900 位於 include/configs/jz2440.h 文件中,仿照其它單板對 dm9000 網卡的支持,ip
修改 include/configs/jz2440.h,修改代碼以下(紅色部分爲修改部分):內存
/* * Hardware drivers */ //#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 */ #define CONFIG_DRIVER_DM9000 1 #define CONFIG_DM9000_BASE 0x20000000 /* CS4 */ #define DM9000_IO (CONFIG_DM9000_BASE) #define DM9000_DATA (CONFIG_DM9000_BASE + 4)
CONFIG_DM9000_BASE 和 DM9000_DATA 值得肯定是參照 JZ2440原理圖設定,以下圖所示:
CS 信號接的是 nGS4 引腳,所以值爲 0x20000000,LADDR2 接 CMD 引腳,所以偏移量爲 4
2,分析網卡驅動的啓動流程,加載 DM9000 的初始化
uboot 第二階段的入口函數爲 board_init_r (位於 arch/arm/lib/board.c 文件中),打開 board_init_r 函數:
此句爲以太網初始化函數,打開 board_init_r->eth_initialize 函數(位於 net/eth.c 文件中):
而後打開 board_init_r->eth_initialize->board_eth_init 函數(位於 board/samsung/jz2440.c 文件中):
能夠看出只有對 CS8900 網卡的支持,沒有 DM9000的初始化,仿照其它單板對 DM9000 的初始化,修改代碼(紅色爲修改部分):
#ifdef CONFIG_CMD_NET int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_CS8900 rc = cs8900_initialize(0, CONFIG_CS8900_BASE); #endif #ifdef CONFIG_DRIVER_DM9000 rc = dm9000_initialize(bis); #endif return rc; } #endif
而後編譯,燒寫,測試,打印以下圖所示:
已經識別出 DM9000 ,接下來實驗能不能 ping 通 PC機,輸入命令:
set ipaddr 192.168.2.90 ping 192.168.2.101
出現以下錯誤:
說明未設置 MAC 地址,參考別人設置的 MAC 地址,設置以下:
set ethaddr 00:0c:29:3b:22:2a //設置MAC地址 ping 192.168.2.101 //從新ping
能夠 ping 成功:
(PS:若是仍是不能ping成功,檢查一下lowlevel_init.S 中內存控制器的位寬有沒有設置正確)
使用 tftp 燒寫u-boot.bin(燒寫以前須要打開tftp PC端的服務):
set ipaddr 192.168.2.90 //設置本機ip地址
set serverip 192.168.2.101 //設置服務器ip地址
set ethaddr 00:0c:29:3b:22:2a //設置MAC地址
tftp 30000000 u-boot.bin nand erase 0 80000 nand write 30000000 0 80000
成功燒寫。。。說明DM9000網卡驅動移植成功