您的位置:首页 > 运维架构 > Linux

linux-2.6.35内核移植—网卡驱动的添加

2011-11-15 19:13 573 查看
【实验目的】

本实验通过在上个实验结果的linux2.6.22.6内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。

【实验环境】

1、 Ubuntu 10.10发行版

2、 u-boot-2010.03

3、 FS2410平台

4、 交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2

【实验步骤】

linux-2.6.35内核中有cs8900的驱动,但是这个驱动需要我们修改,这也是第一种支持我们的网卡的方法.另外我们可以移植一个可以使用的cs8900网卡驱动到我们的内核中.这里我们使用第二种方法

1、解压内核

$ tar xvf linux.2.6.35.tar.bz2

$ cd linux-2.6.35

2、修改顶层Makefile

修改

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=



ARCH ?= arm

CROSS_COMPILE ?= arm-none-linux-gnueabi-

3、拷贝配置文件

$ cp arch/arm/configs/s3c2410_defconfig .config

4、将cs8900.c和cs8900.h两个文件拷贝到linux-2.6.35/drivers/net/arm/下

5、修改Kconfig添加cs8900内核配置项

修改linux-2.6.35/drivers/net/arm/Kconfig添加如下内容:

config S3C2410_CS8900

tristate “CS8900 support”

depends on NET_ETHERNET && ARM && ARCH_SMDK2410

---help---

support for cs8900 chipset base Ethernet cards, if you have a network card of this type.

6、修改Makefile添加内核编译配置

修改driver/net/arm/Makefile添加如下内容:

obj-$(CONFIG_S3C2410_CS8900) += cs8900.o

7、添加地址映射定义

修改arch/arm/mach-s3c2410/include/mach/map.h文件,添加如下内容:

/* CS8900a */

#define pSMDK2410_ETH_IO __phys_to_pfn(0x19000000)

#define vSMDK2410_ETH_IO 0xE0000000

#define SMDK2410_ETH_IRQ IRQ_EINT9

8、添加平台代码

修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加如下内容:

static struct map_desc smdk2410_iodesc[] __initdata = {

/* nothing here yet */

{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE} //添加内容

};

9、配置内核,使之支持cs8900网卡

$ make menuconfig

Kernel Features ---> //使用EABI工具链这两项是必须选择的

[*] Use the ARM EABI to compile the kernel

[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)

Device Drivers --->

[*] Network device support --->

[*] Ethernet (10 or 100Mbit) --->

<*> CS8900 support

10、重新编译内核

$ make zImage

11、拷贝zImage到tftpboot目录下并重新启动开发板

$ cp arch/arm/boot/zImage /tftpboot

注意:这是通过在线调试 也可以直接下到目标板上去执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: