資源簡介
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 音頻播放
評論
共有 條評論