资源简介
linux网络设备驱动示例代码,linux网络设备驱动示例代码,linux网络设备驱动示例代码,自己编写的代码,欢迎下载。。
代码片段和文件信息
#include
#include
#include
#include
#include
struct net_device * gec_dev;
char dev_addr[6];
static int gecnet_init(struct net_device *dev)
{
printk(KERN_INFO “gec_net_init \n“);
return 0;
}
static void gecnet_uninit(struct net_device *dev)
{
printk(KERN_INFO “gecnet_uninit \n“);
}
static int gecnet_open(struct net_device *dev)
{
netif_start_queue(dev);
printk(KERN_INFO “gecnet_open \n“);
return 0;
}
static int gecnet_stop(struct net_device *dev)
{
netif_stop_queue(dev);
printk(KERN_INFO “gecnet_stop \n“);
return 0;
}
static netdev_tx_t gecnet_start_xmit(struct sk_buff *skbstruct net_device *dev)
{
printk(KERN_INFO “gecnet_start_xmit \n“);
//hw_net_write(skb->dataskb->lenoffset);//将数据写入硬件寄存器
dev->stats.tx_bytes += skb->len;//更新状态数据
/* free this SKB */
dev_kfree_skb(skb); //释放sk_buff空间
return NETDEV_TX_OK;
}
static int gec_net_rx(struct net_device *dev)
{
struct sk_buff *skb;
int RxLen = 10;
char *data;
//获取芯片本次收包的长度
//get_pgk_len(&RxLen);
skb = dev_alloc_skb(RxLen + 4);
skb_reserve(skb 2);
//data 为硬件接受到的数据地址
memcpy(skb_put(skb RxLen - 4)dataRxLen);
dev->stats.rx_bytes += RxLen;
dev->stats.rx_packets++;
/* Pass to upper layer */
skb->protocol = eth_type_trans(skb dev);
skb->ip_summed = CHECKSUM_UNNECESSARY;
//递交数据包
netif_rx(skb);
}
struct net_device_ops gec_netops ={
.ndo_init = gecnet_init
.ndo_uninit = gecnet_uninit
.ndo_open = gecnet_open
.ndo_stop = gecnet_stop
.ndo_start_xmit = gecnet_start_xmit
};
static int __init gec_net_init(void)
{
int reti;
gec_dev = alloc_etherdev(sizeof(struct net_device));
ether_setup(gec_dev);
gec_dev->stats.rx_packets = 0;
gec_dev->stats.tx_packets = 0;
gec_dev->stats.rx_bytes = 10;
gec_dev->stats.tx_bytes = 10;
gec_dev->netdev_ops = &gec_netops;
gec_dev->ml_priv = &gec_netops;
for(i=0;i<6;i++)
dev_addr[i] = 0x33;
gec_dev->dev_addr = dev_addr;
sprintf(gec_dev->name“gec_net%d“0);
ret = register_netdev(gec_dev);
if(ret)
goto err1;
return 0;
err1:
printk(KERN_ERR “register_netdev err!\n“);
return -ENODEV;
}
static void __exit gec_net_exit(void)
{
unregister_netdev(gec_dev);
free_netdev(gec_dev);
}
module_init(gec_net_init);
module_exit(gec_net_exit);
MODULE_LICENSE(“GPL“);
MODULE_AUTHOR(“GEC“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-08-10 23:24 net\
文件 168 2013-07-26 11:44 net\.built-in.o.cmd
文件 287 2013-07-26 17:20 net\.gec_net.ko.cmd
文件 17632 2013-07-26 11:44 net\.gec_net.mod.o.cmd
文件 31887 2013-07-26 17:20 net\.gec_net.o.cmd
目录 0 2013-07-26 15:18 net\.tmp_versions\
文件 61 2013-07-26 17:20 net\.tmp_versions\gec_net.mod
文件 8 2013-07-26 11:44 net\built-in.o
文件 2568 2013-08-10 23:20 net\gec_net.c
文件 114575 2013-07-26 17:20 net\gec_net.ko
文件 444 2013-07-26 11:44 net\gec_net.mod.c
文件 12856 2013-07-26 11:44 net\gec_net.mod.o
文件 102864 2013-07-26 17:20 net\gec_net.o
文件 617 2011-09-08 00:38 net\Makefile
文件 0 2013-07-26 11:44 net\Module.symvers
文件 38 2013-07-26 17:20 net\modules.order
文件 9993 2011-09-08 00:27 net\net.c
- 上一篇:S5PV210按键控制LED
- 下一篇:wm8960 音频播放
相关资源
- 各种网络协议源代码实现
- Linux Wi-Fi open source drivers-mac80211 ath9k
- Linux Device Driver 中文版第三版
- 计算机网络课后习题答案
- EXCEL神经网络插件
- IPv6下网络攻击的研究与实现
- 理发师问题Linux,c
- onvif设备发现+鉴权认证+RTSP地址获取
- 网络扫描实验
- QT网络调试助手
- linux下cp2101/2102驱动
- 小波神经网络进行短期电力负荷预测
- kali linux 2019最新镜像包.txt
- 动态差分进化算法训练神经网络逼近
- 计算机网络体系结构
- 网络规划设计师.xmind
- 中小型网络工程设计与实践计算机网
- 实战Linux编程精髓源代码
- 计算机网络第五版最新版百度云,永
- linux下中断处理程序,含驱动和应用程
- Qt写的天气预报
- 片上网络NOC基本架构
- 计算机网络课程设计 计算校验和
- SLE-12-SP1-Server-DVD-x86_64-GM-DVD1
- qt TCP网络编程与聊天室的实现
- SLES 11 SP4 x86_64
- 01 [基础] 鸟哥私房菜 - 经典Linux零基础
- 用于jz2440的dht11驱动
- 信息安全技术 关键信息基础设施网络
- 全套linux运维教程
评论
共有 条评论