DM9000驱动移植详解及问题点.docx

上传人:b****1 文档编号:13793213 上传时间:2023-06-17 格式:DOCX 页数:39 大小:27.57KB
下载 相关 举报
DM9000驱动移植详解及问题点.docx_第1页
第1页 / 共39页
DM9000驱动移植详解及问题点.docx_第2页
第2页 / 共39页
DM9000驱动移植详解及问题点.docx_第3页
第3页 / 共39页
DM9000驱动移植详解及问题点.docx_第4页
第4页 / 共39页
DM9000驱动移植详解及问题点.docx_第5页
第5页 / 共39页
DM9000驱动移植详解及问题点.docx_第6页
第6页 / 共39页
DM9000驱动移植详解及问题点.docx_第7页
第7页 / 共39页
DM9000驱动移植详解及问题点.docx_第8页
第8页 / 共39页
DM9000驱动移植详解及问题点.docx_第9页
第9页 / 共39页
DM9000驱动移植详解及问题点.docx_第10页
第10页 / 共39页
DM9000驱动移植详解及问题点.docx_第11页
第11页 / 共39页
DM9000驱动移植详解及问题点.docx_第12页
第12页 / 共39页
DM9000驱动移植详解及问题点.docx_第13页
第13页 / 共39页
DM9000驱动移植详解及问题点.docx_第14页
第14页 / 共39页
DM9000驱动移植详解及问题点.docx_第15页
第15页 / 共39页
DM9000驱动移植详解及问题点.docx_第16页
第16页 / 共39页
DM9000驱动移植详解及问题点.docx_第17页
第17页 / 共39页
DM9000驱动移植详解及问题点.docx_第18页
第18页 / 共39页
DM9000驱动移植详解及问题点.docx_第19页
第19页 / 共39页
DM9000驱动移植详解及问题点.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DM9000驱动移植详解及问题点.docx

《DM9000驱动移植详解及问题点.docx》由会员分享,可在线阅读,更多相关《DM9000驱动移植详解及问题点.docx(39页珍藏版)》请在冰点文库上搜索。

DM9000驱动移植详解及问题点.docx

DM9000驱动移植详解及问题点

OK6410、2.6.36内核移植,dm9000驱动移植,详细!

分类:

嵌入式学习Linux学习2012-04-2700:

543004人阅读评论(7)收藏举报

interfaceccompressionresourcesstructtable

    还是先来吐槽:

 本来我是在上一个星期的周末已经把Linux2.6.34.11的驱动已经成功的移植到,OK6410的开发板上的,并且能够启动主机上的NFS根文件系统,可是我在周一的时候,开始学习LCD的驱动程序, 在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11的内核源码搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释,并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34的内核,所以也就只能重新先开始最基础的内核移植了。

这次我选择的是2.6.36.2的内核,谁知到一开始移植就出现一大堆问题。

在这里我不得不说,飞凌开发人员对内核修改的代码,管理真的是太扯了,自己在注销任何一个设备是没有一点点注释,就把这个设备原有的线性地址分配给其它设备了,让我让我们这些菜鸟干看着一大堆的报错信息顶个什么用,真的是伤不起。

好了不乱扯了,现在开始记录。

我的开发环境是:

VMwareUbuntu10.10。

OK6410A版256M+2G的开发板。

主机系统:

XP。

Uboot:

飞凌提供的Uboot。

参考内核:

飞凌提供的Forlinx 的2.6.36.2内核

操作步骤 以下./ 均代表你的内核根目录

1、修改./Makefile191 ARCH     ?

=arm          //指定cpu类型,arm后面不要有空格,要不然编译是会提醒ARCH不能为一个目录

192 CROSS_COMPILE   ?

=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-      //指定交叉编译器的路径,按照你自己的进行指定路径

2、

先来说说nandflash的驱动涉及到的文件:

MTD通用nandflash驱动程序位置:

./drivers/mtd/nand/.nand_base.c

NANDFlash的platform设备信息:

./drivers/mtd/nand/s3c_nand.c

有了上面的依赖驱动依赖程序、接下来

修改./arch/arm/mach-s3c64xx/mach-smdk6410.c1) nandflash 驱动,修改方法

加载头文件    

[cpp]viewplaincopyprint?

1.#include              

2.#include           

3.#include          //这些头文件放在./arch/arm/plat-samsung/include/     下面  

#include

#include

#include//这些头文件放在./arch/arm/plat-samsung/include/下面

添加nand 结构体  

 

[cpp]viewplaincopyprint?

1.// add by acanoe first  

2.extern void s3c64xx_reserve_bootmem(void);  //add by acanoe  

3.  

4.  

5.struct mtd_partition ok6410_nand_part[] = {  

6.    {  

7.        .name       = "Bootloader",  

8.        .offset     = 0,  

9.        .size       = (1 * SZ_1M),  

10.        .mask_flags = MTD_CAP_NANDFLASH,  

11.    },  

12.    {  

13.        .name       = "Kernel",  

14.        .offset     = (1 * SZ_1M),  

15.        .size       = (5*SZ_1M) ,  

16.        .mask_flags = MTD_CAP_NANDFLASH,  

17.    },  

18.    {  

19.        .name       = "User",  

20.        .offset     = (6 * SZ_1M),  

21.        .size       = (120*SZ_1M) ,  

22.    },  

23.    {  

24.        .name       = "File System",  

25.        .offset     = MTDPART_OFS_APPEND,  

26.        .size       = MTDPART_SIZ_FULL,  

27.    }  

28.};  

29.  

30.  

31.static struct s3c2410_nand_set ok6410_nand_sets[] = {  

32.    [0] = {  

33.        .name       = "nand",  

34.        .nr_chips   = 1,  

35.        .nr_partitions  = ARRAY_SIZE(ok6410_nand_part),  

36.        .partitions = ok6410_nand_part,  

37.    },  

38.};  

39.  

40.  

41.static struct s3c2410_platform_nand ok6410_nand_info = {  

42.    .tacls      = 25,  

43.    .twrph0     = 55,  

44.    .twrph1     = 40,  

45.    .nr_sets    = ARRAY_SIZE(ok6410_nand_sets),  

46.    .sets       = ok6410_nand_sets,  

47.};  

48.//add by acanoe first  

//addbyacanoefirst

externvoids3c64xx_reserve_bootmem(void);//addbyacanoe

 

structmtd_partitionok6410_nand_part[]={

{

.name="Bootloader",

.offset=0,

.size=(1*SZ_1M),

.mask_flags=MTD_CAP_NANDFLASH,

},

{

.name="Kernel",

.offset=(1*SZ_1M),

.size=(5*SZ_1M),

.mask_flags=MTD_CAP_NANDFLASH,

},

{

.name="User",

.offset=(6*SZ_1M),

.size=(120*SZ_1M),

},

{

.name="FileSystem",

.offset=MTDPART_OFS_APPEND,

.size=MTDPART_SIZ_FULL,

}

};

 

staticstructs3c2410_nand_setok6410_nand_sets[]={

[0]={

.name="nand",

.nr_chips=1,

.nr_partitions=ARRAY_SIZE(ok6410_nand_part),

.partitions=ok6410_nand_part,

},

};

 

staticstructs3c2410_platform_nandok6410_nand_info={

.tacls=25,

.twrph0=55,

.twrph1=40,

.nr_sets=ARRAY_SIZE(ok6410_nand_sets),

.sets=ok6410_nand_sets,

};

//addbyacanoefirst

修改 smdk6410_devices[]__initdata={

对照这个结构体 将那些进行修改,注意 by acanoe 的语句为修改重点。

[cpp]viewplaincopyprint?

1.static struct platform_device *smdk6410_devices[] __initdata = {  

2.//#ifdef CONFIG_SMDK6410_SD_CH0     //Canceled by acanoe  

3.    &s3c_device_hsmmc0,  

4.//#endif                //Canceled by acanoe  

5.//#ifdef CONFIG_SMDK6410_SD_CH1     //Canceled by acanoe  

6.    &s3c_device_hsmmc1,  

7.//#endif                //Canceled by acanoe  

8.    &s3c_device_i2c0,  

9.//  &s3c_device_i2c1,       //Canceled by acanoe  

10.    &s3c_device_fb,  

11.    &s3c_device_ohci,  

12.    &s3c_device_usb_hsotg,  

13.//  &s3c64xx_device_iisv4,      //Canceled by acanoe  

14.//  &samsung_device_keypad,     //Canceled by acanoe  

15.// add by acanoe 2  

16.    &s3c_device_nand,  

17.  

18.  

19.#ifdef CONFIG_DM9000  

20.    &s3c_device_dm9000,  

21.#endif  

22.// add by acanoe 2  

23.  

24.  

25.  

26.  

27.#ifdef CONFIG_REGULATOR  

28.    &smdk6410_b_pwr_5v,  

29.#endif  

30.    &smdk6410_lcd_powerdev,  

31.  

32.  

33.//  &smdk6410_smsc911x,     // Canceled by acanoe  

34.    &s3c_device_adc,  

35.//  &s3c_device_cfcon,      // Canceled by acanoe  

36.    &s3c_device_rtc,  

37.//  &s3c_device_ts,         // Canceled by acanoe  

38.//  &s3c_device_wdt,  

39.};  

staticstructplatform_device*smdk6410_devices[]__initdata={

//#ifdefCONFIG_SMDK6410_SD_CH0//Canceledbyacanoe

&s3c_device_hsmmc0,

//#endif//Canceledbyacanoe

//#ifdefCONFIG_SMDK6410_SD_CH1//Canceledbyacanoe

&s3c_device_hsmmc1,

//#endif//Canceledbyacanoe

&s3c_device_i2c0,

//&s3c_device_i2c1,//Canceledbyacanoe

&s3c_device_fb,

&s3c_device_ohci,

&s3c_device_usb_hsotg,

//&s3c64xx_device_iisv4,//Canceledbyacanoe

//&samsung_device_keypad,//Canceledbyacanoe

//addbyacanoe2

&s3c_device_nand,

 

#ifdefCONFIG_DM9000

&s3c_device_dm9000,

#endif

//addbyacanoe2

 

#ifdefCONFIG_REGULATOR

&smdk6410_b_pwr_5v,

#endif

&smdk6410_lcd_powerdev,

 

//&smdk6410_smsc911x,//Canceledbyacanoe

&s3c_device_adc,

//&s3c_device_cfcon,//Canceledbyacanoe

&s3c_device_rtc,

//&s3c_device_ts,//Canceledbyacanoe

//&s3c_device_wdt,

};

对照这个结构体 将那些进行修改,注意 by acanoe 的语句为修改重点。

//addbyacanoe2

&s3c_device_nand,//这一语句为添加nand 设备语句

#ifdefCONFIG_DM9000

&s3c_device_dm9000,      //addbyacanoe

#endif

//&smdk6410_smsc911x,//Canceledbyacanoe 

在smdk6410_machine_init() 

//在smdk6410_machine_init()结构体中加上

//addbyacanoe

s3c_nand_set_platdata(&ok6410_nand_info);

//addbyacanoe

3、copy./include     copy./.config         copy./arch/arm/plat-samsung/include

这三项都是指:

从飞凌提供的内核将他们的include库拷贝的你的内核当中 ,拿来主义。

这样做的有点是你可以只先学习驱动移植,和系统移植的方法,而不是其语句的实现。

确定也是优点的相对。

在这里极有可能会因为你include 的更新而产生一些写的错误 如在飞凌自定义的 _ts_中也就是触摸屏的去的是他们自己修改的。

可能会因此报错,解决办法,就是Canceled掉 所有的有关触摸屏的驱动,都注释掉。

其实到这里,如果内不是要NFS 挂载根文件系统的话,内核移植工作已经完成。

不过这只针对飞凌的开发板来说,如果你是其他厂家的开发板,在下面的几个知识点,不得不提及一下:

3.1)给内核打上yaffs2文件系统补丁,在这里尽量选用较新的补丁,因为旧版补丁,在编译的时候会报错,

下载连接http:

//www.aleph1.co.uk/gitweb?

p=yaffs2.git;a=summary,直接点击,点那个2011年6月28号的那个版本,点击最右边的SNAPSHOT下载,这个是目前较新的的YAFFS2的源码了

3.2)修改机器号,这一步飞凌的开发板并不用操作,因为飞凌的Uboot和内核都默认使用smdk6410,的ID来进行参数传递(典型的修改注意)。

机器号修改依赖文件目录:

uboot-2011.3机器码路径:

arch/arm/include/asm/mach-types.h

飞凌体统的Uboot为旧版的Uboot它的机器码定义路径为:

include/asm-arm/mach-types.h 

其中smdk6410的自己码被定义在 include/configs/smdk6410.h 定义为

#defineMACH_TYPE1626

2.6.36.2内核机器码定义路径为 arch/arm/tools/mach-types

smdky410  MACH_SMDK6410    SMDK6410      1626

以上U-boot和内核ID信息都属于smdk6410板载默认信息不用修改。

3.3)配置内核,make menuconfig

因为直接copy飞凌源码的.config文件到自己的根目录,所以配置起来比较简单。

只要注意nandflash 驱动是否被选中即可:

DeviceDrivers--->  

  <*>MemoryTechologyDevice(MTD)support --->

      <*>NANDDeviceSupport--->

           <*>NANDFlashsupportforS3CSoC 

二、加载dm9000驱动。

4、加载dm9000驱动,我自己更加喜欢NFS挂载根文件系统所以内核要移植dm9000网卡的驱动。

copy drivers/net/dm9000       //copy飞凌源码到目标内核,其实这一步可以不做,因为dm9000驱动为通用驱动,这里copy也是没有必要。

4.1)修改arch/arm/mach-s3c6410/mach-smdk6410.c

添加头文件#incude

添加dm9000结构体。

[cpp]viewplaincopyprint?

1.//add by acanoe dm9000  

2./* Ethernet */  

3.#define S3C64XX_PA_DM9000   (0x18000000)  

4.#define S3C64XX_SZ_DM9000   SZ_1M  

5.#define S3C64XX_VA_DM9000   S3C_ADDR(0x03b00300)  

6.  

7.  

8.static struct resource dm9000_resources[] = {  

9.    [0] = {  

10.        .start      = S3C64XX_PA_DM9000,  

11.        .end        = S3C64XX_PA_DM9000 + 3,  

12.        .flags      = IORESOURCE_MEM,  

13.    },  

14.    [1] = {  

15.        .start      = S3C64XX_PA_DM9000 + 4,  

16.        .end        = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1,  

17.        .flags      = IORESOURCE_MEM,  

18.    },  

19.    [2] = {  

20.        .start      = IRQ_EINT(7),  

21.        .end        = IRQ_EINT(7),  

22.        .flags      = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,  

23.    },  

24.};  

25.  

26.  

27.static struct dm9000_plat_data dm9000_setup = {  

28.    .flags          = DM9000_PLATF_16BITONLY,  

29.    .dev_addr       = { 0x08, 0x90, 0x00, 0xa0, 0x90, 0x90 },  

30.};  

31.  

32.  

33.static struct platform_device s3c_device_dm9000 = {  

34.    .name           = "dm9000",  

35.    .id             = 0,  

36.    .num_resources  = ARRAY_SIZE(dm9000_resources),  

37.    .resource       = dm9000_resources,  

38.    .dev            = {  

39.        .platform_data = &dm9000_setup,  

40.    }  

41.};  

42.//#ifdef CONFIG_DM9000  

43.//add by acanoe dm9000  

//addbyacanoedm9000

/*Ethernet*/

#defineS3C64XX_PA_DM9000(0x18000000)

#defineS3C64XX_SZ_DM9000SZ_1M

#defineS3C64XX_VA_DM9000S3C_ADDR(0x03b00300)

 

staticstructresourcedm9000_resources[]={

[0]={

.start=S

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2