核心自帶的dm9000驅動程式不能用於dm9000c上,把廠家提供的驅動程式移植到開發板上。
dm9000 是乙個記憶體介面的晶元,兩個同樣接有 dm9000 的開發板,最小差異:基位址、位寬和中斷引腳。
1,基位址
位址線和資料線上掛有網絡卡晶元、記憶體和 norflash。如何訪問乙個網絡卡裝置而不被其他諸如「記憶體」或「norflash」影響,則是將每個裝置選中再訪問。讓「ngcs4」片選訊號為低電平。
當只要 cpu 發出的實體地址是「0x2000_0000 - 0x2800_0000」之間時,引腳「(ngcs4)」就會變成低電平。所以基位址根據這個實體地址「0x2000_0000 - 0x2800_0000」設定而來。
在「入口函式」中設定「基位址」
iobase =
(int
)ioremap
(0x20000000
,1024
);
2.中斷號網絡卡晶元接收到資料後,會產生乙個中斷(網絡卡晶元裡面也會有記憶體,因為它接收到資料後是先放在自已的記憶體裡,然後再產生乙個中斷)。在「中斷服務程式」裡再將此快取的資料從網絡卡晶元裡拿出來構造成乙個「skb_buff」,然後才提交上去。傳送時也是從「skb_buff」裡拿出資料交給網絡卡晶元。網絡卡晶元硬體就會再把資料從 skb_buff 中取出傳送出去,傳送完成後就會產生乙個中斷。
原理圖上,dm9000c 的「int」引腳最終接到了2440 的外部中斷7 上「eint7/gpf7」。查詢到中斷號後,在入口函式中指定此中斷號。觸發方式改為上公升沿觸發。
irq = irq_eint7;
request_irq
(dev->irq,
&dmfe_interrupt, irqf_trigger_rising,dev->name,dev)
3.設定時序
網絡卡是記憶體一樣的介面,位址訊號,讀寫脈衝,這些訊號的讀寫時序會有要求。
cpu 發指令給記憶體控制器,再由「記憶體控制器」負責發讀寫、位址等訊號給網絡卡晶元,這些訊號間的時間要設定。所以還要設定記憶體控制器。
bwscon(等待和位寬控制暫存器):位寬16位,不使用等待訊號,使用資料掩碼引腳
bankcon4(控制暫存器):可程式設計的訪問週期,控制訪問時序。如:片選後多久發出位址訊號,片選後多久發出讀訊號,讀訊號脈衝長度,讀訊號高電平片選維持多久,片選高電平位址訊號維持多久。
測試dm9000c驅動程式:
1 把dm9dev9000c.c放到核心的drivers/net目錄下
2. 修改drivers/net/makefile
把obj-(co
nfig
dm9000)+
=dm9000.o改
為obj
−(config_dm9000) += dm9000.o 改為obj-
(confi
gdm
9000
)+=d
m900
0.o改
為obj
−(config_dm9000) += dm9dev9000c.o
3. make uimage使用新核心啟動
cp arch/arm/boot/uimage /work/nfs_root/uimage_dm9000c
4. 使用nfs啟動
nfs 30000000 192.168.1.190:/work/nfs_root/uimage_dm9000c
bootm 30000000
或ifconfig eth0 192.168.1.17
ping 192.168.1.1
DM9000C網絡卡驅動
目的 通過學習,掌握如何移植 編寫dm9000c網絡卡驅動 一 概述 dm9000是一款高度整合低功耗快速乙太網處理器,該晶元整合了mac和phy。dm9000可以和cpu直接連線,支援8位 16位和32位資料匯流排寬度。該晶元支援10m和100m自適應乙太網介面,內部有16k的fifo以及4k雙位...
linux核心移植 DM9000C移植筆記
一 開發環境 1 核心 linux2.6.22.6 2 jz2440 3 ubuntu 9.10 4 dm9dev9000c.c。二 移植過程 1 修改驅動dm9dev9000c.c。1 1610行 ifdef module和最後一行 endif注釋掉。2 最後幾行新增修飾命令,並修改入口和出口函式...
網絡卡(dm9000)驅動移植
網絡卡 dm9000 驅動移植 看到網上有很多的部落格分享,比如 在此,描述一下自己的製作過程 1.修改arch arm plat s3c24xx common smdk.c檔案 在包含標頭檔案的區域增加以下 在smdk devs結構體之前新增以下 if defined config dm9000 ...