实验 111 网络驱动移植分析.docx

上传人:b****6 文档编号:6172968 上传时间:2023-01-04 格式:DOCX 页数:11 大小:420.41KB
下载 相关 举报
实验 111 网络驱动移植分析.docx_第1页
第1页 / 共11页
实验 111 网络驱动移植分析.docx_第2页
第2页 / 共11页
实验 111 网络驱动移植分析.docx_第3页
第3页 / 共11页
实验 111 网络驱动移植分析.docx_第4页
第4页 / 共11页
实验 111 网络驱动移植分析.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验 111 网络驱动移植分析.docx

《实验 111 网络驱动移植分析.docx》由会员分享,可在线阅读,更多相关《实验 111 网络驱动移植分析.docx(11页珍藏版)》请在冰豆网上搜索。

实验 111 网络驱动移植分析.docx

实验111网络驱动移植分析

实验11-1网卡驱动移植分析实验

【实验目的】

Ø掌握网卡驱动原理。

Ø熟悉网卡驱动的结构。

【实验步骤】

第一步:

网卡驱动资源初始化分析;打开arch\arm\march-pxa\xsbase270.c

1、网卡驱动接口资源配置结构体,用于配置网卡接口所需要的一些资源,主要包括IO端口范围、中断等。

staticstructresourcesmc91x_resources[]={

[0]={

.start=(XSBEDR_ETH_PHYS+0x300),

.end=(XSBEDR_ETH_PHYS+0xfffff),

.flags=IORESOURCE_MEM,

},

[1]={

.start=IRQ_GPIO(10),//XSBDVK_ETH_IRQ,

.end=IRQ_GPIO(10),//XSBDVK_ETH_IRQ,

.flags=IORESOURCE_IRQ,

}

};

2、网卡驱动平台接口配置结构体,主要用于设置网卡驱动所使用的名称、ID以及所利用的资源,EELiod平台使用Linux操作系统的smc91x系列网卡驱动。

staticstructplatform_devicesmc91x_device={

.name="smc91x",

.id=0,

.num_resources=ARRAY_SIZE(smc91x_resources),

.resource=smc91x_resources,

};

3、声明平台初始化时需要初始化的一些设备。

staticstructplatform_device*platform_devices[]__initdata={

&smc91x_device,

&xsbase270_audio_device,

&xsbase270_flash_device,

};

4、

系统启动时调用xsbase270_init(void)函数,用于完成对板级硬件的配置,其中platform_add_devices(platform_devices,ARRAY_SIZE(platform_devices))函数实现添加EELiod平台板级设备驱动,该代码主要实现整个IntelPXA架构硬件初始化。

staticvoid__initxsbase270_init(void)

{

structrtc_timewtime;

wtime=get_rtc4513_time();

xtime.tv_sec=mktime(wtime.tm_year,wtime.tm_mon,wtime.tm_mday,wtime.tm_hour,wtime.tm_min,wtime.tm_sec);

ARB_CNTRL=ARB_CORE_PARK|0x234;

pxa_gpio_mode(GPIO45_SYSCLK_AC97_MD);

platform_add_devices(platform_devices,ARRAY_SIZE(platform_devices));

xsbase270_pxafb_info.modes=&lb064v02_mode;

set_pxa_fb_info(&xsbase270_pxafb_info);

pxa_set_ohci_info(&xsbase270_ohci_platform_data);

pxa_set_mci_info(&xsbase270_mci_platform_data);

}

第二步:

网卡驱动的配置

1、内核配置过程中,选择DeviceDrivers--->,然后进入设备驱动配置,选中<*>Networkdevicesupport--->,按按钮,进入网卡驱动配置。

【图11-1-1】

2、

因为将采用模块的方式编译网卡驱动,所以暂不选中网卡驱动。

【图11-1-2】

3、修改linux-2.6.22.10/drivers/net/目录下的Makefile文件,屏蔽obj-$(CONFIG_MII)+=mii.o。

并增加obj-y+=mii.o,使mii(媒介无关接口)工具模块编译到内核中。

【图11-1-3】

4、

利用makezImage命令重新编译内核,并将内核下载到EELiod平台

【图11-1-4】

第三步:

网卡模块驱动编译分析

1、将linux-2.6.22.10/drivers/net/目录下的smc91x.c和smc91x.h文件复制到Linux的一个目录工作中,如root/work/netdriver,然后修改smc91x.h文件,增加如下内容:

#elifdefined(CONFIG_MACH_XSBASE270)

#defineSMC_CAN_USE_8BIT0

#defineSMC_CAN_USE_16BIT1

#defineSMC_CAN_USE_32BIT0

#defineSMC_IO_SHIFT0

#defineSMC_NOWAIT1

#defineSMC_USE_PXA_DMA1

#defineSMC_inw(a,r)readw((a)+(r))

#defineSMC_outw(v,a,r)writew(v,(a)+(r))

#defineSMC_insw(a,r,p,l)readsw((a)+(r),p,l)

#defineSMC_outsw(a,r,p,l)writesw((a)+(r),p,l)

【图11-1-5】

2、利用vi工具新建一个用于编译smc91x网络模块驱动的Makefile文件。

其中KERNELDIR?

=/root/work/linux-2.6.22.10为内核源码位置。

#Addyourdebuggingflag(ornot)toCFLAGS

ifeq($(DEBUG),y)

DEBFLAGS=-O-g-DSBULL_DEBUG#"-O"isneededtoexpandinlines

else

DEBFLAGS=-O2

endif

CFLAGS+=$(DEBFLAGS)

CFLAGS+=-I..

ifneq($(KERNELRELEASE),)

obj-m:

=smc91x.o

else

KERNELDIR?

=/root/work/linux-2.6.22.10

PWD:

=$(shellpwd)

default:

$(MAKE)-C$(KERNELDIR)M=$(PWD)modules

endif

clean:

rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions*.symvers

depend.dependdep:

$(CC)$(CFLAGS)-M*.c>.depend

ifeq(.depend,$(wildcard.depend))

include.depend

endif

3、

利用make命令编译smc91x.c,利用串口将编译后的网卡驱动模块文件smc91x.ko文件下载到目标平台。

【图11-1-6】

4、在目标平台终端利用insmod命令动态加载驱动模块,同时利用lsmod命令查看驱动模块的加载情况.

【图11-1-7】

5、

利用ifconfig命令建立网络设备,并指定IP地址和掩码地址,然后利用ifconfig命令查看网络配置情况。

【图11-1-8】

6、利用ftp命令验证网络是否正常,其中192.168.0.100为PC机的IP

【图11-1-9】

第四步:

网卡驱动到内核分析

1、修改linux-2.6.22.10/drivers/net/目录下smc91x.h文件,增加如下内容:

#elifdefined(CONFIG_MACH_XSBASE270)

#defineSMC_CAN_USE_8BIT0

#defineSMC_CAN_USE_16BIT1

#defineSMC_CAN_USE_32BIT0

#defineSMC_IO_SHIFT0

#defineSMC_NOWAIT1

#defineSMC_USE_PXA_DMA1

#defineSMC_inw(a,r)readw((a)+(r))

#defineSMC_outw(v,a,r)writew(v,(a)+(r))

#defineSMC_insw(a,r,p,l)readsw((a)+(r),p,l)

#defineSMC_outsw(a,r,p,l)writesw((a)+(r),p,l)

【图11-1-10】

2、利用makemenuconfig命令配置内核,选择DeviceDrivers--->,然后进入设备驱动配置,选中<*>Networkdevicesupport--->,按按钮,进入网卡驱动配置。

【图11-1-11】

3、

选中[*]Ethernet(10or100Mbit),在展开后配置菜单下选中

<*>SMC91C9x/91C1xxsupport

【图11-1-12】

4、利用makezImage命令重新编译内核,并将内核下载到EELiod平台

【图11-1-13】

5、

重启EELiod目标,查看目标平台启动时网卡驱动加载信息。

【图11-1-14】

6、利用ifconfig命令查看系统启动后的网络配置情况。

【图11-1-15】

7、利用ftp命令验证网络是否正常,其中192.168.0.100为PC机的IP

【图11-1-16】

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1