- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Network Driver in Linux 2.4.ppt
Network Driver in Linux 2.4 潘仁義 CCU COMM Overview Outline Driver framework Linux network drivers Device operation RTL8139 programming Driver example A piece of code for 93C46 series EEPROM, 93C46 64 x 16 bits, 93C66 256 x 16 bits pci_skeleton.c (for RTL8139) Linux network driver frameworkConnecting to the Kernel (1/2) Module_loading struct net_device snull_dev = { init : snull_init, }; //初始化函式 if((result = register_netdev(snull_dev)))) printk(“error”); 呼叫前, 先設定name 為“eth%d”, 以便其配置 “ethX” 函式內部會呼叫 dev?init() snull_init( ) Probe function Called when register_netdev() Usually avoid registering I/O and IRQ, delay until dev?open() time To fill in the “dev” strcuture ether_setup(dev) 設定私有資料結構 “priv”; 網路介面生命期與系統一樣長, 可放統計資料 Module_unloading kfree(priv); unregister_netdev (snull_dev); Linux network driver frameworkConnecting to the Kernel (2/2) struct net_device { char name[IFNAMSIZ]; // eth%d unsigned long base_addr, unsigned char irq; unsigned char broadcast[], dev_addr[MAX_ADDR_LEN]; unsigned short flags; // IFF_UP, IFF_PROMISC, IFF_ALLMULTI Function pointers: (*init) 初始化 (*open) 開啟介面 (*stop) 停用介面 (*do_ioctl)() (*tx_timeout) 逾時處理 (*get_stats) 結算統計資訊 (*hard_start_xmit) 送出封包 (*set_multicast_list) 群播及flag變動處理 unsigned long trans_start, last_rx; // for watchdog and power management struct dev_mc_list *mc_list; // multicast address list Linux network driver frameworkOpening and closing 在介面傳輸封包之前,必須先以ifconfig開啟介面,並賦予IP位址 ifconfig設定IP位址給介面時: ioctl(SIOCSIFADDR)?設定軟體位址給介面 Ioctl(SIOCSIFILAGS)?要求驅動程式開啟、關閉介面?觸動open及stop open() 設法取得必要的系統資源(佔領IRQ, IObase, buffer) 要求介面硬體起動 讀出MAC, 複製到 dev?dev_addr (也可作在init或probe時) 將dev?dev_addr設定至介面MAC暫存器中 stop() 停止介面硬體 歸還系統資源 Linux network driver framework Packet transmission: 當核心需要送出資料封包時 將資料排入出境封包佇列(outgoing queue) 呼叫作業方法 hard_start_transmit(struct sk_buff *skb, struct net_device *dev) 僅將封包交付網卡。網卡後續會再將封包傳送至網路(例如RTL8139) Spinlock_t xmit_lock; 只有在返回後才有可能再被呼叫 實務上,於返回之後,網路卡仍忙著傳輸剛交付的封包。 網卡緩衝區小,滿了必須讓核心知道,不接收新的傳輸要求。netif_stop_queue()與netif_wake_qu
您可能关注的文档
- Intel Settles Antitrust AMD Case for $1.2bn.ppt
- Internet2.ppt
- Introduction of Simulation by GEANT4.ppt
- Introduction to IEEE.ppt
- IP Addresses.ppt
- IVUS指导急性心肌梗死介入治疗.ppt
- Jamie BakerSr. Escalation Engineer.ppt
- Jan 31, 2012.ppt
- Java 1.5 New Features.ppt
- Java Script -3.ppt
- Network Layer.ppt
- Neural Networks(类神经网路概论) BY 胡兴民老师.ppt
- NIC-based intrusion detectionA feasibility study.ppt
- No.8 Middle School, Anxi.ppt
- Nosocomial infections.ppt
- Objective C语言.ppt
- ObjectivesThe student will be able to.ppt
- Open Your Eyes Free Your Mind.ppt
- OpenGL图形函数库.ppt
- Operational definitions and latent variables.ppt
最近下载
- 网络拓扑规划.ppt VIP
- 750工程保护帽及接地引下线施工工艺要求.doc VIP
- 浙江省台州市住在室内装修施工合同.doc VIP
- 体例格式11:工学一体化课程《信息网络布线》教学进度计划表.docx VIP
- 2022-2023学年广东省广州五校联考高一(下)期末数学试卷.pdf VIP
- 技术协议 -煤场全封闭改造项目EPC总承包技术协议书1219.doc VIP
- 2020-9_新高考信息化解决方案.pptx VIP
- 2024版煤矿安全生产标准化管理体系--通风部分解读.pptx VIP
- 医院物价培训ppt课件.pptx
- 人教版八年级数学上学期《三角形》基础专项训练(解析版).pdf VIP
文档评论(0)