Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148825
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-03 11:03
个人简介

学习linux

文章分类
文章存档

2014年(7)

2013年(33)

我的朋友

分类: 嵌入式

2013-09-13 16:31:19

网卡DM9000的驱动也是和一般的底层驱动一样,仅实现一个数据结构net_device就可以了,这个结构包括了所有信息和操作的函数,所以注册
后上层就直接调用这个结构的函数。

1. 在板文件中加入板设备信息platform_device s3c_device_dm9000,注册即可。platform总线会找到对应驱动执行probe,这个探测函数主要就是映射网卡的物理地址到内核虚拟地址实现上面说的net_device,(注意:要注释&smdk6410_smsc911x,因为它也声明了一样的物理地址)。

2. 再就是配置内核,选上net后才会在drivers中有net_device的驱动选项,选择DM9000即可。

3. 再去net中选择需要支持的网络协议,如PPP,IP,TCP,SOCKET等等,就OK了。

下面是板文件中的配置:(其中CONFIG_DM9000是表示配置内核选择了DM9000驱动)

点击(此处)折叠或打开

  1. /* Ethernet */
  2. #ifdef CONFIG_DM9000
  3. #define S3C64XX_PA_DM9000    (0x18000000)
  4. #define S3C64XX_SZ_DM9000    SZ_1M
  5. #define S3C64XX_VA_DM9000    S3C_ADDR(0x03b00300)

  6. static struct resource dm9000_resources[] = {
  7.     [0] = {
  8.         .start        = S3C64XX_PA_DM9000,
  9.         .end        = S3C64XX_PA_DM9000 + 3,
  10.         .flags        = IORESOURCE_MEM,
  11.     },
  12.     [1] = {
  13.         .start        = S3C64XX_PA_DM9000 + 4,
  14.         .end        = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1,
  15.         .flags        = IORESOURCE_MEM,
  16.     },
  17.     [2] = {
  18.         .start        = IRQ_EINT(7),
  19.         .end        = IRQ_EINT(7),
  20.         .flags        = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
  21.     },
  22. };

  23. static struct dm9000_plat_data dm9000_setup = {
  24.     .flags            = DM9000_PLATF_16BITONLY,
  25.     .dev_addr        = { 0x08, 0x90, 0x00, 0xa0, 0x90, 0x90 },
  26. };

  27. static struct platform_device s3c_device_dm9000 = {
  28.     .name            = "dm9000",
  29.     .id                = 0,
  30.     .num_resources    = ARRAY_SIZE(dm9000_resources),
  31.     .resource        = dm9000_resources,
  32.     .dev            = {
  33.         .platform_data = &dm9000_setup,
  34.     }
  35. };
  36. #endif //#ifdef CONFIG_DM9000



阅读(1574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~