【实验目的】
本实验通过在上个实验结果的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
注意:这是通过在线调试 也可以直接下到目标板上去执行