欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:13793213       资源大小:27.57KB        全文页数:39页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、DM9000驱动移植详解及问题点OK6410、2.6.36内核移植,dm9000 驱动移植,详细! 分类: 嵌入式学习 Linux学习 2012-04-27 00:54 3004人阅读 评论(7) 收藏 举报 interfaceccompressionresourcesstructtable 还是先来吐槽: 本来我是在上一个星期的周末已经把 Linux2.6.34.11 的驱动已经成功的移植到, OK6410 的开发板上的,并且能够启动主机上的NFS 根文件系统, 可是我在周一的时候,开始学习LCD 的驱动程序, 在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11 的内核源

    2、码 搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释, 并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34 的内核, 所以也就只能重新先开始最基础的内核移植了。 这次我选择的是2.6.36.2 的内核, 谁知到一开始移植就出现一大堆问题。在这里我不得不说,飞凌开发人员对内核修改的代码,管理真的是太扯了,自己在注销任何一个设备是没有一点点注释,就把这个设备原有的线性地址分配给其它设备了,让我让我们这些菜鸟干看着一大堆的报错信息顶个什么用, 真的是伤不起。好了不乱扯了,现在开始记录。我的开发环境是:VMware Ubuntu 10.10 。OK6410 A版 256M+2

    3、G 的开发板。 主机系统: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、先来说说nand flash 的驱动涉及到的文件:MTD 通用nand flash 驱动程序位置:.

    4、/drivers/mtd/nand/.nand_base.cNAND Flash 的 platform 设备信息: ./drivers/mtd/nand/s3c_nand.c有了上面的依赖驱动依赖程序 、接下来 修改./arch/arm/mach-s3c64xx/mach-smdk6410.c 1) nandflash 驱动,修改方法加载头文件 cpp view plaincopyprint?1. #include 2. #include 3. #include/这些头文件放在./arch/arm/plat-samsung/include/下面#include #include #includ

    5、e /这些头文件放在./arch/arm/plat-samsung/include/ 下面添加nand 结构体 cpp view plaincopyprint?1. /addbyacanoefirst 2. externvoids3c64xx_reserve_bootmem(void);/addbyacanoe 3. 4. 5. structmtd_partitionok6410_nand_part=6. 7. .name=Bootloader,8. .offset=0,9. .size=(1*SZ_1M),10. .mask_flags=MTD_CAP_NANDFLASH,11. ,12.

    6、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=FileSystem,25. .offset=MTDPART_OFS_APPEND,26. .size=MTDPART_SIZ_FULL,27. 28. ;29. 30. 31. staticstructs3c2410_nand_setok

    7、6410_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. staticstructs3c2410_platform_nandok6410_nand_info=42. .tacls=25,43. .twrph0=55,44. .twrph1=40,45. .nr_sets=ARRAY_SIZE(ok6410_nand_sets),46. .sets

    8、=ok6410_nand_sets,47. ;48. /addbyacanoefirst/ add by acanoe firstextern void s3c64xx_reserve_bootmem(void); /add by acanoestruct mtd_partition ok6410_nand_part = .name = Bootloader, .offset = 0, .size = (1 * SZ_1M), .mask_flags = MTD_CAP_NANDFLASH, , .name = Kernel, .offset = (1 * SZ_1M), .size = (5

    9、*SZ_1M) , .mask_flags = MTD_CAP_NANDFLASH, , .name = User, .offset = (6 * SZ_1M), .size = (120*SZ_1M) , , .name = File System, .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL, ;static struct s3c2410_nand_set ok6410_nand_sets = 0 = .name = nand, .nr_chips = 1, .nr_partitions = ARRAY_SIZE(ok641

    10、0_nand_part), .partitions = ok6410_nand_part, ,;static struct s3c2410_platform_nand ok6410_nand_info = .tacls = 25, .twrph0 = 55, .twrph1 = 40, .nr_sets = ARRAY_SIZE(ok6410_nand_sets), .sets = ok6410_nand_sets,;/add by acanoe first修改 smdk6410_devices _initdata = 对照这个结构体 将那些进行修改,注意 by acanoe 的语句为修改重点

    11、。cpp view plaincopyprint?1. staticstructplatform_device*smdk6410_devices_initdata=2. /#ifdefCONFIG_SMDK6410_SD_CH0/Canceledbyacanoe 3. &s3c_device_hsmmc0,4. /#endif/Canceledbyacanoe 5. /#ifdefCONFIG_SMDK6410_SD_CH1/Canceledbyacanoe 6. &s3c_device_hsmmc1,7. /#endif/Canceledbyacanoe 8. &s3c_device_i2c

    12、0,9. /&s3c_device_i2c1,/Canceledbyacanoe 10. &s3c_device_fb,11. &s3c_device_ohci,12. &s3c_device_usb_hsotg,13. /&s3c64xx_device_iisv4,/Canceledbyacanoe 14. /&samsung_device_keypad,/Canceledbyacanoe 15. /addbyacanoe2 16. &s3c_device_nand,17. 18. 19. #ifdefCONFIG_DM9000 20. &s3c_device_dm9000,21. #end

    13、if 22. /addbyacanoe2 23. 24. 25. 26. 27. #ifdefCONFIG_REGULATOR 28. &smdk6410_b_pwr_5v,29. #endif 30. &smdk6410_lcd_powerdev,31. 32. 33. /&smdk6410_smsc911x,/Canceledbyacanoe 34. &s3c_device_adc,35. /&s3c_device_cfcon,/Canceledbyacanoe 36. &s3c_device_rtc,37. /&s3c_device_ts,/Canceledbyacanoe 38. /&

    14、s3c_device_wdt, 39. ;static struct platform_device *smdk6410_devices _initdata = /#ifdef CONFIG_SMDK6410_SD_CH0 /Canceled by acanoe &s3c_device_hsmmc0,/#endif /Canceled by acanoe/#ifdef CONFIG_SMDK6410_SD_CH1 /Canceled by acanoe &s3c_device_hsmmc1,/#endif /Canceled by acanoe &s3c_device_i2c0,/ &s3c_

    15、device_i2c1, /Canceled by acanoe &s3c_device_fb, &s3c_device_ohci, &s3c_device_usb_hsotg,/ &s3c64xx_device_iisv4, /Canceled by acanoe/ &samsung_device_keypad, /Canceled by acanoe/ add by acanoe 2 &s3c_device_nand,#ifdef CONFIG_DM9000 &s3c_device_dm9000,#endif/ add by acanoe 2#ifdef CONFIG_REGULATOR

    16、&smdk6410_b_pwr_5v,#endif &smdk6410_lcd_powerdev,/ &smdk6410_smsc911x, / Canceled by acanoe &s3c_device_adc,/ &s3c_device_cfcon, / Canceled by acanoe &s3c_device_rtc,/ &s3c_device_ts, / Canceled by acanoe/ &s3c_device_wdt,;对照这个结构体 将那些进行修改,注意 by acanoe 的语句为修改重点。/ add by acanoe 2&s3c_device_nand, /这一语

    17、句为添加nand 设备语句#ifdef CONFIG_DM9000&s3c_device_dm9000, / add by acanoe#endif/ &smdk6410_smsc911x,/ Canceled by acanoe 在smdk6410_machine_init()/在smdk6410_machine_init() 结构体中加上/add by acanoes3c_nand_set_platdata(&ok6410_nand_info);/add by acanoe3、copy ./include copy ./.config copy ./arch/arm/plat-samsun

    18、g/include这三项都是指: 从飞凌提供的内核将 他们的include 库拷贝的你的内核当中 ,拿来主义。这样做的有点是你可以只先学习驱动移植 ,和系统移植的方法,而不是其语句的实现。确定也是优点的相对。在这里极有可能会因为你include 的更新而产生一些写的错误 如在飞凌自定义的 _ts_ 中也就是 触摸屏的去的是他们自己修改的。可能会因此报错,解决办法,就是Canceled 掉 所有的 有关触摸屏的驱动,都注释掉。其实到这里,如果内不是要NFS 挂载根文件系统的话,内核移植工作已经完成。不过这只针对飞凌的开发板来说, 如果你是其他厂家的开发板,在下面的几个知识点,不得不提及一下:3.

    19、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

    20、-types.h飞凌体统的Uboot为 旧版的Uboot 它的 机器码定义路径为:include/asm-arm/mach-types.h其中 smdk6410 的自己码被定义在 include/configs/smdk6410.h 定义为#define MACH_TYPE 16262.6.36.2 内核机器码定义路径为 arch/arm/tools/mach-typessmdky410 MACH_SMDK6410 SMDK6410 1626以上 U-boot 和 内核 ID 信息 都属于smdk6410 板载 默认信息不用修改。3.3) 配置内核, make menuconfig因为直接co

    21、py 飞凌源码的.config 文件到自己的根目录,所以配置起来比较简单。只要注意nand flash 驱动是否被选中即可:Device Drivers - Memory Techology Device (MTD) support - NAND Device Support - NAND Flash support for S3C SoC二 、 加载dm9000 驱动。4、加载dm9000驱动, 我自己更加喜欢NFS 挂载根文件系统 所以内核要移植dm9000 网卡的驱动。copy drivers/net/dm9000 /copy 飞凌源码 到目标内核, 其实这一步可以不做,因为 dm900

    22、0 驱动为通用驱动,这里copy 也是没有必要。4.1) 修改arch/arm/mach-s3c6410/mach-smdk6410.c添加头文件 #incude 添加dm9000 结构体。cpp view plaincopyprint?1. /addbyacanoedm9000 2. /*Ethernet*/3. #defineS3C64XX_PA_DM9000(0x18000000) 4. #defineS3C64XX_SZ_DM9000SZ_1M 5. #defineS3C64XX_VA_DM9000S3C_ADDR(0x03b00300) 6. 7. 8. staticstructre

    23、sourcedm9000_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=IORESOU

    24、RCE_IRQ|IRQF_TRIGGER_HIGH,23. ,24. ;25. 26. 27. staticstructdm9000_plat_datadm9000_setup=28. .flags=DM9000_PLATF_16BITONLY,29. .dev_addr=0x08,0x90,0x00,0xa0,0x90,0x90,30. ;31. 32. 33. staticstructplatform_devices3c_device_dm9000=34. .name=dm9000,35. .id=0,36. .num_resources=ARRAY_SIZE(dm9000_resourc

    25、es),37. .resource=dm9000_resources,38. .dev=39. .platform_data=&dm9000_setup,40. 41. ;42. /#ifdefCONFIG_DM9000 43. /addbyacanoedm9000/add by acanoe dm9000/* Ethernet */#define S3C64XX_PA_DM9000 (0x18000000)#define S3C64XX_SZ_DM9000 SZ_1M#define S3C64XX_VA_DM9000 S3C_ADDR(0x03b00300)static struct resource dm9000_resources = 0 = .start = S


    注意事项

    本文(DM9000驱动移植详解及问题点.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开