天天看點

移植網卡驅動DM9000移植DM9000

移植DM9000

移植

  1. 編譯
  2. 解決錯誤

    2.1 頭檔案不對 :去掉或改名

    2.2 宏不對 :改名使用新宏

    2.3 有些函數沒有了 :改名使用新函數

移植前的試驗

—之前移植的3.4.2核心是否已經具有支援smdk2440單闆的網卡(否)

移植網卡驅動DM9000移植DM9000

—之前移植的3.4.2核心是否已經具有支援mini2440單闆的網卡(是),并可以成功挂接(mount -t nfs -o nolock,vers=2 192.168.0.3:/work/nfs_root/fs_mini_mdev_new /mnt)

移植網卡驅動DM9000移植DM9000
移植網卡驅動DM9000移植DM9000
移植網卡驅動DM9000移植DM9000

移植核心自帶的網卡驅動Dm9000.c(版本較低)

  1. 進入3.4.2核心自帶網卡驅動檔案Dm9000.c,找到平台驅動的結構體dm9000_driver,在源碼中搜尋”dm9000”,搜尋結果确實找到了關于mini2440的裝置檔案,而沒有smdk2440的。
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
  2. 進入上面搜尋到的mach-mini2440.c檔案,可知核心确實具有支援mini2440的對應的網卡平台裝置
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
  3. 在源碼中smdk2440的單闆檔案(mach-smdk2440.c)中,添加對應的網卡平台裝置

    —檢視現在所有的平台裝置,并沒有網卡驅動對應的平台裝置

    移植網卡驅動DM9000移植DM9000
    —仿照mach-mini2440.c檔案中的相關代碼,在mach-smdk2440.c添加對應的網卡平台裝置
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
  4. 上傳檔案,重新編譯核心(make uImage)并命名為uImage_3.4.2_net,重新開機開發闆後設定machid為16a(smdk2440),nfs下載下傳新核心并重新開機,并重新驗證核心是否已支援smdk2440的網卡裝置(是)

    set machid 16a

    nfs 32000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net

    bootm 32000000

移植網卡驅動DM9000移植DM9000

移植廠家的網卡驅動(較新)

  1. 在work目錄下建立目錄,在該目錄下拷貝二期驅動中修改好的廠家給的網卡驅動檔案(drivers_and_tests\17th_dm9000c),修改其Makefile後,在該檔案夾下編譯。

    —建立新目錄,并拷貝檔案

    移植網卡驅動DM9000移植DM9000
    —修改Makefile
    移植網卡驅動DM9000移植DM9000
    —編譯,出現一大堆錯誤
    移植網卡驅動DM9000移植DM9000
  2. 解決錯誤
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —錯誤中提示dev結構體中沒有priv成員(dm9dev9000c.c),故在dm9000.c中檢視(搜尋”board_info”),發現該檔案使用的是netdev_priv。故将dm9dev9000c.c中的(board_info_t *)dev->priv均替換成netdev_priv(dev)
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —上傳檔案,重新編譯,仍存在一大堆錯誤
    移植網卡驅動DM9000移植DM9000
    —錯誤提示dm9dev9000c.c:428:struct net_device’ has no member named ‘open’等等,找到所在行,在dm9000.c中搜尋”open”,參照其做法,在dm9dev9000c.c檔案中仿照
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —上傳檔案,重新編譯,仍存在一堆錯誤
    移植網卡驅動DM9000移植DM9000
    —錯誤提示dm9000_hash_table(哈希表)有問題,我們用dm9000.c中的哈希表的函數替換它
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —上傳檔案,重新編譯,仍存在一些錯誤
    移植網卡驅動DM9000移植DM9000
    —錯誤提示是一些宏沒有定義,檢視頭檔案,需要包含dm9000.h
    移植網卡驅動DM9000移植DM9000

    —上傳檔案,并将頭檔案dm9000.h(drivers\net\ethernet\davicom

    )複制到/work/drivers_and_test_new/Dm9000c檔案夾下,重新編譯,存在少量錯誤提示

    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —根據錯誤提示,進行最後修改
    移植網卡驅動DM9000移植DM9000
    移植網卡驅動DM9000移植DM9000
    —上傳檔案,重新編譯,編譯成功
    移植網卡驅動DM9000移植DM9000
  3. 将已可以編譯過的驅動檔案dm9dev9000c.c放入對應的核心目錄(dm9000.c的目錄)并修改其Makefile,重新編譯核心,用新核心啟動,驗證網卡是否可以正常工作

    3.1 拷貝檔案到核心目錄

    cp dm9dev9000c.c /work/system/linux-3.4.2/drivers/net/ethernet/davicom/

    3.2 修改Makefile

    vi /work/system/linux-3.4.2/drivers/net/ethernet/davicom/Makefile

    移植網卡驅動DM9000移植DM9000

    3.3 重新編譯核心,并命名為uImage_3.4.2_net_new

    cp arch/arm/boot/uImage /work/nfs_root/uImage_3.4.2_net_new

    3.4 nfs下載下傳新核心并用其啟動,驗證網卡是否正常(是)

    nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new

    bootm 30000000

    移植網卡驅動DM9000移植DM9000
  4. 但在直接挂接nfs網絡檔案系統是出現故障

    4.1 設定環境參數并儲存,直接挂接nfs網絡檔案系統;

    set bootargs console=ttySAC,115200 root=/dev/nfs nfsroot=192.168.0.3:/work/nfs_root/fs_mini_mdev_new ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0::eth0:off

    save

    4.2 nfs下載下傳新核心uImage_3.4.2_net_new後,啟動後出現如圖故障

    nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new

    bootm 30000000

    移植網卡驅動DM9000移植DM9000
  5. 檢視驅動檔案dm9dev9000c.c後,在dm9000c_init函數中使用與mini2440相同的時間參數後,重新編譯核心(依舊命名為uImage_3.4.2_net_new),nfs下載下傳後并啟動,成功啟動nfs網絡檔案系統(并未出現上步故障),最後将該核心燒寫到nand的核心分區。

    —修改

    移植網卡驅動DM9000移植DM9000
    —新核心啟動
    移植網卡驅動DM9000移植DM9000
    —将新核心燒寫到nand分區
    移植網卡驅動DM9000移植DM9000

繼續閱讀