<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                這一部分雖然移植起來簡單,但是當我自己去分析的時候確實折騰了接近兩天的時間,真的傷不起啊。雖然說網上對于uboot移植的DM9000A網卡的移植的資料很多,移植過程也很簡單,總的來說主要就是設置一下頭文件/include/configs/fl2440.h 中宏的定義和drivers/net/dm9000x.c中網卡的函數的修改,和在board/samsung/fl2440/fl2440.c中增加關于網卡的初始化。? 打開/include/configs/fl2440.h: 注釋掉下面語句: ~~~ #define CONFIG_DRIVER_CS89001/* we have a CS8900 on-board */ #define CS8900_BASE0x19000300 #define CS8900_BUS161 /* the Linux driver does accesses as shorts ~~~ 增加下面語句: ~~~ #define CONFIG_DRIVER_DM9000?1? #define CONFIG_NET_MULTI?1? #define CONFIG_DM9000_NO_SROM1? #define CONFIG_DM9000_BASE?0x20000000 //網卡片選地址? #define DM9000_IO ??CONFIG_DM9000_BASE //網卡命令端口? #define DM9000_DATA(CONFIG_DM9000_BASE+4) //網卡數據端口? #define CONFIG_CMD_PING?//增加ping命令? #define CONFIG_CMD_DHCP ? //這個是什么 目前還不知道 ~~~ 加不加好像是都沒有影響 ~~~ #define CONFIG_CMD_NET ? //這是一個紅開關 ?我們沒有用到 ~~~ 定不定義都無所謂 ~~~ #define CONFIG_DM9000_USE_16BIT ? 1 ?//定義位寬 ~~~ 然后定義缺省的環境變量,先添加MAC地址,再修改開發板以及宿主機的IP地址: ~~~ #define CONFIG_ETHADDR? ? ? ? ? 00:0c:29:4b:94:53//我選擇的俄式和虛擬機上的一樣的MAC地址 #define CONFIG_NETMASK ? ? ? ? ?255.255.255.0? #define CONFIG_IPADDR?210.41.141.111 //開發板IP,自定義,注意要與主機IP在同一網段 #define CONFIG_SERVERIP?210.41.141.98//主機IP #define CONFIG_GATEWAYIP? ? ? 210.41.141.1//網關,在虛擬機上我都是靜態設置好了的 ~~~ 修改board/samsung/fl2440/fl2440.c;添加網卡初始化代碼: ~~~ #include <net.h>? #include <netdev.h>? #ifdef CONFIG_DRIVER_DM9000? int board_eth_init(bd_t *bis)? {? return dm9000_initialize(bis);? }? #endif? ~~~ 在drivers/net/dm9000x.c中修改: ~~~ i = 0; while (!(phy_read(1) & 0x20)) {/* autonegation complete bit */ udelay(1000); i++; if (i ==?500000) { ? ? ?? ?? ?//將10000改為500000,這樣就能解決第一次ping 不通的情況,網上說是把這段屏蔽掉,會有第一 次ping不通。 printf("could not establish link\n"); return 0; } } ~~~ 接著在dm9000x.c中修改,屏蔽掉dm9000_halt函數中的內容,否則ping不通。? ~~~ /*? Stop the interface.? The interface is stopped when it is brought.? */? static void dm9000_halt(struct eth_device *netdev)? {? //DM9000_DBG("%sn", __func__); ///* 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 */? }? ~~~ 再修改dm9000x.c中phy_read() 函數,解決傳輸過程中出現“operating at unknow : 0 mode"字符串,如下: ~~~ phy_read(int reg) { u16 val; /* Fill the phyxcer register into REG_0C */ DM9000_iow(DM9000_EPAR, DM9000_PHY | reg); DM9000_iow(DM9000_EPCR, 0xc);/* Issue phyxcer read command */ udelay(8000); ?/* Wait read complete */ ? ? ? ?//默認的的是8000的就不用修改 網上說要修改1000 ?沒有必要 這幾個值可以自己測試 DM9000_iow(DM9000_EPCR, 0x0);/* Clear phyxcer read command */ val = (DM9000_ior(DM9000_EPDRH) << 8) | DM9000_ior(DM9000_EPDRL); /* The read data keeps on REG_0D & REG_0E */ DM9000_DBG("phy_read(0x%x): 0x%x\n", reg, val); return val; } ~~~ 接下來打開net/tftp.c (注意net是在頂層目錄下),修改TIMEOUT的值,原來是5000UL,否則會出現在超時重傳的情況。 ~~~ #define TIMEOUT ?70000UL /* Millisecs to timeout for lost pkt */ ~~~ (注意這里的值的是不固定的,70000UL就可以正常傳輸,這個值也不是越大越好, 到這里,DM9000A的網卡驅動就移值完成了。 簡單介紹一個用到的宏定義CONFIG_DM9000_BASE 這里需要注意的是#define CONFIG_DM9000_BASE 0x20000000 //網卡片選地址。而不是0x20003000,這個是DM9000,而我們使用的是DM9000A。因為CMD接在ADDR2上所以#define DM9000_DATA (CONFIG_DM9000_BASE+4)。因為DM9000A的地址信號和數據信號復用,CMD引腳決定傳輸的是地址信號還是數據信號。數據手冊上說CMD為0時是地址信號所以DM9000_IO CONFIG_DM9000_BASE,CMD為1時,是數據信號,所以#define DM9000_DATA (CONFIG_DM9000_BASE+4)。DM9000A內部有一個4K Dword SRAM,因為數據線和地址線是復用的,所以如果這部分用地址線進行尋址,范圍是16KB,所以在 0x20000000~0x20000000+16KB范圍內都可以的。所以0x20003000是碰巧在這里的。第一次ping不同,第二次開始就可以ping通了,這個是正常現象。 到此時就可以ping通虛擬機和pc機了。 在PC機上啟動tftpd32.exe ?選擇好服務端,IP地址,端口。就可以傳輸了。 tftpboot 0x30008000 210.41.141.98:zImage 在這里我折騰了很久,就是因為這個路徑選擇錯誤了,錯誤的選擇方法如下: ~~~ tftpboot 0x30008000 210.41.141.98:zImage ?//文章并沒有提示我路徑錯誤,只是不停的打印如下信息: lzd> tftp 0x30000000 /home/lzd/nfs/image???????????????????????????????????????????????????????? ? TFTP from server 10.107.4.145; our IP address is 10.107.4.146????????????????? ? Filename '/home/lzd/nfs/image'.??????????????????????????????????????????????? ? Load address: 0x30000000?????????????????????????????????????????????????????? ? Loading: T T T T T T T T T T?????????????????????????????????????????????????? ? Retry count exceeded; starting again?????????????????????????????????????????? ? TFTP from server 10.107.4.145; our IP address is 10.107.4.146????????????????? ? Filename '/home/lzd/nfs/image'.??????????????????????????????????????????????? ? Load address: 0x30000000?????????????????????????????????????????????????????? ? Loading: T T T T T T T T T T?????????????????????????????????????????????????? ? Retry count exceeded; starting again ~~~ 呵呵,遇到的問題越多,你學會的東西也越多。參照別人的視頻教程,別人把程序和補丁都給你弄好了,然后按照他們的操作去做,你學到什么了嗎?你敢換塊開發板玩玩試試。我相信你自己心里也是虛的。你只是大自然的搬運工。 參考地址:http://blog.csdn.net/yanghao23/article/details/7693435
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看