機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
S3C2410網(wǎng)卡CS8900A驅(qū)動程序的移植及問題解析
S3C2410網(wǎng)卡CS8900A驅(qū)動程序的移植及問題解析
 更新時間:2008-8-18 14:58:33  點(diǎn)擊數(shù):64
【字體: 字體顏色

硬件環(huán)境:SBC-2410X開發(fā)板(CPU:S3C2410X)
內(nèi)核版本:2.6.11.1
運(yùn)行環(huán)境:Debian2.6.8
交叉編譯環(huán)境:gcc-3.3.4-glibc-2.3.3

第一部分 網(wǎng)卡CS8900A驅(qū)動程序的移植

一、從網(wǎng)上將Linux內(nèi)核源代碼下載到本機(jī)上,并將其解壓:
#tar jxf linux-2.6.11.1.tar.bz2

二、打開內(nèi)核頂層目錄中的Makefile文件,這個文件中需要修改的內(nèi)容包括以下兩個方面。
(1)指定目標(biāo)平臺。
 移植前:
        ARCH?= $(SUBARCH)
 移植后:
 ARCH            :=arm
(2)指定交叉編譯器。
  移植前:
 CROSS_COMPILE  ?=
 移植后:
 CROSS_COMPILE   :=/opt/crosstool/arm-s3c2410-linux-gnu/gcc-3.3.4-glibc-2.3.3/bin/arm-s3c2410-linux-gnu-
注:這里假設(shè)編譯器就放在本機(jī)的那個目錄下。

三、添加驅(qū)動程序源代碼,這涉及到以下幾個方面。
(1)、從網(wǎng)上下載了cs8900.c和cs8900.h兩個針對2.6.7的內(nèi)核的驅(qū)動程序源代碼,將其放在drivers/net/arm/目錄下面。
#cp cs8900.c  ./drivers/net/arm/
#cp cs8900.h  ./drivers/net/arm/
并在cs8900_probe()函數(shù)中,memset (&priv,0,sizeof (cs8900_t));函數(shù)之后添加如下兩條語句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
注:其原因在"第二部分"解釋。

(2)、修改drivers/net/arm/目錄下的Kconfig文件,在最后添加如下內(nèi)容:
Config ARM_CS8900
   tristate "CS8900 support"
 depends on NET_ETHERNET && ARM && ARCH_SMDK2410
 help
   Support for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the  Ethernet-HOWTO, available from  as well as .
   To compile this driver as a module, choose M here and read
.  The module will be
   called cs8900.o.
注:內(nèi)核系統(tǒng)配置文件由2.4版本的config.in變成了2.6版本Kconfig文件,在這個文件里面添加如上內(nèi)容,則在運(yùn)行make menuconfig或者make xconfig命令的時候就會出現(xiàn):
        [ ]   CS8900 support 
這一選項(xiàng)。

(3)、修改drivers/net/arm/目錄下的Makefile文件,在最后添加如下內(nèi)容:
obj-$(CONFIG_ARM_CS8900)    += cs8900.o
注:2.6版本內(nèi)核的Makefile文件也與2.4版本的有所不同。添加以上語句,就會使內(nèi)核在編譯的時候根據(jù)配置將cs8900A的驅(qū)動程序以模塊或靜態(tài)的方式編譯到內(nèi)核當(dāng)中。

(4)、在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]結(jié)構(gòu)數(shù)組,添加如下如下內(nèi)容:{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
修改之后變成了:
 static struct map_desc smdk2410_iodesc[] __initdata = {
       /* nothing here yet */
        /* Map the ethernet controller CS8900A */        {vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
};
 注:由于在驅(qū)動程序的開發(fā)的時候,在驅(qū)動程序當(dāng)中所用到的跟設(shè)備有關(guān)的地址都是虛擬地址,也就是說驅(qū)動程序操作的都是虛擬地址,那么要使驅(qū)動程序?qū)υO(shè)備的操作反映到設(shè)備上去,就得將設(shè)備的物理地址映射到正確的虛擬地址上去,從而保證驅(qū)動程序?qū)μ摂M地址的操作也就是對相應(yīng)的物理地址操作。以上添加的語句就是為了將網(wǎng)卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虛擬地址上去,上面的結(jié)構(gòu)還定義了網(wǎng)卡虛擬地址所占用的區(qū)間,也就是從vSMDK2410_ETH_IO開始的SZ_1M大小的去間,并指定了該區(qū)間所指向的域(的屬性)。(疑問:在本開發(fā)板上,網(wǎng)卡占用的是CPU的nGCS3片選信號,也就是在Bank3,根據(jù)處

[1] [2] [3] [4]  下一頁
  • 上一篇: MC68HC08單片機(jī)程序設(shè)計速成
  • 下一篇: 深入嵌入式系統(tǒng)的 BootLoader
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1