实验 111 网络驱动移植分析Word格式文档下载.docx
《实验 111 网络驱动移植分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验 111 网络驱动移植分析Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
.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--->
,按<
Select>
,进入对网络驱动的配置选项,选中Ethernet(10or100Mbit)--->
选项,按<
Select>
按钮,进入网卡驱动配置。
【图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】
利用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
KERNELDIR?
=/root/work/linux-2.6.22.10
PWD:
=$(shellpwd)
default:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
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
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文件,增加如下内容:
【图11-1-10】
2、利用makemenuconfig命令配置内核,选择DeviceDrivers--->
【图11-1-11】
选中[*]Ethernet(10or100Mbit),在展开后配置菜单下选中
<
SMC91C9x/91C1xxsupport
【图11-1-12】
4、利用makezImage命令重新编译内核,并将内核下载到EELiod平台
【图11-1-13】
重启EELiod目标,查看目标平台启动时网卡驱动加载信息。
【图11-1-14】
6、利用ifconfig命令查看系统启动后的网络配置情况。
【图11-1-15】
7、利用ftp命令验证网络是否正常,其中192.168.0.100为PC机的IP
【图11-1-16】