官网有写好的驱动文件,可以下载下来进行修改,但是有些地方不一样现在找出来
从soc的手册上面我们找到,片选引脚(nGCS4),和中断引脚(INT)
设置片选
通过在soc的datasheet里面 的 memory controller 找到当cpu发出的地址 在0x2000000到0x28000000 可以选中片选
所以也要把地址映射到0x20000000上面
设置中断
接到了cpu的外部中断7
我们在入口函数里面设置中断号,并且设置为上升沿触发
在open函数里面使用终端中断
设置地址脉冲,读写信号的时序
由于cpu是连接着soc上面的memory controller 通过memory controller 控制网卡
所以要对 nCE,nWE 进行时序的控制
从data0~data15 所以位宽是16位的 从电路图上面没接等待新号
从网卡手册上面找到时序手册,和最小最大时间参数
从2440的SOC里面找到memory controller 对应的时间参数
在soc的手册里找到寄存器的设置
我们需要设置Tacs,Tcos,Tacc,Tcoh,Tcah,Tacp,PMC 这些参数
设置Tacs
因为从图上看 CS#CMD 说明片选信号和控制信号可以同时发出 Tacs= 0
设置Tcos
当片选过后多久才能发出读信号 最小值可以取0
设置Tacc
旁边还有一个tacp 是搞什么页什么的 就不搞了
地址访问周期 我们的HCLK是100MHz 所以一个周期是10ns
时序图上面最小值是10ns 所以我们取一个周期
设置Tooh
读写信号之后,还要维持多长时间
最大值3ns 所以一个周期肯定行
设置Tcah
取消片选信号之后 地址还要维持多长间
最后完成设置
在代码中映射这两个地址
开始测试新驱动
由于不能通过网络文件insmod 驱动 我们直接编译进内核
修改原来的驱动名字 把自己的驱动移到内核里
修改makefile
在编译选项中增加自己的编译选项 去掉自带的网卡驱动
开始内核的编译
重新刷上内核 发现 完美