x210ii DM9000驅動調試成功-基於x210ii/s5pv210開發板

//----------------------------------------------------------------------------------------------------------------------------


// 作者:armeasy


// 版權:www.9tripod.com


// 平臺:九鼎創展x210ii/s5pv210開發板


// 發佈日期:2012-04-20


// 最後修改:2012-04-20


// 論壇:http://bbs.9tripod.com


//-----------------------------------------------------------------------------------------------------------------------------


一、硬件接口[s5pv210+dm9000cep]


1、採用16bit模式;


2、INT接到S5PV210的IRQ_LAV/EINT10,INT腳爲低時爲有效中斷信號,中斷線爲EINT10;


3、CS接到S5PV210的CSn1,CMD連接到V210的地址總線ADDR[2],故INDEX和DATA[15:0]的端口地址分別爲0x88000000和0x88000004。


二、軟件修改:
1、android_gingerbread_v10/android/kernel/arch/arm/mach-s5pv210/include/mach/map.h文件
//#define S5PV210_PA_DM9000       (0xA8000000)
//#define S5P_PA_DM9000           S5PV210_PA_DM9000
//lqm changed.
#define S5PV210_PA_DM9000 (0x88000000)
#define S5P_PA_DM9000 S5PV210_PA_DM9000 + 0x300


2、android_gingerbread_v10/android/kernel/arch/arm/plat-s5p/devs.c文件
/* DM9000 registrations */
#ifdef CONFIG_DM9000
static struct resource s5p_dm9000_resources[] = {
[0] = {
.start = S5P_PA_DM9000,
.end   = S5P_PA_DM9000 + 3, //爲什麼要加3?
.flags = IORESOURCE_MEM,
},
[1] = {
#if defined(CONFIG_DM9000_16BIT)
.start = S5P_PA_DM9000 + 4, //爲什麼要加4?
.end   = S5P_PA_DM9000 + 7, //爲什麼要加7?
.flags = IORESOURCE_MEM,
#else
.start = S5P_PA_DM9000 + 1,
.end   = S5P_PA_DM9000 + 1,
.flags = IORESOURCE_MEM,
#endif
},
[2] = {
.start = IRQ_EINT10,
.end   = IRQ_EINT10,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,//注意,這時爲高電平產生中斷,具體因硬件接法而定
}
};


static struct dm9000_plat_data s5p_dm9000_platdata = {
#if defined(CONFIG_DM9000_16BIT)
.flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
#else
.flags = DM9000_PLATF_8BITONLY | DM9000_PLATF_NO_EEPROM,
#endif
.dev_addr = {0x00,0x09,0xc0,0xff,0xec,0x48},
};


struct platform_device s5p_device_dm9000 = {
.name = "dm9000",
.id =  0,
.num_resources = ARRAY_SIZE(s5p_dm9000_resources),
.resource = s5p_dm9000_resources,
.dev = {
.platform_data = &s5p_dm9000_platdata,
}
};




3、android_gingerbread_v10/android/kernel/arch/arm/mach-s5pv210/mach-x210.c
#ifdef CONFIG_DM9000
static void __init smdkc110_dm9000_set(void)
{
unsigned int tmp;


/* initial dm9000 interrupt */
// lqm added.
int ret;
/* Input mode */
s3c_gpio_cfgpin(S5PV210_GPH1(2), S3C_GPIO_INPUT);
s3c_gpio_setpull(S5PV210_GPH1(2), S3C_GPIO_PULL_NONE);


ret = gpio_request(S5PV210_GPH1(2), "GPH1");
if(ret)
printk("mach-x210: request gpio GPH1(2) fail");
else
{
s3c_gpio_cfgpin(S5PV210_GPH1(2), 0xf);
s3c_gpio_setpull(S5PV210_GPH1(2), S3C_GPIO_PULL_NONE);
}


tmp = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));
//CS1
__raw_writel(tmp, S5P_SROM_BC1);


tmp = __raw_readl(S5P_SROM_BW);
//CS1
tmp &= ~(0xf << 4);
tmp |= (1<<7) | (1<<6) | (1<<5) | (1<<4); // dm9000 16bit
__raw_writel(tmp, S5P_SROM_BW);


tmp = __raw_readl(S5PV210_MP01CON);
tmp &= ~(0xf << 4);
tmp |= (2 << 4);


__raw_writel(tmp, S5PV210_MP01CON);
}
#endif


4、make menuconfig選上DM9000和16bit的模式:
-*-   Generic Media Independent Interface device support                                                              │ │  
  │ │                                                < >   ASIX AX88796 NE2000 clone support                                                                               │ │  
  │ │                                                < >   SMC 91C9x/91C1xxx support                                                                                       │ │  
  │ │                                                <*>   DM9000 support                                                                                                  │ │  
  │ │                                                [*]     DM9000 16-bit                                                                                                 │ │  
  │ │                                                (4)     DM9000 maximum debug level                                                                                    │ │  
  │ │                                                [ ]     Force simple NSR based PHY polling 


5、確保dm9000.c驅動能正常工作:
android_gingerbread_v10/android/kernel/drivers/net/dm9000.c
如不能確認,請進我們論壇下載最新驅動,支持DM9000CEP。
下載地址:
http://xboot.org/forum.php?mod=viewthread&tid=3588&extra=


再./mk -k生成映像文件zImage-android


6、更新內核後,插好網線,輸入如下指令:
ifconfig eth0 192.168.1.5 up
注意,IP地址一定要設置在自己的局域網內。
這時應該就能PING通路由了。
/ # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.494 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.236 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.242 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.217 ms
^C
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.217/0.297/0.494/0.114 ms
/ # 
但是這時還無法PING外網,輸入如下指令:
busybox ip route add default via 192.168.1.1
setprop net.dns1 192.168.1.1
PING新浪網址:
/ # ping www.sina.com
PING gacrux.sina.com.cn (58.63.236.236) 56(84) bytes of data.
64 bytes from 58.63.236.236: icmp_seq=1 ttl=56 time=22.1 ms
64 bytes from 58.63.236.236: icmp_seq=2 ttl=56 time=21.2 ms
64 bytes from 58.63.236.236: icmp_seq=3 ttl=56 time=21.7 ms
^C
--- gacrux.sina.com.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 21.213/21.698/22.173/0.410 ms
/ # 
可見,已經能夠正常PING通。點擊瀏覽器,會彈出沒有連接網絡的提示,不用管它,應該能瀏覽網頁了。


7、以上雖然能正常上網,但是每次都需手動設置IP和網關,比較麻煩,修改
android_gingerbread_v10/android/device/samsung/smdkv210目錄下的init.smdkv210.rc
文件,修改dns爲自己通用的DNS,我這裏爲192.168.1.1
on boot
    mount debugfs /sys/kernel/debug /sys/kernel/debug


    setprop ro.build.product smdkv210
    setprop ro.product.device smdkv210
    setprop ro.radio.noril no


    setprop net.dns1 192.168.1.1
    setprop net.dns2 192.168.1.1
修改android_gingerbread_v10/android/device/samsung/init.rc文件,在最末添加如下內容:
service eth_ifconfig /system/bin/ifconfig eth0 192.168.1.5 netmask 255.255.255.0 up
    oneshot


service eth_route /system/bin/route add default gw 192.168.1.1 dev eth0 
    oneshot
再./mk -s,生成新的x210-uramdisk.img文件,使用fastboot更新,重啓開發板,就能上網了。


注:init.rc和init.smdkv210.rc文件都保存在x210-uramdisk.img中,更新內核,文件系統都沒有效果。
平時調試時,如果需要修改這些文件,沒必要重新編譯整個文件系統,可以直接把x210-uramdisk.img文件解壓後
再修改,完了之後再打包即可。具體解壓和打包的方法見x210ii源碼包的腳本文件ramdisk.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章