
linux
文章平均质量分 75
qq405180763
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内存管理单元(MMU)介绍
MMU是存储器管理单元的缩写,是用来管理虚拟内存系统的器件。MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称作TLB(转换旁置缓冲区)。所有数据请求都送往MMU,由MMU决定数据是在RAM内还是在大容量存储器设备内。如果数据不在存储空间内,MMU将产生页面错误中断。MMU的两个主要功能是:1. 将虚地址转换成物理地址。 2. 控制存储器存取允许。M转载 2012-07-23 22:11:10 · 3294 阅读 · 0 评论 -
pthread_barrier_init,pthread_barrier_wait简介
pthread_barrier 系列函数在中定义,用于多线程的同步,它包含三个函数: --pthread_barrier_init() --pthread_barrier_wait() --pthread_barrier_destroy()那么pthread_barrier_*是用来做什么的?这三个函数又怎么配合使用呢?转载 2014-04-17 11:07:23 · 20594 阅读 · 3 评论 -
Linux启动参数及实现 __setup与early_param
#define __setup_param(str, unique_id, fn, early) / static char __setup_str_##unique_id[] __initdata = str; / static struct obs_kernel_param __setup_##unique_id / __转载 2014-04-18 17:06:21 · 1020 阅读 · 0 评论 -
linux优先级浅析
最近在优化RTlinux的实时APP,在各种资料之间查找关于linux优先级的相关资料,终于对linux进程优先级有一些了解。首先在linux中优先级级别只有0-139这140个级别,这是固定的,数字越小优先级别越高,所以优先级为0的进程具有最高优先级。linux进程分为实时进程和非实时进程,这140个优先级中,linux把0-99分配给实时进程,100-139分配给非实时的普通进程,所以实时原创 2014-04-17 17:34:37 · 4425 阅读 · 0 评论 -
linux中断线程化分析
最近在为3.8版本的Linux内核打RT_PREEMPT补丁,并且优化系统实时性,原创 2014-04-21 15:12:26 · 9799 阅读 · 0 评论 -
深入浅出进程与线程的基本概念
深入浅出进程与线程的基本概念进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也转载 2014-04-23 11:05:28 · 1083 阅读 · 1 评论 -
VMware读盘失败
打开VMware出现Cannot open the disk *.vmdk or one of the snapshot disks it depends on.Reason: Failed to lock the file.错误的解决办法! 今天我公司做的虚拟化服务器出现故障意外重启了,主系统启动之后,在启动VMware虚拟机的时候出现了Cannot open the转载 2014-07-23 09:24:46 · 3454 阅读 · 0 评论 -
TOP CPU占用率原理及与实时线程的冲突
linux下通过top或vmstat查看系统CPU占用率,在大多数情况下测得的CPU占用率是准确的,但在时间精度较高的实时linux系统中,top测量的CPU占用率可能会不准确,下面结合top原理和实时linux实例分析在实时系统中top的使用情况。统计CPU占用率的时候,大致统计以下几个时间:用户时间(User time) 用户时间(User time) 用户时间原创 2014-06-13 17:14:57 · 5437 阅读 · 2 评论 -
linux内存管理--linux内核高端内存
Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。 Linux内核地址空间划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。转载 2014-06-17 11:22:10 · 927 阅读 · 0 评论 -
linux物理地址的静态映射
早先看linux驱动相关书籍的时候,隐约记得物理地址有动态映射和静态映射,当时写驱动都是想着自己动手写,所以一上手看着动态映射好用,就在自己的驱动上使用动态映射,将寄存器地址映射到内存上,即调用ioremap函数。在单线作战的时候ioremap确实好用,不需要改动内核的其他部分,直接将自己想用的物理地址映射到内存再操作。但很多时候当我们的设备需要在全局范围内被使用的时候,ioremap就会比较尴尬原创 2014-07-09 16:40:44 · 2144 阅读 · 0 评论 -
关于container_of和list_for_each_entry 及其相关函数的分析
Linux代码看的比较多了,经常会遇到container_of和list_for_each_entry,特别是list_for_each_entry比较多,因为Linux经常用到链表,虽然知道这些函数的大概意思,但一旦出现一个类似的函数比如list_for_each_entry_safe就又会感到头大,所以下定决心分析总结一下这些函数的用法,以后再看到这些面孔的时候也会轻松很多,读Linux代码的原创 2013-11-22 11:36:03 · 13203 阅读 · 3 评论 -
Linux中EtherCAT主站执行过程
在上层申请主站,完成各种主从站的配置项之后,通过ecrt_master_activate函数调用激活整个EtherCAT总线,ecrt_master_activate函数最主要的工作还是完成状态机的启动。ecrt_master_activate通过kthread_run创建和运行一个内核进程,该内核进程一直在后台运行下面这个进程函数,这就是ecrt_master_activate完成的主要工作原创 2013-11-23 17:24:25 · 7490 阅读 · 0 评论 -
DM3730 DSPLink在Linux下的环境搭建
首先从TI官网下载一个DM3730的SDK包(DVSDK),这个软件开发包里的东西很全,后期开发几乎所用到的所有工具都在里面了。执行下载的DVSDK文件,安装开发包,里面有DM3730的Linux内核(PSP)、DSPLink、XDCTools及其他的一些开发工具,参照DSPLink/doc/目录下UserGuide的PDF文档以及http://processors.wiki.ti.com/ind原创 2012-08-13 10:37:56 · 2209 阅读 · 0 评论 -
逻辑地址,线性地址及物理地址的区别(目前见过讲得最好的)
转自http://blog.youkuaiyun.com/erazy0/article/details/6457626#comments一、逻辑地址转线性地址机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gcc编译,再反汇编后会看到以下指令:mov 0x80495转载 2012-11-30 16:57:19 · 1921 阅读 · 0 评论 -
MAC帧发送接受具体实现
网卡驱动所能看到的仅仅是MAC帧,MAC帧独立于任何上层协议,仅仅属于数据链路层。 以太网为例,DM9000作为设备。*******************************************************************1.发送的skb是什么样?(内核决定)发送的MAC帧格式:PR| SD | DA |SA |转载 2013-04-05 15:47:51 · 3192 阅读 · 0 评论 -
linux网卡驱动dm9000_poll_work函数分析
static voiddm9000_poll_work(struct work_struct *w){struct delayed_work *dw = container_of(w, struct delayed_work, work);//获得结构体struct delayed_work,详见注释一原创 2013-04-06 15:57:11 · 3296 阅读 · 0 评论 -
LAN9221网卡驱动之二 NAPI接收
转载请注明出处:http://blog.youkuaiyun.com/qq405180763/article/details/8800391LAN9221采用NAPI方式读取网卡缓存内数据。当接主机收大量网络数据时,网卡中断触发驱动程序接收数据,驱动程序被触发后调用轮询函数,在轮询函数里接收固定个数据包后,固定个数据为budget,一般是轮询注册函数netif_napi_add的第三个参数weight,如原创 2013-04-14 17:56:18 · 2174 阅读 · 0 评论 -
skb_buf结构分析
转载请注明出处:http://blog.youkuaiyun.com/qq405180763/article/details/8797236 实际上skb_buf结构只是一块已经申请好的套接字缓冲区的指针和属性数据的描述集合,netdev_alloc_skb函数申请到一块套接字缓冲区后,返回记录这块缓冲区信息的skb_buf结构,在各个网络层传输的只是skb_buf结构,换句话说,仅仅是原创 2013-04-13 17:13:45 · 7100 阅读 · 0 评论 -
LAN9221网卡驱动分析之一 发送数据
转载请注明出处:http://blog.youkuaiyun.com/qq405180763/article/details/8794887在LAN9221网卡驱动中,以字对齐往网卡缓存发数据,所以发送数据之前要考虑字对齐,并将发送字的次数计算出来。当网卡中TX_FIFO空间余量小于1600个字节时,通知上层停止发送队列,余量大于3200的时候网卡触发中断继续发送数据。static int sms原创 2013-04-14 15:14:35 · 3470 阅读 · 0 评论 -
LAN9221网卡驱动之三 接收/发送完成中断
网卡中断主要是在接收新数据和数据发送完成时被调用,提醒网络驱动设备接收新数据和唤醒发送队列。static irqreturn_t smsc911x_irqhandler(int irq, void *dev_id){ struct net_device *dev = dev_id; struct smsc911x_data *pdata = netdev_priv(dev);原创 2013-04-19 17:02:53 · 1919 阅读 · 2 评论 -
Exynos4412 DMA驱动
尽管在内核上Linux3.0.15和Linux3.8.10在关于DMA运行机制部分没什么变化,但芯片生产商三星写出来的驱动接口却发生了比较大的变化,这样导致我在Linux3.0.15上写出来的DMA驱动,在Linux3.8.10上完全运行不了,所以下面讲一讲在Linux3.8内核中写DMA驱动的一般性步骤,这一部分在Documentation/Dmaengine.txt文件里有讲到。在Linu原创 2013-11-08 17:23:42 · 8836 阅读 · 1 评论 -
MMU(TLB)与Cache的工作方式
MMU是内存管理单元,该单元通常是属于处理器的硬件,用于从虚拟地址到物理地址的映射。在典型的二级页表内存管理的系统中,映射过程为:系统为MMU依次准备好页目录表地址,页表地质,MMU通过虚拟地址的各个段作为索引寻找到物理页面地址,与页内偏移地址一起构成最终物理地址。从上可见,从MMU映射获得最终数据,需要访问三次内存(页目录表,页表,取数据),在分页级别更高的系统中,访问一次数据要更多的内原创 2014-09-09 16:40:00 · 6784 阅读 · 1 评论