移植linux2.6.18到arm9
废话不说了,就讲讲要怎么改,
(1)arch/arm/mach-s3c2410/common-smdk.c
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
(2)arch/arm/mach-s3c2410/mach-smdk2410.c
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
/* Map the ethernet controller CS8900A */
{ 0xe0000000, __phys_to_pfn(S3C2410_CS3+0x01000000), SZ_1M, MT_DEVICE }
};
static struct resource cs89x0_resources[] = {drivers/net/cs89x0.c
[0] = {
.start = 0x19000000,
.end = 0x19000000 + 16,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_EINT9,
.end = IRQ_EINT9,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device cs89x0_device = {
.name = "cirrus-cs89x0",
.num_resources = ARRAY_SIZE(cs89x0_resources),
.resource = cs89x0_resources,
};
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&cs89x0_device,
};
(3)添加对cs8900网卡的支持
主要看patch
diff -Nur linux-2.6.18.2/drivers/net/cs89x0.c linux-2.6.18.2_nano2410/drivers/net/cs89x0.c
--- linux-2.6.18.2/drivers/net/cs89x0.c 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/drivers/net/cs89x0.c 2007-06-29 22:10:15.000000000 +0800
@@ -96,6 +96,9 @@
Dmitry Pervushin : dpervushin@ru.mvista.com
: PNX010X platform support
+ Christian Pell : chripell@gmail.com
+ : SMDK2410 platform support, fixed bug with signed ioaddr
+
*/
/* Always include 'config.h' first in case the user wants to turn on
@@ -194,6 +197,26 @@
#define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
+#elif defined(CONFIG_ARCH_S3C2410)
+#include <linux/irq.h>
+#include <asm/irq.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/regs-mem.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/map.h>
+
+static unsigned int netcard_portlist[] __initdata = {0xe0000300, 0};
+static unsigned int cs8900_irq_map[] = {IRQ_EINT9, 0, 0, 0};
+/*
+#ifdef request_region
+#undef request_region
+#endif
+#ifdef release_region
+#undef release_region
+#endif
+#define request_region(a,s,n) request_mem_region(a,s,n)
+#define release_region(a,s) release_mem_region(a,s)
+*/
#else
static unsigned int netcard_portlist[] __initdata =
{ 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
@@ -246,7 +269,7 @@
/* Index to functions, as function prototypes. */
-static int cs89x0_probe1(struct net_device *dev, int ioaddr, int modular);
+static int cs89x0_probe1(struct net_device *dev, unsigned int ioaddr, int modular);
static int net_open(struct net_device *dev);
static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
static irqreturn_t net_interrupt(int irq, void *dev_id, struct pt_regs *regs);
@@ -323,7 +346,10 @@
netdev_boot_setup_check(dev);
io = dev->base_addr;
irq = dev->irq;
-
+ #ifdef CONFIG_ARCH_S3C2410 //Added weibing
+ __raw_writel((__raw_readl(S3C2410_GPGCON)&~(0x3<<2))|(0x2<<2),S3C2410_GPGCON);
+ __raw_writel((__raw_readl(S3C2410_EXTINT1)&~(0x7<<4))|(0x4<<4),S3C2410_EXTINT1);
+ #endif
if (net_debug)
printk("cs89x0:cs89x0_probe(0x%x)\n", io);
@@ -386,6 +412,18 @@
{
outw(value, base_addr + (portno << 1));
}
+#elif defined(CONFIG_ARCH_S3C2410) //Added weibing
+static u16
+readword(unsigned long base_addr, int portno)
+{
+ return __raw_readw(base_addr+portno);
+}
+
+static void
+writeword(unsigned long base_addr, int portno,u16 value)
+{
+ __raw_writew(value,base_addr+portno);
+}
#else
static u16
readword(unsigned long base_addr, int portno)drivers/net/cs89x0.c
@@ -507,7 +545,7 @@
*/
static int __init
-cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
+cs89x0_probe1(struct net_device *dev, unsigned int ioaddr, int modular)
{
struct net_local *lp = netdev_priv(dev);
static unsigned version_printed;
@@ -638,7 +676,18 @@
the driver will always do *something* instead of complain that
adapter_cnf is 0. */
-#ifdef CONFIG_SH_HICOSH4
+#if defined CONFIG_ARCH_S3C2410
+lp->force=FORCE_RJ45;
+lp->auto_neg_cnf=IMM_BIT;
+
+ dev->dev_addr[0]=0x08; /*setMACaddress*/
+ dev->dev_addr[1]=0x00;
+ dev->dev_addr[2]=0x3E;
+ dev->dev_addr[3]=0x26;
+ dev->dev_addr[4]=0x0A;
+ dev->dev_addr[5]=0x5B;
+
+#elif defined CONFIG_SH_HICOSH4
if (1) {
/* For the HiCO.SH4 board, things are different: we don't
have EEPROM, but there is some data in flash, so we go
@@ -828,7 +877,13 @@
}
printk(" IRQ %d", dev->irq);
-
+ dev->dev_addr[0] = 0x00;
+ dev->dev_addr[1] = 0x00;
+ dev->dev_addr[2] = 0xc0;
+ dev->dev_addr[3] = 0xff;
+ dev->dev_addr[4] = 0xee;
+ dev->dev_addr[5] = 0x08;
+ set_mac_address(dev, dev->dev_addr);
#if ALLOW_DMA
if (lp->use_dma) {
get_dma_channel(dev);
@@ -1036,7 +1091,7 @@
{
#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
struct net_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
+ unsigned int ioaddr = dev->base_addr;
#endif
int reset_start_time;
@@ -1278,7 +1333,7 @@
int i;
int ret;
-#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) /* uses irq#1, so this won't work */
+#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S3C2410) /* uses irq#1, so this won't work */
if (dev->irq < 2) {
/* Allow interrupts to be generated by the chip */
/* Cirrus' release had this: */
@@ -1309,7 +1364,7 @@
else
#endif
{
-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
+#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)&& !defined(CONFIG_ARCH_S3C2410)
if (((1 << dev->irq) & lp->irq_map) == 0) {
printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map);
@@ -1324,6 +1379,9 @@
writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
#endif
write_irq(dev, lp->chip_type, dev->irq);
+#if defined(CONFIG_ARCH_S3C2410)
+ set_irq_type(dev->irq, IRQT_RISING);
+#endif
ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
if (ret) {
if (net_debug)
@@ -1394,7 +1452,7 @@
case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
}
-#ifdef CONFIG_ARCH_PNX010X
+#if defined(CONFIG_ARCH_PNX0105) || defined(CONFIG_ARCH_S3C2410)
result = A_CNF_10B_T;
#endif
if (!result) {
@@ -1577,7 +1635,8 @@
{
struct net_device *dev = dev_id;
struct net_local *lp;
- int ioaddr, status;
+ unsigned int ioaddr;
+ int status;
int handled = 0;
ioaddr = dev->base_addr;
@@ -1682,8 +1741,8 @@
struct net_local *lp = netdev_priv(dev);
struct sk_buff *skb;
int status, length;
-
- int ioaddr = dev->base_addr;
+
+ unsigned int ioaddr = dev->base_addr;
status = readword(ioaddr, RX_FRAME_PORT);
length = readword(ioaddr, RX_FRAME_PORT);
diff -Nur linux-2.6.18.2/drivers/net/Kconfig linux-2.6.18.2_nano2410/drivers/net/Kconfig
--- linux-2.6.18.2/drivers/net/Kconfig 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/drivers/net/Kconfig 2007-06-29 21:50:40.000000000 +0800
@@ -1274,7 +1274,7 @@
config NET_PCI
bool "EISA, VLB, PCI and on board controllers"
- depends on NET_ETHERNET && (ISA || EISA || PCI)
+ depends on NET_ETHERNET && (ISA || EISA || PCI || ARCH_S3C2410)
help
This is another class of network cards which attach directly to the
bus. If you have one of those, say Y and read the Ethernet-HOWTO,
@@ -1414,7 +1414,7 @@
config CS89x0
tristate "CS89x0 support"
- depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
+ depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X || ARCH_S3C2410)
---help---
Support for CS89x0 chipset based Ethernet cards. If you have a
network (Ethernet) card of this type, say Y and read the
diff -Nur linux-2.6.18.2/include/asm-arm/arch-s3c2410/map.h linux-2.6.18.2_nano2410/include/asm-arm/arch-s3c2410/map.h
--- linux-2.6.18.2/include/asm-arm/arch-s3c2410/map.h 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/include/asm-arm/arch-s3c2410/map.h 2007-06-29 22:11:49.000000000 +0800
@@ -160,6 +160,11 @@
#define S3C2440_PA_CAMIF (0x4F000000)
#define S3C2440_SZ_CAMIF SZ_1M
+ /* CS8900 */
+#define S3C24XX_VA_cs8900 S3C2410_ADDR(0xe0000000)
+#define S3C2410_PA_CS8900 __phys_to_pfn(0x19000000)
+#define S3C24XX_SZ_cs8900 SZ_1M
+#define S3C24XX_PA_cs8900 S3C2410_PA_CS8900
/* ISA style IO, for each machine to sort out mappings for, if it
* implements it. We reserve two 16M regions for ISA.
*/
diff -Nur linux-2.6.18.2/include/asm-arm/irq.h linux-2.6.18.2_nano2410/include/asm-arm/irq.h
--- linux-2.6.18.2/include/asm-arm/irq.h 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/include/asm-arm/irq.h 2007-06-29 18:25:38.000000000 +0800
@@ -36,7 +36,7 @@
#define IRQT_LOW (__IRQT_LOWLVL)
#define IRQT_HIGH (__IRQT_HIGHLVL)
#define IRQT_PROBE IRQ_TYPE_PROBE
-
+int set_irq_type(unsigned int irq, unsigned int type);
extern void migrate_irqs(void);
#endif
(4)还有添加对devfs的支持,网上资料一大堆,我就不多说了。
(5) 推荐用3.4.1版本的编译器编译。
(6)网上有很多资料多说要去掉mtd对nand的ecc检测,但是经过我的测试,这样做会有很多问题。特别是使用yaffs文件系统,就应该关掉yaffs自带的ecc,而用mtd的ecc。
(7)yaffs的移植,我后面再说。
(1)arch/arm/mach-s3c2410/common-smdk.c
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
(2)arch/arm/mach-s3c2410/mach-smdk2410.c
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
/* Map the ethernet controller CS8900A */
{ 0xe0000000, __phys_to_pfn(S3C2410_CS3+0x01000000), SZ_1M, MT_DEVICE }
};
static struct resource cs89x0_resources[] = {drivers/net/cs89x0.c
[0] = {
.start = 0x19000000,
.end = 0x19000000 + 16,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_EINT9,
.end = IRQ_EINT9,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device cs89x0_device = {
.name = "cirrus-cs89x0",
.num_resources = ARRAY_SIZE(cs89x0_resources),
.resource = cs89x0_resources,
};
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&cs89x0_device,
};
(3)添加对cs8900网卡的支持
主要看patch
diff -Nur linux-2.6.18.2/drivers/net/cs89x0.c linux-2.6.18.2_nano2410/drivers/net/cs89x0.c
--- linux-2.6.18.2/drivers/net/cs89x0.c 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/drivers/net/cs89x0.c 2007-06-29 22:10:15.000000000 +0800
@@ -96,6 +96,9 @@
Dmitry Pervushin : dpervushin@ru.mvista.com
: PNX010X platform support
+ Christian Pell : chripell@gmail.com
+ : SMDK2410 platform support, fixed bug with signed ioaddr
+
*/
/* Always include 'config.h' first in case the user wants to turn on
@@ -194,6 +197,26 @@
#define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
+#elif defined(CONFIG_ARCH_S3C2410)
+#include <linux/irq.h>
+#include <asm/irq.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/regs-mem.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/map.h>
+
+static unsigned int netcard_portlist[] __initdata = {0xe0000300, 0};
+static unsigned int cs8900_irq_map[] = {IRQ_EINT9, 0, 0, 0};
+/*
+#ifdef request_region
+#undef request_region
+#endif
+#ifdef release_region
+#undef release_region
+#endif
+#define request_region(a,s,n) request_mem_region(a,s,n)
+#define release_region(a,s) release_mem_region(a,s)
+*/
#else
static unsigned int netcard_portlist[] __initdata =
{ 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
@@ -246,7 +269,7 @@
/* Index to functions, as function prototypes. */
-static int cs89x0_probe1(struct net_device *dev, int ioaddr, int modular);
+static int cs89x0_probe1(struct net_device *dev, unsigned int ioaddr, int modular);
static int net_open(struct net_device *dev);
static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
static irqreturn_t net_interrupt(int irq, void *dev_id, struct pt_regs *regs);
@@ -323,7 +346,10 @@
netdev_boot_setup_check(dev);
io = dev->base_addr;
irq = dev->irq;
-
+ #ifdef CONFIG_ARCH_S3C2410 //Added weibing
+ __raw_writel((__raw_readl(S3C2410_GPGCON)&~(0x3<<2))|(0x2<<2),S3C2410_GPGCON);
+ __raw_writel((__raw_readl(S3C2410_EXTINT1)&~(0x7<<4))|(0x4<<4),S3C2410_EXTINT1);
+ #endif
if (net_debug)
printk("cs89x0:cs89x0_probe(0x%x)\n", io);
@@ -386,6 +412,18 @@
{
outw(value, base_addr + (portno << 1));
}
+#elif defined(CONFIG_ARCH_S3C2410) //Added weibing
+static u16
+readword(unsigned long base_addr, int portno)
+{
+ return __raw_readw(base_addr+portno);
+}
+
+static void
+writeword(unsigned long base_addr, int portno,u16 value)
+{
+ __raw_writew(value,base_addr+portno);
+}
#else
static u16
readword(unsigned long base_addr, int portno)drivers/net/cs89x0.c
@@ -507,7 +545,7 @@
*/
static int __init
-cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
+cs89x0_probe1(struct net_device *dev, unsigned int ioaddr, int modular)
{
struct net_local *lp = netdev_priv(dev);
static unsigned version_printed;
@@ -638,7 +676,18 @@
the driver will always do *something* instead of complain that
adapter_cnf is 0. */
-#ifdef CONFIG_SH_HICOSH4
+#if defined CONFIG_ARCH_S3C2410
+lp->force=FORCE_RJ45;
+lp->auto_neg_cnf=IMM_BIT;
+
+ dev->dev_addr[0]=0x08; /*setMACaddress*/
+ dev->dev_addr[1]=0x00;
+ dev->dev_addr[2]=0x3E;
+ dev->dev_addr[3]=0x26;
+ dev->dev_addr[4]=0x0A;
+ dev->dev_addr[5]=0x5B;
+
+#elif defined CONFIG_SH_HICOSH4
if (1) {
/* For the HiCO.SH4 board, things are different: we don't
have EEPROM, but there is some data in flash, so we go
@@ -828,7 +877,13 @@
}
printk(" IRQ %d", dev->irq);
-
+ dev->dev_addr[0] = 0x00;
+ dev->dev_addr[1] = 0x00;
+ dev->dev_addr[2] = 0xc0;
+ dev->dev_addr[3] = 0xff;
+ dev->dev_addr[4] = 0xee;
+ dev->dev_addr[5] = 0x08;
+ set_mac_address(dev, dev->dev_addr);
#if ALLOW_DMA
if (lp->use_dma) {
get_dma_channel(dev);
@@ -1036,7 +1091,7 @@
{
#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
struct net_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
+ unsigned int ioaddr = dev->base_addr;
#endif
int reset_start_time;
@@ -1278,7 +1333,7 @@
int i;
int ret;
-#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) /* uses irq#1, so this won't work */
+#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S3C2410) /* uses irq#1, so this won't work */
if (dev->irq < 2) {
/* Allow interrupts to be generated by the chip */
/* Cirrus' release had this: */
@@ -1309,7 +1364,7 @@
else
#endif
{
-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
+#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)&& !defined(CONFIG_ARCH_S3C2410)
if (((1 << dev->irq) & lp->irq_map) == 0) {
printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map);
@@ -1324,6 +1379,9 @@
writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
#endif
write_irq(dev, lp->chip_type, dev->irq);
+#if defined(CONFIG_ARCH_S3C2410)
+ set_irq_type(dev->irq, IRQT_RISING);
+#endif
ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
if (ret) {
if (net_debug)
@@ -1394,7 +1452,7 @@
case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
}
-#ifdef CONFIG_ARCH_PNX010X
+#if defined(CONFIG_ARCH_PNX0105) || defined(CONFIG_ARCH_S3C2410)
result = A_CNF_10B_T;
#endif
if (!result) {
@@ -1577,7 +1635,8 @@
{
struct net_device *dev = dev_id;
struct net_local *lp;
- int ioaddr, status;
+ unsigned int ioaddr;
+ int status;
int handled = 0;
ioaddr = dev->base_addr;
@@ -1682,8 +1741,8 @@
struct net_local *lp = netdev_priv(dev);
struct sk_buff *skb;
int status, length;
-
- int ioaddr = dev->base_addr;
+
+ unsigned int ioaddr = dev->base_addr;
status = readword(ioaddr, RX_FRAME_PORT);
length = readword(ioaddr, RX_FRAME_PORT);
diff -Nur linux-2.6.18.2/drivers/net/Kconfig linux-2.6.18.2_nano2410/drivers/net/Kconfig
--- linux-2.6.18.2/drivers/net/Kconfig 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/drivers/net/Kconfig 2007-06-29 21:50:40.000000000 +0800
@@ -1274,7 +1274,7 @@
config NET_PCI
bool "EISA, VLB, PCI and on board controllers"
- depends on NET_ETHERNET && (ISA || EISA || PCI)
+ depends on NET_ETHERNET && (ISA || EISA || PCI || ARCH_S3C2410)
help
This is another class of network cards which attach directly to the
bus. If you have one of those, say Y and read the Ethernet-HOWTO,
@@ -1414,7 +1414,7 @@
config CS89x0
tristate "CS89x0 support"
- depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
+ depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X || ARCH_S3C2410)
---help---
Support for CS89x0 chipset based Ethernet cards. If you have a
network (Ethernet) card of this type, say Y and read the
diff -Nur linux-2.6.18.2/include/asm-arm/arch-s3c2410/map.h linux-2.6.18.2_nano2410/include/asm-arm/arch-s3c2410/map.h
--- linux-2.6.18.2/include/asm-arm/arch-s3c2410/map.h 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/include/asm-arm/arch-s3c2410/map.h 2007-06-29 22:11:49.000000000 +0800
@@ -160,6 +160,11 @@
#define S3C2440_PA_CAMIF (0x4F000000)
#define S3C2440_SZ_CAMIF SZ_1M
+ /* CS8900 */
+#define S3C24XX_VA_cs8900 S3C2410_ADDR(0xe0000000)
+#define S3C2410_PA_CS8900 __phys_to_pfn(0x19000000)
+#define S3C24XX_SZ_cs8900 SZ_1M
+#define S3C24XX_PA_cs8900 S3C2410_PA_CS8900
/* ISA style IO, for each machine to sort out mappings for, if it
* implements it. We reserve two 16M regions for ISA.
*/
diff -Nur linux-2.6.18.2/include/asm-arm/irq.h linux-2.6.18.2_nano2410/include/asm-arm/irq.h
--- linux-2.6.18.2/include/asm-arm/irq.h 2006-11-04 09:33:58.000000000 +0800
+++ linux-2.6.18.2_nano2410/include/asm-arm/irq.h 2007-06-29 18:25:38.000000000 +0800
@@ -36,7 +36,7 @@
#define IRQT_LOW (__IRQT_LOWLVL)
#define IRQT_HIGH (__IRQT_HIGHLVL)
#define IRQT_PROBE IRQ_TYPE_PROBE
-
+int set_irq_type(unsigned int irq, unsigned int type);
extern void migrate_irqs(void);
#endif
(4)还有添加对devfs的支持,网上资料一大堆,我就不多说了。
(5) 推荐用3.4.1版本的编译器编译。
(6)网上有很多资料多说要去掉mtd对nand的ecc检测,但是经过我的测试,这样做会有很多问题。特别是使用yaffs文件系统,就应该关掉yaffs自带的ecc,而用mtd的ecc。
(7)yaffs的移植,我后面再说。