郭天祥-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网卡了

 

 

 

posted on 2017-03-11 08:38  程序天空下的骆驼  阅读(383)  评论(0编辑  收藏  举报

导航