問題:如何支持linux2.6.36中網卡的問題
由於飛凌提供的u_boot.bin不支技DM9000AE,故按照http://bbs.witech.com.cn/thread-4704-1-1.html的方法重新編譯U_BOOT,版本爲飛凌配套的linux2.6.28,的確可以。但是內核版本過低,故用同樣的方法編譯飛凌配套的linux2.6.36版本的U_BOOT,但是沒有編譯通過。因此,利用自己之前編譯好支持DM9000AE的linux2.6.28版本的u_boot.bin,內核爲linux2.6.36的zImage,通過SD一鍵燒寫,啓動時出現一大片:
s3c-nand: ECC uncorrectable error detecteds3c-nand: ECC uncorrectable error detected
s3c-nand: ECC uncorrectable error detected
s3c-nand: ECC uncorrectable error detected
·······
重新再進行燒寫,按照OK6410-A開發板LINUX2.6.36用戶手冊,使用飛凌配套的mmc.bin,zImage,cramf,不過u_boot.bin還是之前支持DM9000的。啓動內核:
結果停留在 starting kernel····中,即無法啓動內核。通過查資料,原因是mmc.bin,zImage,cramf,u_boot.bin不匹配。那麼,有什麼辦法嗎???使之u_boot.bin支持DM9000,同時使用linux2.6.36的內核??????
此外:可以通過tftp下在linux2.6.36的內核,方法:tftp 0x50008000 zImage ; bootm 0x5008000。此時可以正常啓動,能夠滿足我的要求,但是掉電或者復位就丟失了,有什麼辦法嗎????使之不丟失?????
解決方法:
1、在使用了linux2.6.28編譯的u_boot.bin中,使之支持DM9000AE,通過ftfp下載linux2.6.36的zImage,但是是下載到內存中了,掉電丟失。解決辦法:
下載到內存中了,沒有寫入nand中,
nand erase 100000 500000這樣就寫到nand中了
nand write.e 50008000 100000 500000
2、通過下面的方法,編譯linux2.6.36的UBOOT,生成u_boot.bin。推薦使用這個辦法:
燒入後發無法ping通,tftp不可用,輸出:
- CS8900 Ethernet chip not found?!
1.在uboot1.16中,修改include/configs/smdk6410.h
- #ifdef CONFIG_DRIVER_SMC911X
- #undef CONFIG_DRIVER_CS8900
- #define CONFIG_DRIVER_SMC911X_BASE 0x18800300
- #else
- //註釋掉下面3行
- //#define CONFIG_DRIVER_CS8900 0 /* we have a CS8900 on-board */
- //#define CS8900_BASE 0x18800300
- //#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
- //增加下面4行
- #define CONFIG_DRIVER_DM9000 1
- #define CONFIG_DM9000_BASE 0x18000000
- #define DM9000_IO CONFIG_DM9000_BASE
- #define DM9000_DATA (CONFIG_DM9000_BASE+4)
- #define CONFIG_DM9000_USE_16BIT
- //#define CONFIG_DM9000_DEBUG
- #endif
在uboot1.16中,drivers/dm9000x.c中,修改
2.303行
從環境變量中讀取MAC地址
把((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);替換爲:
- char *s, *e;
- s = getenv ("ethaddr");
- for (i = 0; i < 6; ++i)
- {
- bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;
- if (s)
- s = (*e) ? e + 1 : e;
- }
修改MAR寄存器(Multicast Address Register)的值,修正第一次收不到數據的錯誤
- for (i = 0, oft = 0x16; i < 8; i++, oft++)
- DM9000_iow(oft,0x00);
- //DM9000_iow(oft, 0xff);
註釋掉下面2行
修正一直無法收到數據的錯誤,不要每次調用halt的時候都對PHY進行復位操作,否則會引起無法接受到數據的情況
- void
- eth_halt(void)
- {
- DM9000_DBG("eth_halt\n");
- /* RESET devie */
- //phy_write(0, 0x8000); /* PHY RESET */
- //DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
- DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */
- DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */
- }
爲了能夠掛載NFS和根文件系統。在uboot狀態下修改參數如下:
setenv ipaddr 192.168.0.50
setenv serverip 192.168.0.47
setenv gatewayip 192.168.0.1
setenv bootdelay 3
setenv bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.47:/sheng/filesystem,proto=tcp,nfsvers=3,nolock ip=192.168.0.50
saveenv