2010年5月9日 星期日

cs8900在2.6.14上的移植

添加驅動程序源代碼,這涉及到以下幾個方面。

  
1、把cs8900.c和cs8900.h兩個針對2.6.14的內核的驅動程序源代碼,將其放在drivers/net/arm/目錄下面。
#cp cs8900.c ./drivers/net/arm/
#cp cs8900.h ./drivers/net/arm/
並在cs8900_probe()函數中,memset (&priv,0,sizeof (cs8900_t));函數之後添加如下兩條語句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
2、修改drivers/net/arm/目錄下的Kconfig文件,在最後添加如下內容:
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.
內核系統配置文件由2.4版本的config.in變成了2.6版本Kconfig文件,在這個文件裡面添加如上內容,則在運行make menuconfig或者make xconfig命令的時候就會出現:
[ ] CS8900 support
這一選項。
3、修改drivers/net/arm/目錄下的Makefile文件,在最後添加如下內容:
obj-$(CONFIG_ARM_CS8900) += cs8900.o
2.6版本內核的Makefile文件也與2.4版本的有所不同。添加以上語句,就會使內核在編譯的時候根據配置將cs8900A的驅動程序以模塊或靜態的方式編譯到內核當中。
4、在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]結構數組,添加如下如下內容:{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}
};
添加#include <asm-arm/arch-s3c2410/smdk2410.h>
由於在驅動程序的開發的時候,在驅動程序當中所用到的跟設備有關的地址都是虛擬地址,也就是說驅動程序操作的都是虛擬地址,那麼要使驅動程序對設備的操作反映到設備上去,就得將設備的物理地址映射到正確的虛擬地址上去,從而保證驅動程序對虛擬地址的操作也就是對相應的物理地址操作。以上添加的語句就是為了將網卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虛擬地址上去,上面的結構還定義了網卡虛擬地址所佔用的區間,也就是從vSMDK2410_ETH_IO開始的SZ_1M大小的去間,並指定了該區間所指向的域(的屬性)。
5、在include/asm-arm/arch-s3c2410/目錄下創建smdk2410.h文件,其內容為:
#ifndef _INCLUDE_SMDK2410_H_
#define _INCLUDE_SMDK2410_H_
#include <linux/config.h>
#define pSMDK2410_ETH_IO 0x19000000
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
#endif // _INCLUDE_SMDK2410_H_
因為在網卡驅動程序當中,用到了一些常量,所以特意在此添加這個頭文件。這個頭文件定義了網卡的物理地址、虛擬地址以及網卡佔用的中斷線。
6、配置、編譯內核。在內核頂層目錄當中鍵入:
#make smdk2410_defconfig
由於2.6的內核默認就支持了S3C2410,所以就有一個默認的內核配置文件。裡面只是包括了一個簡單的配置,要使網卡編譯進內核,還要進行手工配置。
#make menuconfig
Networking support --->
Ethernet (10 or 100Mbit) --->
[*] CS8900 support
將剛才添加的網卡驅動程序靜態添加到內核當中。
最後進行內核編譯。
#make
然後將鏡像下載到開發板中去,這樣就搞定了。通過nfs可以進入終端命令行了。

沒有留言:

張貼留言