2010年10月28日 星期四

嵌入式Linux系统移植-添加CS8900支持

宿主机环境:
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

引用自 
http://blog.rookiesean.com/2010/08/18/%E5%B5%8C%E5%85%A5%E5%BC%8Flinux%E7%B3%BB%E7%BB%9F%E7%A7%BB%E6%A4%8D-%E6%B7%BB%E5%8A%A0cs8900%E6%94%AF%E6%8C%81/

沒有留言:

張貼留言