宿主机环境:
Linux version 2.6.32-24, Ubuntu10.04
gcc version 4.1.3, Thread model: posix;
GNU Make 3.81
arm-linux-gcc 3.4.5

开发板环境:
CPU: S3C2410X
SDRAM: HY57V561620(32MB)
FLASH: K9F1208(64MB)
NET: CS8900
Linux Kernel: 2.6.23.8

所需源文件:
cs8900.tar.gz

移植步骤:

下载上面所给出的cs8900.tar.bz2文件,解压缩到drivers/net/arm/目录下面。

rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8$ cd drivers/net/arm/
rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8/drivers/net/arm$ tar xvf /home/rookiesean/Downloads/cs8900.tar.bz2

在/drivers/net/arm/Kconfig中增加menu config中CS8900编译选项。

rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8/drivers/net/arm$ vim Kconfig

config ARM_CS8900
tristate “CS8900 support (sean chi 18Aug2010, added)”
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help
Support for CS8900A chipset based Ethernet cards. If you have a
network card of this type, say Y and read the EthernetHOWTO, available
from as well as. To compile this driver as a module, choose M here and
read. The module will be called cs8900.o

在/drivers/net/arm/Makefile中添加如下内容:

rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8/drivers/net/arm$ vim Makefile

obj-$(CONFIG_ARM_CS8900) += cs8900.o#sean chi 18Aug2010, added.

然后我们在include/asm-arm/arch-s3c2410/目录下面创建一个smdk2410.h的头文件。

rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8$ cd include/asm-arm/arch-s3c2410/
rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8/include/asm-arm/arch-s3c2410$ vim smdk2410.h

添加如下代码:

#define pSMDK2410_ETH_IO __phys_to_pfn(0×19000000)
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_EHT_IRQ IRQ_EIN

修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,包含新创建的smdk2410.h头文件,并在map_desc smdk2410_iodesc[]
中添加cs8900的对于的io空间映射:

rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8$ cd arch/arm/mach-s3c2410/
rookiesean@rookiesean-desktop:~/workspace/linux-2.6.23.8/arch/arm/mach-s3c2410$ vi mach-smdk2410.c

#include <asm/plat-s3c24xx/devs.h>
#include <asm/plat-s3c24xx/cpu.h>

#include <asm/plat-s3c24xx/common-smdk.h>

#include <asm/arch/smdk2410.h> // sean chi 18Aug2010, added.

static struct map_desc smdk2410_iodesc[] __initdata = {
{ vSMDK2410_ETH_IO , pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE }, // sean chi 18Aug2010, added.
/* nothing here yet */
};

#define UCON S3C2410_UCON_DEFAULT
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE

执行menu config。 Device drivers->network device support->Ethernet中选择(*)CS8900 support。

编译内核make zImage。

通过uboot把zImage加载到SDRAM的0×30008000处,接着运行新的内核。

SMDK2410 # tftp 30008000 zImage.sean.cs8900
SMDK2410 # g 30008000

可以看到如下结果,表示添加对cs8900的支持成功。

dm9000 Ethernet Driver
Cirrus Logic CS8900A driver for Linux (Modified for SMDK2410)
eth0: CS8900A rev E at 0xe0000300 irq=53, addr: 00: 0:3E:26:0A: 0
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx

参考资料:
Linux 2.6.24.4移植到S3C2410(nano2410)之:CS8900移植

2 回应 到 “嵌入式Linux系统移植-添加CS8900支持”

  1. [...] 由于这里是通过网络使用NFS的形式去加载根文件系统,所以从以上的错误我们可以得知是网卡配置的问题,通过添加对CS8900网卡的支持以解决这个问题。 [...]

  2. cs8900.tar.gz 这个文件下载不了,可以发到我的邮箱吗?谢谢
    asmvc@163.com

回复

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2011 《洛克.肖恩的救赎》 Suffusion theme by Sayontan Sinha