- 1
- 0
- 约5.63千字
- 约 8页
- 2026-02-07 发布于北京
- 举报
PCI网卡驱动程序分析
(国嵌)
1.概述
该分析报告针对GNIC-II的千兆以太网卡,源程序
文件:drivers/net/hamachi.c,由于该分析报告旨在
对介绍PCI驱动程序结构,所以程序中关于硬件操作
的具体部分不作介绍。
2.初始化
staticint__inithamachi_init(void)
{
if(pci_register_driver(hamachi_driver)0)
return0;
pci_unregister_driver(hamachi_driver);
return-ENODEV;
}
在模块初始化时采用pci_register_driverpci驱动程
序。
staticstructpci_driverhamachi_driver={
name:DRV_NAME,
id_table:hamachi_pci_tbl,
probe:hamachi_init_one,
remove:
__devexit_p(hamachi_remove_one),
};
staticstructpci_device_idhamachi_pci_tbl[]__initdata=
{
{0x1318,0x0911,PCI_ANY_ID,PCI_ANY_ID,},
}
该表记录的是该驱动能够支持的PCI设备,分别是厂商
号,设备号,子厂商号,子设备号,其中子厂商号,子设
备号为PCI_ANY_ID,表示支持各类型。该表到底有
什么实际用处?(通过分析函数pci_register_driver得出
结论)
probe:hamachi_init_one(该函数的调用时机可通过分析
pci_register_driver得出)
staticint__inithamachi_init_one(structpci_dev*pdev,
conststructpci_device_id*ent)
{
/*使能PCI设备*/
if(pci_enable_device(pdev)){
ret=-EIO;
gotoerr_out;
}
/*获取址*/
ioaddr=pci_resource_start(pdev,0);
/*申请将要使用的地址空间*/
i=pci_request_regions(pdev,DRV_NAME);
if(i)returni;
/*获取中断号*/
irq=pdev-irq;
/*思考为什么这里要使用ioremap?*/
ioaddr=(long)ioremap(ioaddr,0x400);
if(!ioaddr)
gotoerr_out_release;
dev=alloc_etherdev(sizeof(structhamachi_private));
if(!dev)
gotoerr_out_iounmap;
SET_MODULE_OWNE
您可能关注的文档
最近下载
- 2024年新疆维吾尔自治区中考数学真题卷(含答案与解析).pdf VIP
- 市城市建设投资集团有限公司 “十五五” 中长期发展规划.pdf
- 流感防治知识讲座PPT课件.pptx
- 1皖江江南新兴产业集中区低碳产业园基础设施建设工程项目实施方案 (2).pdf VIP
- 必修一《中国特色社会主义》综合测试卷(一)(解析版)(高中政治).docx VIP
- 2026年高考政治复习难题速递之订约履约 诚信为本(2025年11月).docx VIP
- 尼帕病毒病预防控制技术指南.pptx VIP
- 画作泡水损失鉴定【推荐】.docx VIP
- 第三课 订约履约 诚信为本 2024高考政治一轮复习.pptx VIP
- A2O2工艺处理焦化废水.pdf VIP
原创力文档

文档评论(0)