我的是cortex-a8 的 s5pc100 的板子。在网卡驱动中,为什么要映射dm9000 的寄存器到SMC ,一般外设都是通过I2C,SPI直接发送或者接收数据,或者直接接入对应的GPIO口,这里为什么需要映射一下 ?
/* *By Neil Chiao ( [email=neilchiao@163.com]neilchiao at gmail.com[/email] ) *转载请注明出处: neilengineer.cublog.cn *本文部分内容来自网络 */ 1、Linux网络设备驱动的体系结构 Linux网络驱动程序的体系结构可划分为4个层次。Linux内核源代码中提供了网络设备接口及以上层次的代码,因此移植特定网络硬件的驱动程序的主要工作就是完成设备驱动功能层的相应代码,根据底层具体的硬件特性,定义网络设备接口struct n...
本文选自:http://blog.csdn.net/baozhongchao/article/details/4538182
最近在研究网卡驱动,刚好内核有完整的dm9000的网卡驱动,但是我想把dm9000源码单独拿出来,进行编译成模块,然后进行通讯,不知道有没有童靴做个,指导一二,感激不尽
最近一个星期在学习Linux dm9000驱动程序的编写,遇到了如下两个问题,希望前辈们指导我一下,在此谢谢了!!! 问题一:在dm9000的探测函数 dm9000_probe 里有一个宏 SET_NETDEV_DEV(ndev, &pdev->dev); 不知道这个宏起到了什么作用??? 我在网上查资料说这个宏起到了生成sys链接的作用,但是我将这个宏注释掉后再编译进内核,发现一样可以生成sys链接。 问题二:对于设置dm9000组播(多播)地址的函数 dm9000_h...
1.1.1 步骤四:分析dm9000的网卡驱动程序 驱动程序共包含三个文件dm9000x.c ,dm9000.c 和dm9000.h,都存放在drivers/net/目录下,其中dm9000x.c 主要包括以下函数: 底层硬件操作函数:这些函数与硬件相关,与驱动程序编写相关不大。 void outb(unsigned char value, unsigned long addr) void outw(unsigned short value, unsigned long addr) unsigned char inb(unsigned long addr...
第一步:在arm/arm/mach-s3c2410/devs.c 文件中添加如下代码 //----------------------------------------------------------- static struct resource s3c_dm9000_resource[] = { [0] = { .start = 0x08000000 + 0x300, .end = 0x08000000 + 0x300 + 0x03, .flags = IORESOURCE_MEM }, [1] = { .start = 0x08000000 + 0x300 + 0x04, .end...
情况如下: 1.在同样的硬件上使用开发商提供的2.4内核,以及2.4内核下dm9000的驱动都没问题。一切正常。 2.自己使用内核版本2.6.14.1 3.dm9000驱动移植后,使用ping命令,ping宿主机,掉包现象严重,为50%左右。 现在困惑如下: 1.一开始怀疑是硬件问题,可是用开发商提供的软件包就一切正常。。。。。 2.怀疑是2.6内核下驱动编写问题,可是ping命令也可以ping 通一些,只是掉包严重,这个算什么?中断申请的问题?但如果中断申请...
我用linux-2.6.22.2内核 移植了网卡驱动 显示如下信息, 帮我看下我的网卡驱动移植成功没有? 如果成功了为什么我无法NFS, 是不是MAC地址未修改的原因? Uncompressing Linux............................................................. ...................................... done, booting the kernel. Linux version 2.6.22.2 (root@hong) (gcc version 3.4.1) #2 Tue Mar 24 23:08:50 CS T 2009 CPU: ARM920T [41129...
int mii_link_ok (struct mii_if_info *mii) { /* first, a dummy read, needed to latch some MII phys */ mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS) { return 1; pr_info("AAAAAA"); //自己添加的输出信息,为了检验程序是否运行到这里 } return 0; } 用ifconfig eth0 up命令时,并没有打印AAAAA的信息...