详细分析contrex-A9的汇编代码__switch_to(进程切换)

//函数原型:版本linux-3.0.8 struct task_struct *__switch_to(structtask_struct *, struct thread_info *, struct thread_info *);   #define switch_to(prev,n...

2014-07-08 14:48:05

阅读数 2338

评论数 0

网卡驱动11-网卡中的广播地址 0x8000解释

经常在网卡里面看到广播地址,赋值为0x8000,网上几乎没人去解释这个东西。 例如dm9000.     /* broadcast address */     hash_table[3] = 0x8000; u16 hash_table[4];这个是16位的表,我们知道mac广播地址是F...

2014-04-02 16:24:44

阅读数 1332

评论数 0

v4l2驱动3-linux3.0.8中v4l2_format详解

首先是 //四字符代码,为了标示视频数据流格式 //在次文件的下,比如大家熟悉的mjpeg //#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */ /* Four-character...

2014-03-25 16:53:22

阅读数 5005

评论数 0

v4l2驱动2-linux3.0.8中V4L2_CAP_*详解

这部分涉及不少专业支持,有些可能我的不好,请大家原谅! /* Values for 'capabilities' field */ #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */ #define...

2014-03-21 16:02:50

阅读数 1797

评论数 0

v4l2驱动1-linux-3.0.8的v4l2_dev.h分析

看一下drivers/media/video下的Makefile你会发现: videodev-objs:=v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-fh.o \                         v4l2-event.o v4l2-ctrl...

2014-03-21 11:43:40

阅读数 1739

评论数 0

网卡驱动10-做一个与外界交互的虚拟网卡6(突发奇想!搞个网络鼠标!)

昨天晚上突然想到这个东西,今天花了一上午实现了!不过具体速度怎么样就不清楚了! 首先是目的!一个系统上的鼠标去控制另一个系统。通过网线连接。 方案!在一个系统上获取鼠标信息网传到另一个系统,接受信息的系统通过input机制上报。 对于网传的接受,你可以在用户层去做,我是在内核层去做的,参...

2014-02-26 14:26:36

阅读数 1918

评论数 1

网卡驱动9-linux内核3.0.8的mdio_bus\phy_device\phy_driver

上次说了MII 还有RMII GMII RGMII、SGMII等, GMII: 与MII接口相比,GMII的数据宽度由4位变为8位, 发送参考时钟GTX_CLK和接收参考时钟RX_CLK的频率均为125MHz(1000Mbps/8=125MHz)。支持MII模式。这个GMII可用于1000M...

2014-02-24 11:09:06

阅读数 4620

评论数 3

网卡驱动8-MII接口以及linux内核对MII的支持

首先,向大家推荐一些文章。 http://blog.chinaunix.net/uid-24148050-id-131084.html http://hi.baidu.com/lds102/item/eae3262c77b897de0f37f966 http://blog.csdn.net/zyb...

2014-02-18 16:17:12

阅读数 4863

评论数 0

网卡驱动7-netpoll和ethtool,以及ethtool移植和驱动简单实现

netpoll的目的是让内核在网络和I/O子系统尚不能完整可用时,依然能发送和接收数据包。主要用于网络控制台(net console)和远程内核调试(KGDBoE)中。实现netpoll功能,主要是要实现kernel中的poll_controller函数,该函数定义:void (*poll_co...

2014-02-13 16:03:20

阅读数 2383

评论数 0

网卡驱动6-做一个与外界交互的虚拟网卡5(代码及调试)

驱动有三个文件:vnic.h vnic_core.c vnic_dev.c 应用层:rcv.c send.c(发送程序是pc和arm板共用的) 代码有注释,我就不详细解释了。如有疑问,欢迎讨论! vnic.h #ifndef __VNIC_H__ #define __VNIC_H__ #incl...

2014-02-13 09:43:12

阅读数 2148

评论数 0

网卡驱动5-做一个与外界交互的虚拟网卡4(netif_receive_skb和非napi分析)

看了网上的一些对此函数的解析,有些比较旧了。我在这分析一下linux-3.0.8的代码。 netif_receive_skb()中有RPS,我们不看了,直接看__netif_receive_skb()。 static int __netif_receive_skb(struct sk_buff...

2014-02-12 11:38:34

阅读数 2202

评论数 0

网卡驱动4-做一个与外界交互的虚拟网卡3(调用真实网卡接收数据以及napi使用)

//vnic_rcv是接受vnic包的处理函数 static int vnic_rcv(struct sk_buff *skb, structnet_device *dev, struct packet_type *ptype, struct net_device *orig_dev) { ...

2014-02-10 16:49:25

阅读数 2224

评论数 0

网卡驱动3-做一个与外界交互的虚拟网卡2(调用真实网卡发送数据)

之前说我我加入一个自己的协议,现在说一下我的协议的意思是每个数据包前加一个32位的数据,前16位是协议号,即ETH_IP_VNIC; 后16位的高八位是’w’(我的姓的第一字母),低八位是虚拟网卡号。所以VNIC_HLEN是4。可以看一下结构体struct vnic_ethhdr /** *...

2014-02-08 11:45:06

阅读数 2559

评论数 0

网卡驱动2-做一个与外界交互的虚拟网卡1(引用真实的网卡、自定义协议号注册)

之前的snull只能自娱自乐,我们来实现一个可以和外部通讯的虚拟网卡。 这个虚拟网卡参考了vlan协议实现。 重点我们说四个东西,引用真实的网卡、自定义协议号注册、发送和接受。 Linux-3.0.8 引用真实的网卡: 单从程序上看就这一句: real_netdev = dev_g...

2014-02-07 16:06:38

阅读数 1909

评论数 0

网卡驱动1-移植snull到linux-3.0.8

ldd3的代码版本太低了,我在此把它移植到linux-3.0.8并提供调试方法,希望对一些人有帮助 可以与ldd3提供的源码比较这看。 timeout那块有点问题,就不演示了。 snull.h /* * snull.h -- definitions for the network mod...

2014-02-07 11:45:00

阅读数 2481

评论数 3

块设备驱动3--sd卡驱动2(linux-3.2.36的host.h分析)

/* * linux/include/linux/mmc/host.h * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Gen...

2013-12-31 16:26:27

阅读数 2761

评论数 0

进程与内存10-高速缓存5(linux提供的操作接口)

要到年底了,忙的要死。这次我就偷偷懒了。只做一些提示,有兴趣看看。欢迎讨论! 简单开场白: 从之前的分析看,为了提高磁盘或内存的访问速度,都造成了同一数据会在不同的介质中同时存在。那么就可能因为某种原因造成数据不一致。对于硬件cache,如果是数据和指令分类的Cache分开,那么指令cac...

2013-12-27 09:35:16

阅读数 1398

评论数 0

进程与内存9-高速缓存4(硬件高速缓存)

这篇主要是讲cache的基础知识,从网上也可以搜到相关的。 Cache的作用: 为了缩小cpu和ram之间的速度不匹配,引入了硬件高速缓存内存。它基于著名的局部性原理。 Cache的分类: a. 统一的。指令和数据用同一个Cache。 b. 指令和数据分开的。有时这种组织方式也被称为改进的哈佛结构...

2013-12-25 15:25:22

阅读数 1628

评论数 0

进程与内存8-高速缓存3(页高速缓存)

页高速缓存是linux内核所使用的主要磁盘高速缓存。在绝大多数情况下,内核在读写磁盘时都引用页高速缓存。新页被追加到页高速缓存以满足用户态进程的读请求。如果页不在高速缓存中,新页就被加到高速缓存中,然后用从磁盘读出的数据填充它。如果内存有足够的空闲空间,就让该页在高速缓存中长期保留,使其他进程再使...

2013-12-24 16:55:01

阅读数 1030

评论数 0

进程与内存7-高速缓存2(目录项高速缓存、索引节点高速缓存和磁盘高速缓存)

首先明白这两个概论:下面是我以前写的博客vfs中的话 a. 超级块对象struct super_block: 对应于存储特定文件系统的信息(如文件系统类型、文件大小上限、设备标识符等),磁盘文件放在特定扇区中,特殊文件如sysfs放在内存中,掉电后完完了。 b. 索引节点对象struct i...

2013-12-24 15:16:46

阅读数 1363

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭