cs8900移植到linux2.6.32.2(注意make clean后可能会被清除所做的修改)
来源:互联网 发布:os x 软件推荐 程序员 编辑:程序博客网 时间:2024/05/22 16:31
2.在include/net/目录下创建文件smdk2410.h,并添加如下代码:
#define pSMDK2410_ETH_IO
#define vSMDK2410_ETH_IO
#define SMDK2410_EHT_IRQ
3.在arch/arm/mach-s3c2440/mach-smdk2410.c中加入"include <net/smdk2410.h>"
在struct map_desc smdk2440_iodesc[]中添加cs8900相应的io空间映射:
{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}
4.在drivers/net/arm/目录下的Makefile中加入cs8900相关项:
obj-$(CONFIG_ARM_CS8900)
在drivers/net/arm/目录下的Kconfig中加入cs8900相关项:
config ARM_CS8900
5.make menuconfig选中cs8900选项,去掉dm9000选项。
6.make 之后可以启动了。
下面说一下内核中网卡和cs8900驱动相关的话题:
由于内核更新后,struct net_device结构体及相关宏定义有变化,或造成在2.6.16/2.6.22/2.6.24内核工作的cs8900驱动在2.6.36上不能编译通过。主要修改如下:
附件是修改后的cs8900.c和cs8900.h文件。
文件传不上来。贴上吧。
下面是cs8900.c文件:
#define VERSION_STRING "Cirrus Logic CS8900A driver for Linux (Modified for ZL2440)"
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/ioport.h>
#include <linux/pm.h>
#include <linux/irq.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
// Added BSt
#include <asm/mach-types.h>
//#ifdef CONFIG_ARCH_SMDK2410
#if 1
//#include "asm/arch-s3c2410/regs-irq.h"
#include "mach/regs-mem.h"
//#include "asm/arch/smdk2410.h"
#include "net/smdk2410.h"
#endif
#include "cs8900.h"
//#define FULL_DUPLEX
//#define DEBUG
typedef struct {
} cs8900_t;
int cs8900_probe (struct net_device *dev);
static struct net_device *cs8900_dev ;
#define MAX_EEPROM_SIZE
static inline u16 cs8900_read (struct net_device *dev,u16 reg)
{
}
static inline void cs8900_write (struct net_device *dev,u16 reg,u16 value)
{
}
static inline void cs8900_set (struct net_device *dev,u16 reg,u16 value)
{
}
static inline void cs8900_clear (struct net_device *dev,u16 reg,u16 value)
{
}
static inline void cs8900_frame_read (struct net_device *dev,struct sk_buff *skb,u16 length)
{
}
static inline void cs8900_frame_write (struct net_device *dev,struct sk_buff *skb)
{
}
#ifdef DEBUG
static inline int printable (int c)
{
}
static void dump16 (struct net_device *dev,const u8 *s,size_t len)
{
}
static void hexdump (struct net_device *dev,const void *ptr,size_t size)
{