接收函数的实现

接收函数主要完成几个方面的工作:一是检查接收到的数据包是否正确;二是根据数据包长度在内核空间为数据包申请一个sk_buff;三是把数据包复制到sk_buff,填写相关域段和统计信息并且把sk_buff插入相应的输入队列;四是释放数据包占用的芯片bufffer。下面就结合代码片段讲述其功能实现。
static void DM9000_rcv(struct net_device *dev)
{
    struct DM9000_local *lp = (struct DM9000_local *)dev->priv;
    int packet_number;
    word status;
    word packet_length;}
变量定义部分:
status = inw( DATA_REG );
packet_length = inw( DATA_REG );
设置指针位置,读取状态和数据包长度信息:
packet_length &= 0x07ff;
if ( !(status & RS_ERRORS ) ){
    struct sk_buff* skb;
    byte * data;
    skb = dev_alloc_skb( packet_length );
    if ( skb == NULL ) {
        printk(KERN_NOTICE "%s: Low memory, packet dropped./n",
        dev->name);
        lp->stats.rx_dropped++;
        goto done;
    }
    skb_reserve( skb, 2 );
    skb->dev = dev;
    insw( DATA_REG , data, packet_length >> 1);
    skb->protocol = eth_type_trans(skb, dev );
    netif_rx(skb);
    lp->stats.rx_packets++;
}
    如果数据包接收正确,申请sk_buff空间,把数据复制到skb。insw为宏指令,完成数据从芯片buffer到data起头内存的复制。eth_type_trans(skb,dev)是内核函数,用于从以太网数据包中提取网络协议内容,并把它放到skb结构的相应位置。netif_rx(skb)也是内核函数,作用是根据skb的信息把它插入相应的输入队列。
数据包接收错误的处理:
outw( MC_RELEASE, MMU_CMD_REG );
    传输命令给芯片,释放已处理的接收数据包占用的buffer。

——以上内容选自《ARM嵌入式Linux系统开发技术详解》一书


【书名】ARM嵌入式Linux系统开发技术详解
【作者】杨水清  张 剑  施云飞  等编著
【ISBN】978-7-121-07469-1
【出版社】电子工业出版社
【出版日期】2008年11月
【宣传语】
    继《Windows驱动开发技术详解》之后又一本心血力作!
    原创经典,嵌入式系统一线工程师倾力打造。
    深入Linux系统底层和内核,透析ARM嵌入式Linux系统开发的本质。
    通过嵌入式系统开发实例,归纳ARM嵌入式Linux系统开发的整个过程。
【内容简介】
    本书由浅入深、通俗易懂地讲解了嵌入式Linux的系统设计与 开发。全书共25章,从嵌入式处理器ARM开始,讲解了ARM处理器的资源、ARM的指令集、ADS开发工具、嵌入式系统硬件环境的构建、Boot Loader、Linux内核移植、嵌入式文件系统、嵌入式Linux多任务程序开发、嵌入式Linux设备驱动开发、嵌入式Linux网络程序开发、 MiniGUI图形界面开发、设备驱动开发案例、综合案例等内容。书中通过大量的例程来讲解知识要点,并提供了大量极有参考价值的开发案例,读者可以通过 这些例程和开发案例对嵌入式Linux开发有一个系统的学习和提高。
本 书共有四个方面的内容。在嵌入式系统的硬件结构中讲述了嵌入式处理器ARM的特点、嵌入式系统硬件环境的构建和ADS开发工具的使用。在嵌入式Linux 系统移植中讲述了目标板软件环境的构建,主要包括Boot Loader、Linux内核、文件系统以及交叉开发环境的构建。在嵌入式Linux软件开发中讲述了嵌入式Linux C语言开发工具的使用、标准库的使用、多任务开发基础和设备驱动开发基础。在嵌入式应用系统实例分析中讲述了嵌入式Linux的网络程序开发、 MiniGUI图形界面开发、CAN总线设备驱动设计、DM9000网络驱动设计、SD卡驱动设计和嵌入式B超系统设计。

本书语言通俗易懂,内容丰富,注重理解与实例,知识涵盖面广。非常适合从事嵌入式Linux系统开发的初级工程师、高校学生、Linux程序开发人员阅读和学习。

ARM嵌入式系统开发之接收函数的实现相关推荐

  1. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件

    本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件.     首先来说下硬件,书中说,包含有 ...

  2. 嵌入式:ARM嵌入式系统开发流程概述

    文章目录 嵌入式开发的具体过程 开发流程图 嵌入式软件开发环境 交叉开发环境 远程调试结构图 嵌入式应用软件开发的基本流程 软件模拟环境 目标板与评估板 嵌入式软件开发的可移植性和可重用性 嵌入式开发 ...

  3. [ARM嵌入式系统开发]第一章之Dhrystone

    在书的第一章开头部分,作者提到了"最成功的ARM内核之一ARM7TDMI,具有最高120 Dhrystone MIPS的性能.高的代码密度和低功耗等特性,使它成为移动嵌入式设备的最佳选择&q ...

  4. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础

    注:本文资料全部来源于网络或书籍,同时加上个人理解.若有侵权,告知即删.若有错误,留言商讨. 1.寄存器: 总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和 ...

  5. ARM 嵌入式系统开发 - 软件设计与优化

    ARM 的非 RISC 特征 允许特定指令的执行周期可变 增加桶形移位器 使用 16 位 Thumb 指令 使用条件执行指令 使用增强 DSP 指令 Jazelle Jazelle 是ARM 引进的第 ...

  6. arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

    背景介绍 在日益信息化的社会中,各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落.嵌入式系统的功能越来越复杂,这就使得一个嵌入式系统产品从市场需求立项到方案选择.样机研制.定型量产所需要的开发费 ...

  7. python嵌入式系统开发_Python在开发实时嵌入式系统中的作用

    原标题:Python在开发实时嵌入式系统中的作用 在过去的几年里,Python已经成为一种热门的程序语言.以著名的Monty Python喜剧小组命名,该语言是面向对象和解释.该属性导致Python在 ...

  8. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

  9. 嵌入式系统开发笔记0_0:目录

    本系列文章将向大家介绍嵌入式系统开发的各方面知识. 本系列文章所介绍的知识和内容,除电路图设计外,其它均采用开源系统,所以你不会在这个系列文章中看到Keil.IAR等软件. 本系列文章涉及C.C++. ...

  10. 面向对象嵌入式系统开发7-嵌入式系统的实现

    面向对象嵌入式系统开发7-嵌入式系统的实现  如果说嵌入式系统的面向对象分析与设计涉及到抽象.思考和经验的话,那么嵌入式系统的实现则涉及更多的实施细节.无论使用咋样前言的技术方法,最终都需要把整个系统 ...

最新文章

  1. XWiki 11.1 发布,协作式应用开发平台
  2. 五千字详解消息通知!
  3. j2ee之存储过程调用
  4. 审查元素上传php,KindEditor上传解析漏洞/列目录/内容漏洞_PHP教程
  5. asp.net core高级应用:TagHelper+Form
  6. [ZJOI2010] 基站选址(线段树优化dp)
  7. C 与 JAVA 的对比分析
  8. Linux系统日志及日志分析
  9. jQuery插件实例二:年华时代插件ReturnTop回到首页
  10. Linux下解压.war文件
  11. js document 触发按键事件
  12. 智能网联汽车仿真测试软件,智能网联汽车测试评价及检测认证
  13. 用css和HTML做loding小动画
  14. 解决浏览器 Microsoft Edge主页被hao123恶意篡改
  15. Android ViewFliper
  16. 适合新手 练手的Java 实战项目
  17. pandas 取excel 中的某一列_Python数据分析之Pandas读写外部数据文件
  18. Windows安装软件提示verify that you have accessto that directory
  19. python 凯利公式_如何在赌局上获得最大收益?靠凯利公式!
  20. oracle物化视图视频,Oracle物化视图使用详解视频教程

热门文章

  1. iOS8中UITableVIew分割线短的问题
  2. C# WinForm开发系列 - Form/Window
  3. Dynamics CRM - 不同类型字段在 Plugin 里的赋值方式
  4. 学习NLP:《自然语言处理原理与技术实现(罗刚)》PDF+代码
  5. java获取当前项目或类路径
  6. Web测试实践——每日例会记录12.30(1)
  7. 用指针实现对二维数组元素的访问
  8. Artifactory安装配置
  9. iOS UI-团购案例(通过xib文件自定义UITableViewCell)
  10. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索