郭天祥-S3C2440开发板Linux2.6.31移植教程
本人使用的开发板是广州天嵌的TQ2440开发板
最近使用了郭天祥的教程学习S3C2440嵌入式linux2.6.31系统移植,移植yaffs2文件系统成功后,发现开发板移植的系统的ping命令无法ping通电脑。后面通过烧录开发板自带的linux镜像文件和yaffs2文件系统,对比之后。发现本人的笔记本(联想G40系列),如果只接通过本地网卡与开发板直连,无法ping通,但是使用自己的台式电脑,可以使用网线直连开发板ping通,确认了问题的原因是:
1.笔记本在网线直连开发板的情况下,无法ping通开发板。
2.个人移植的linux 2.6.31操作系统驱动存在问题。
第一个问题很好解决,如果要继续使用笔记本,可以将开发板连接到局域网内,而不是通过笔记本本地网卡直连。
第二个问题,就是一直操作系统的时候出现了问题。由于本人是根据郭天祥团队的手册《郭天祥 - linux2.6.31移植》(下载地址http://download.csdn.net/detail/camelbrand/9777501)来完成的移植,所以很可能是在该过程中出现了问题。
本人做出的变更,取消文档中对于devs.h和devs.c的操作,如下代码不加入devs.h和devs.c中
修改 arch/arm/plat-s3c24xx/devs.c 在最前面 38 行加入:
1 #include <linux/dm9000.h> //别忘加这个头文件 2 /*DM9000*/ 3 static struct resource s3c_dm9000_resource[] = 4 { 5 [0] = { 6 .start = S3C2410_CS4, 7 .end = S3C2410_CS4 + 3, 8 .flags = IORESOURCE_MEM, 9 }, 10 [1] = { 11 .start = S3C2410_CS4 + 4, 12 .end = S3C2410_CS4 + 4 + 3, 13 .flags = IORESOURCE_MEM, 14 }, 15 [2] = { 16 .start = IRQ_EINT18, /*use eint18 GPG10*/ 17 .end = IRQ_EINT18, 18 .flags = IORESOURCE_IRQ, 19 } 20 }; 21 static struct dm9000_plat_data s3c_dm9000_platdata = 22 { 23 .flags = DM9000_PLATF_16BITONLY, 24 }; 25 extern struct platform_device s3c_device_dm9000 = 26 { 27 .name = "dm9000", 28 .id = 0, 29 .num_resources = ARRAY_SIZE(s3c_dm9000_resource), 30 .resource = s3c_dm9000_resource, 31 .dev = 32 { 33 .platform_data = &s3c_dm9000_platdata, 34 } 35 }; 36 37 EXPORT_SYMBOL(s3c_device_dm9000);
在 arch/arm/plat-s3c/include/plat/devs.h 中加入一行:
extern struct platform_device s3c_device_dm9000;
修改linux-2.6.31\arch\arm\mach-s3c2440\mach-smdk2440.c
头文件添加:#include <linux/dm9000.h>
static struct s3c2410fb_mach_info smdk2440_fb_info __initdata结构体定义后添加:
1 /* DM9000 */ 2 static struct resource s3c_dm9k_resource[] = { 3 [0] = { 4 .start = S3C2410_CS4, 5 .end = S3C2410_CS4 + 3, 6 .flags = IORESOURCE_MEM, 7 }, 8 [1] = { 9 .start = S3C2410_CS4 + 4, 10 .end = S3C2410_CS4 + 4 + 3, 11 .flags = IORESOURCE_MEM, 12 }, 13 [2] = { 14 .start = IRQ_EINT7, 15 .end = IRQ_EINT7, 16 .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING, 17 } 18 19 }; 20 21 static struct dm9000_plat_data s3c_dm9k_platdata = { 22 .flags = DM9000_PLATF_16BITONLY, 23 }; 24 25 struct platform_device s3c_device_dm9000 = { 26 .name = "dm9000", 27 .id = 0, 28 .num_resources = ARRAY_SIZE(s3c_dm9k_resource), 29 .resource = s3c_dm9k_resource, 30 .dev = { 31 .platform_data = &s3c_dm9k_platdata, 32 } 33 };
重新编译,就可以正常使用dm9000.c网卡了