久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于linux2.6內(nèi)核的dm9000移植(詳細(xì)簡(jiǎn)潔)

 cana_xzy 2010-06-04
From:http://hi.baidu.com/soft_hard/blog/item/c54f8d23cf977dad4723e826.html

    linux-2.6.22內(nèi)核下dm9000網(wǎng)卡移植具體步驟如下:
    平臺(tái)信息:
    開(kāi)發(fā)板:
             芯片     s3c2410
             系統(tǒng)內(nèi)核 linux-2.6.22.19
    主機(jī):
             操作系統(tǒng):redhat9.0
             交叉編譯器:arm-linux-gcc3.4.1
   
1. 修改arch/arm/plat-s3c24xx/devs.c,加入dm9000的信息,,并使用EXPORT_SYMBOL 宏將platform_device s3c_device_dm9000導(dǎo)出,,在smdk2410.c中會(huì)用到先添加頭文件:
#include <linux/dm9000.h> //
再添加以下代碼:
//===========================================================================
/*注意:以下有兩個(gè)地方需要根據(jù)自己的開(kāi)發(fā)板上的dm9000與s3c2410硬件電路連接情況而定(一般在開(kāi)發(fā)板的手冊(cè)上有說(shuō)明):
    (1)dm9000的基地址 DM9000_BASE,   

    (2)所采用的是哪個(gè)外部中斷*/

#define    DM9000_BASE 0x18000300 //依個(gè)人情況而定
static struct resource s3c_dm9000_resource[] = {
        [0] = {
              .start = DM9000_BASE,
      .end   = DM9000_BASE+ 0x3,
      .flags = IORESOURCE_MEM
       },
       [1]={
              .start = DM9000_BASE + 0x4,
              .end = DM9000_BASE + 0x4 + 0x7c,
             .flags = IORESOURCE_MEM
       },
        [2] = {
      .start = IRQ_EINT0, //依個(gè)人情況而定
      .end   = IRQ_EINT0, //依個(gè)人情況而定

      .flags = IORESOURCE_IRQ
       }
};

static struct dm9000_plat_data s3c_device_dm9000_platdata = {
   .flags= DM9000_PLATF_16BITONLY,
};

struct platform_device s3c_device_dm9000 = {
        .name= "dm9000",
      .id= -1,
       .num_resources= ARRAY_SIZE(s3c_dm9000_resource),
       .resource= s3c_dm9000_resource,
      .dev= {
      .platform_data = &s3c_device_dm9000_platdata,
       }
};

EXPORT_SYMBOL(s3c_device_dm9000);     
//end of DM9000
//===========================================================================

2.在include/asm-arm/plat-s3c24xx/devs.h 文件中 添加一行
extern struct platform_device s3c_device_dm9000;


3.在arch/arm/mach-s3c2410/mach-smdk2410.c中將dm9000加入到要初始化的設(shè)備鏈表里去,,內(nèi)核啟動(dòng)時(shí)將會(huì)檢測(cè)設(shè)

備并加載驅(qū)動(dòng)

   static struct platform_device *smdk2410_devices[] __initdata = {
        &s3c_device_usb,
       &s3c_device_lcd,
       &s3c_device_wdt,
       &s3c_device_i2c,  

        &s3c_device_iis,
       &s3c_device_dm9000,//add for dm9000

        };

4, 以下是要在linux-2.6.24/drivers/net/dm9000.c文件中添加的內(nèi)容:

   4.1 為dm9000添加硬件復(fù)位,在dm9000_reset函數(shù)開(kāi)頭添加以下代碼:
       /*reset hardware --add by Eric Fu */
        s3c2410_gpio_cfgpin(S3C2410_GPG2,S3C2410_GPG2_OUTP);   

       s3c2410_gpio_setpin(S3C2410_GPG2,0);
        udelay(500);
        s3c2410_gpio_setpin(S3C2410_GPG2,1);       

        udelay(500);
        s3c2410_gpio_setpin(S3C2410_GPG2,0);
        udelay(500);
        /*end of add*/

        注意:網(wǎng)上很多移植都沒(méi)有這一步,但在我的板子上如果沒(méi)有這一步,但板子硬件復(fù)位后會(huì)出現(xiàn)系統(tǒng)找不到網(wǎng)卡設(shè)備,并出現(xiàn)以下錯(cuò)誤信息:
        dm9000 Ethernet Driver
        dm9000: read wrong id 0x00000000
        dm9000: read wrong id 0x00000000
        dm9000: wrong id: 0x00000000               

        dm9000: not found (0).
        ........

   4.2 MAC 地址設(shè)置:
       在dm9000_probe函數(shù)中添加兩處語(yǔ)句:
     (1)在函數(shù)體的開(kāi)頭兒添加:
        static char net_mac_addr[]={0x00,0xe0,0x3d,0xf4,0xdd,0xf7}; // 自己設(shè)的MAC地址,隨意設(shè),盡量不要

全0或全1
     (2) 在/* Set Node Address */
        for (i = 0; i < 6; i++)
            ndev->dev_addr[i] = db->srom[i];
        的后面
        if (!is_valid_ether_addr(ndev->dev_addr)) {
        /* try reading from mac */
        for (i = 0; i < 6; i++)
            ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
        }
        的前面,添加:
       /*********** add by Eric Fu ************/
       for(i=0;i<6;i++){
         ndev->dev_addr[i]=net_mac_addr[i];
       }            

       /******************end **************/

      注意:至此編譯內(nèi)核下載系統(tǒng)就能加載dm9000網(wǎng)卡設(shè)備了,啟動(dòng)信息中會(huì)出現(xiàn):
        dm9000 Ethernet Driver
        eth0: dm9000 at c485e300,c4860304 IRQ 16 MAC: 00:e0:3d:f4:dd:f7

    4.3 設(shè)置外部中斷:
        (1)在dm9000.c頂部添加以下頭文件:
          #include <asm-arm/arch/irqs.h>
          #include <asm-arm/arch/hardware.h>
          #include <asm-arm/arch/regs-gpio.h>
          #include <linux/irq.h>

        (2)在4.2步添加代碼處添加一句中斷設(shè)置語(yǔ)句,連同4.2步整體效果如下:
          /*********** add by Eric Fu ************/
          for(i=0;i<6;i++){
              ndev->dev_addr[i]=net_mac_addr[i];
           }

            /*Set external intruppt*/
          set_irq_type(IRQ_EINT0,IRQT_HIGH);//IRQ_EINT0要根據(jù)自己開(kāi)發(fā)板而定,與步驟1中對(duì)應(yīng).

          /******************end **************/
       
        注意:代碼修改完成,配合第5步,第6步,編譯下載可以ping通其他機(jī)器了.

5,配置內(nèi)核:
     Device Drivers --->
            Network device support --->
                  Ethernet (10 or 100Mbit) --->
                           <*> DM9000 support   //選上該項(xiàng)


6,網(wǎng)絡(luò)設(shè)置:
     下載內(nèi)核,啟動(dòng)后執(zhí)行以下命令(否則ifconfig命令無(wú)效):
      / $ cd sbin
      /sbin $ ifconfig lo up
      /sbin $ ifconfig eth0 192.168.0.106 netmask 255.0.0.0 up         
      eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
      /sbin $ inetd
      /sbin $ mount -t proc proc /proc
      /sbin $ ifconfig
     
      出現(xiàn)如下信息:
      eth0      Link encap:Ethernet HWaddr 00:E0:3D:F4:DD:F7
          inet addr:192.168.0.106 Bcast:192.255.255.255 Mask:255.0.0.0
          UP           BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
          Interrupt:19 Base address:0xe300
                                                                               
     lo        Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

       這時(shí)可以ping通其它機(jī)器了,如果ping不通,可以試著把ip設(shè)成與你要ping的機(jī)器在同一網(wǎng)段,網(wǎng)關(guān)也設(shè)成一樣.

      / $ ping 192.168.0.105
      PING 192.168.0.105       (192.168.0.105): 56 data bytes
      84 bytes from 192.168.0.105: icmp_seq=0 ttl=64 time=2.0 ms            84 bytes from

192.168.0.105: icmp_seq=1 ttl=64 time=0.5 ms
      84 bytes from 192.168.0.105:       icmp_seq=2 ttl=64 time=0.5 ms
      84 bytes from 192.168.0.105: icmp_seq=3 ttl=64 time=0.5 ms
      84 bytes from 192.168.0.105: icmp_seq=4 ttl=64 time=0.5 ms
至此dm9000移植完成,如果內(nèi)核配置了nfs,這時(shí)就可以直接使用了.

       本文在參考了網(wǎng)上一些文章的基礎(chǔ)上針對(duì)自己遇到的問(wèn)題做了一些修改和補(bǔ)充,主要是指出了針對(duì)不同開(kāi)發(fā)板需要修改的地方,,并將外部中斷的設(shè)置方式改為函數(shù)設(shè)置,,從而將原來(lái)的十句代碼化簡(jiǎn)到一句,執(zhí)行效率上也許比不上直接代碼設(shè)置,,但是對(duì)于新手來(lái)說(shuō)這樣更簡(jiǎn)潔明了,,節(jié)省時(shí)間。

       參考文章:http://blog./brucedeng/76545/message.aspx

                        http://blog.21ic.com/user1/3074/archives/2009/57085.html

                        http://blog.csdn.net/yang_dk/archive/2008/05/01/2357664.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多