自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 打造高铁WiFi新体验,中兴新支点ICG与高铁强强联手

中兴新支点ICG(智慧协同网关Intelligent Collaboration Gateway)是一款多运营商上链智慧协同路由器,无线多链路带宽聚合设备,是专为复杂无线网络环境设计的集中式网络通信系统。该系统融合优化多运营商多制式网络,支持低、中、高速环境中的数据通信,为用户提供可靠、稳定、安全、高带宽的网络接入服务,可以在移动速度高达300km/h的高铁上提供正常接入。

2017-11-02 16:56:11 1469

原创 悟空学Linux专栏----第51篇

(Linux内核同步机制之自旋锁)  到目前为止,我们讲解了什么事自旋锁,自旋锁的数据结构定义以及内核提供的自旋锁操作APIs。这一篇我们呢讲解一下使用自旋锁的需要注意的问题,来结束对自旋锁同步手段讨论。  首先,第一点需要明确的是,自旋锁是在SMP系统中为防止并发访问提供所需同步机制;在单处理器系统中,编译内核镜像的时候不会加入自旋锁代码,也即是在此时自旋锁代码无效;  第二点,自旋

2015-07-14 10:38:53 281

原创 悟空学Linux专栏----第50篇

(Linux内核同步机制之自旋锁)  自旋锁APIs(续):  spin_unlock_irqrestore(lock, flags)  该宏释放自旋锁lock的同事,也恢复标志寄存器的值为变量flags保存的值。它与spin_lock_irqsave配对使用。  spin_unlock_irq(lock)  该宏释放自旋锁lock的同时,也使能本地中断。它与spin_lock

2015-07-14 10:37:58 293

原创 悟空学Linux专栏----第49篇

(Linux内核同步机制之自旋锁)  接着讲解自旋锁操作API!  spin_lock_init(x);  该宏用于初始化自旋锁x,自旋锁在真正使用之前必须先初始化,该宏用于动态初始化;  spin_unlock_wait(x)  该宏用于等待自旋锁x变得没有被任何执行单元保持,如果没有任何执行单元保持该自旋锁,该宏立即返回,否则将在循环在那里,直到该自旋锁被释放;  sp

2015-07-14 10:36:36 303

原创 悟空学Linux专栏----第48篇

(Linux内核同步机制之自旋锁)  我们已经分析了Linux内核同步机制的信号量,发现信号量其实是基于自旋锁来实现的,现在我们就来看看Linux内核中的自旋锁吧!  那么自旋锁有什么特性呢?  自旋锁最多只能够被一个可执行线程持有,如果一个执行线程试图获得一个已经被持有的自旋锁,那么该线程就会一直进行忙等待,直到自旋锁被释放重新可用;如果锁没有被持有,请求自旋锁的线程便能立刻得到它,

2015-07-14 10:34:50 329

原创 悟空学Linux专栏----第46篇

(Linux内核同步机制之信号量)  从这篇开始就来讲讲Linux内核的同步机制吧!  首先我们来看看semaphore信号量吧;定义在  struct semaphore {  spinlock_t lock;  unsigned int count;  struct list_head wait_list;  };  其中lock为自选锁,放在结构体里面用于实现

2015-07-14 10:34:01 314

原创 悟空学Linux专栏----第45篇

圆方的回答让悟空很郁闷,悟空感觉自己费了九牛二虎之力,可是结果依然和没有修改是一样的,这着实让悟空很是郁闷,郁闷之余悟空决定来一个更暴力的解决方法。悟空决定修改发送的流程,悟空将802.11网络协议栈的挂起函数给删除了。悟空发现这个测试的结果非常好,竟然再也没有出现假死的现象了。  解决了这个问题之后圆方很高兴,因为圆方的老板很高兴,圆方的老板给了圆方一大笔的奖金。但是悟空却高兴不起来,悟空之

2015-07-14 10:32:50 297

原创 悟空学Linux专栏----第44篇

悟空讨厌关中断,关中断很暴力,但是再暴力也比导致系统异常好,所以悟空决定将所有的发送队列的自旋锁都使用关中断的自旋锁。修改完代码之后,悟空很开心,因为这是悟空第一次改正大牛错误的代码,能够找到别人的错误这让悟空很开心。但是测试的结果让悟空欲哭无泪,因为测试的结果告诉悟空,加锁之后的确保证标志位和802.11协议栈的状态保持了一致,但是另一个奇怪的问题出现了。802.11协议栈一直处于挂起状态,而一

2015-07-14 10:31:59 268

原创 悟空学Linux专栏----第43篇

按照圆方的建议,悟空打开了无线驱动的debugfs功能。悟空通过模拟大数据通信的场景,测试了一个多小时候,发现无线果然不再发送数据了。悟空查看了debugfs之后,发现发送队列的状态位和802.11协议栈的状态出现了冲动。发送队列的状态为显示为802.11协议栈没有挂起,而802.11协议栈的状态却是挂起的状态。这让悟空怎么也想不通,所以悟空再次找到了圆方。  悟空曰:从测试的结果来看,发送队

2015-07-14 10:24:23 266

原创 悟空学Linux专栏----第42篇

有了圆方的思路,悟空决定设计一个测试程序,来验证一下。悟空给驱动程序加了很多的打印函数,悟空希望通过这些打印来判断发送队列最后处于什么状态。但是悟空测试了两天也没有测试出任何问题,所以悟空非常高兴,悟空跑去找到圆方,想把这一好消息告诉给圆方。  悟空曰:我家了很多打印函数,发现这个问题竟然不再出现了,那么是不是说这个问题已经解决了呢?圆方,你怎么看呢?  圆方曰:我觉得问题依然存在,只是你

2015-07-14 10:23:05 264

原创 悟空学Linux专栏----第41篇

为了尽快解决这个问题,悟空打算好好的研究一下该无线的驱动程序,悟空先花费了一晚的时间统计了一下驱动程序,总文件数为55个,总的代码行数为45954行。统计完之后悟空开始研究驱动的代码,可是看来看去,悟空都无法看出这些代码有什么问题,这让悟空头大,悟空打算问问圆方有什么好的思路。  悟空:我看了一下驱动代码,没有发现这段代码没有什么问题啊?圆方你怎么看呢?  圆方:如果我们要找出问题的所在,

2015-07-14 10:21:27 306

原创 悟空学Linux专栏----第40篇

最近有个公司找到唐僧,希望唐僧给他解决一个驱动程序的bug,该公司最近开发了一款无线路由器,客户在使用这款路由器的时候经常用着、用着就无法上网了,而且不管怎么重链,再也链接不上了,但是从串口看系统还是正常运行,而且CPU的负荷也不高。唐僧把这个任务交给了悟空,为了尽快解决这个问题该公司还特意安排了一个经验丰富的嵌入式工程协助悟空,这个工程师叫圆方,每次悟空和他讨论问题的时候,悟空说的最多的一句话就

2015-07-14 10:20:37 259

原创 悟空学Linux专栏----第39篇

最近沙僧休息了好久,唐僧希望沙僧能够讲工作队列,工作队列是Linux系统中最为重要的一个中断后半部分机制,也是最为实用的一种。这让沙僧很是高兴,所以一大早沙僧就兴奋的来到了课堂。  沙僧:工作队列其实是将任务交给一个内核线程来执行,因此这部分代码总是在进程的上下文中执行。  2号童鞋:老师,工作队列的线程和软中断的线程有什么区别呢?  沙僧:啊,软中断中也有线程啊?这个我还真不知道哦?

2015-07-14 10:19:50 330

原创 悟空学Linux专栏----第38篇

最近又一个新闻把八戒推到了舆论的风口,就是“猪坚强”的故事。大家纷纷猜测“猪坚强”是不是猪八戒的后代,更有一些三流的医院还提供了DNA检测证明,这着实让八戒有口难辩。而且最近学生之间还开始流传一句口头禅:不管你信不信,反正我信了。比如今天八戒上课。  八戒:同学们,“tasklet”机制是Linux内核中后半部分最为重要的一个中方法,其实“tasklet”机制是软中断的基础上实现的,可以这么理

2015-07-14 10:15:02 297

原创 悟空学Linux专栏----第37篇

俗话说人怕出名,猪怕壮,八戒一直很低调,但是他现在又壮有出名。人气爆棚,但也为八戒带来了不少的麻烦,比如今天,明明是悟空的课,唐僧却硬是让八戒来讲。八戒打算给学生们讲软中断的执行,这是八戒最喜欢讲的一节课。  八戒:同学们,软中断的执行其实很简单,主要是通过一个“while”循环来执行,该循环搜寻32个软中断挂起的软中断,如果搜寻发现该软中断被挂起了,则执行该挂起的软中断的中断执行函数。 

2015-07-14 10:14:04 310

原创 悟空学Linux专栏----第36篇

一直以来“2号童鞋”都感觉自己比较笨,之所以感觉自己比较笨是因为这个世界有很多问题无法想明白,比如上节课老师为什么没有讲软中断的注销函数。为了想明白这个问题,“2号童鞋”失眠了好几晚,可是失眠了好几晚之后,“2号童鞋”依然无法想明白这个问题。  最后还是可爱的八戒老师告诉了“2号童鞋”原因,八戒告诉“2号童鞋”软中断是在Linux内核编译期间静态分配的,所以软中断一旦注册了就不会注销,因此Li

2015-07-14 10:13:09 363

原创 悟空学Linux专栏----第35篇

因为悟空昨晚好好研究了一下软中断,所以悟空今天上课心里终于有底了。  悟空:Linux内核采用softirq_action结构体来表示软中断,具体结构体如下  struct softirq_action{  void (*action)(struct softirq_action *)  };  为了管理这些软中断,Linux内核中定义了一个数组,static struct s

2015-07-14 10:12:11 258

原创 悟空学Linux专栏----第34篇

悟空最近明白了一个道理,你要教给“2号童鞋”一杯水,自己需要先准备一桶水,这个道理是唐僧教给悟空的。这让悟空感觉很郁闷,因为按照这个道理,悟空需要一桶水,那么唐僧应该教给他一池塘的水。但是唐僧却并没有教给悟空一池塘的水,所以悟空感觉自己无法教给“2号童鞋”一杯水。  唐僧还告诉悟空,如果没有人教给你一桶水,那么你就需要自学一桶水,所以悟空不得不自学一通水。悟空接下来需要讲的是软中断,所以悟空打

2015-07-14 10:11:21 310

原创 悟空学Linux专栏----第33篇

最近八戒比较开心,自从上次他的18层梦的事情被媒体大肆报道之后,八戒就一下子成了网络红人。也正因为八戒的网上人气的不断攀升,所以越来越多的学生喜欢八戒的课了。这着实让八戒有点受宠若惊,所以八戒决定邀请悟空、唐僧、沙僧来听课。  八戒:同学们,大家好,我们今天要上的课是Linux中断的控制。  2号童鞋:老师,中断的控制是不是就是对中断的关闭和打开操作呢?  八戒:你理解的很对,中断控制

2015-07-14 10:10:43 292

原创 悟空学Linux专栏----第32篇

悟空最近比较郁闷,因为2号童鞋最近老是问悟空一些奇怪的问题。虽然大家都说2号童鞋很傻,但是悟空却觉得2号童鞋很聪明,因为如果悟空无法回答一个很傻的问题,那不是说明悟空更傻。悟空坚信自己不傻,所以悟空觉得2号童鞋很聪明。  比如今天上课2号童鞋就问悟空,request_irq函数的第二个参数的挂钩函数的设计需要注意什么问题。面对这个问题悟空压根就不知道怎么回答,你要知道悟空其实也是刚学Linux

2015-07-14 10:08:16 317

原创 悟空学Linux专栏----第31篇

自从悟空答应了“2号童鞋”下节课讲解Linux系统为什么不使用C++,而使用C作为主要语言之后。悟空就头大,查阅了很多资料,最后都没有得出一个比较有说服力的结论。这让悟空很是郁闷,心想自己要食言了,最后还是八戒给他出了一个主意,他让悟空去请教他们的达人老师。在悟空看来这就是个馊主意,但是除了这个馊主意悟空也没有其他办法了。  悟空之所以觉得这是一个馊主意,是因为自从唐僧开了“西游嵌入式培训班”

2015-07-14 10:07:08 295

原创 悟空学Linux专栏----第30篇

悟空感觉讲理论太无趣了,太枯燥了,所以悟空决定讲解一些实用的东西, 悟空打算这节课先讲解中断的使用。  悟空:顾名思义,中断使用之前需要登记注册。没有登记注册的中断是无法使用的,对Linux系统来说没有登记注册的中断就是黑户,Linux内核是不会处理这种中断的。Linux中断的注册函数如下为  Int request_irq(unsigned int irq,  Irq_handler

2015-07-14 10:06:13 310

原创 悟空学Linux专栏----第29篇

今天悟空要讲的是中断的约束,这让悟空想起了师傅的紧箍咒,所以悟空一看到约束两字就有点不爽,总觉得这两个字扎眼。  悟空:中断是内核中执行最敏感的任务,因此需要满足一些约束。  A童鞋:那么需要遵守什么约束呢?  悟空(心想竟然有一个人没睡觉):第一个约束,就是,内核需要尽可能快的处理中断。  A童鞋:老师,那么怎样才能尽可能快的处理中断呢?  悟空:为了尽可能快的处理中断,Li

2015-07-14 10:05:09 276

原创 悟空学Linux专栏----第28篇

由于唐僧上的课很多笑声,加上唐僧比较帅,所以“西游嵌入式培训班”一下子火了,很多人纷纷跑来报名,其中美女最多。这着实让唐僧高兴了很久,但是高兴之后唐僧也纠结,这么多的学生,需要多少老师啊?唐僧要求他的三个徒弟都做老师,这样让悟空兴奋了很久。悟空心想,我原本是来学习Linux的,没想到自己竟然还有机会给别人上课,想想都激动啊。  唐僧给悟空安排的课是中断描述符表,但是悟空却连中断描述符表是什么都

2015-07-14 10:04:25 285

原创 悟空学Linux专栏----第27篇

由于唐僧请来了这么多木人上课,一下子增加了不少的人气,所以最近唐僧的这里迎来了很多学生报名试听,这着实让唐僧高兴了好一阵,唐僧心想终于不用对着木人上课了。所以唐僧打算好好上一下课,争取留住这些学生。为了能让课堂的氛围活跃一些,唐僧要求他的三个徒弟在课堂上要尽量保持活跃。  唐僧:今天我们上的是异常、intel将异常分为了四类:故障、陷阱、异常中止、编程异常。  这时八戒哈哈大笑。  唐

2015-07-14 10:01:50 451

原创 悟空学Linux专栏----第26篇

唐僧:上节课,我们讲了中断,讲到了同步中断和异步中断。而其实很多时候,我们将同步中断,叫做异常。而将异步中断叫做中断,所以在没有特别说明的情况下,一般我们说中断就是说异步中断。中断(异步中断)又可以分为可屏蔽中断和非屏蔽中断。  悟空:师傅,可屏蔽中断和非屏蔽中断又有什么区别呢?  唐僧:可屏蔽中断一般是指I/O外设的中断,这些中断可以处于两种状态:屏蔽状态、非屏蔽状态。一旦一个外设的中断

2015-07-13 10:28:44 237

原创 悟空学Linux专栏----第25篇

最近唐僧开了一个“西游嵌入式培训班”,为了提高人气,唐僧决定动员他的三个徒弟来听课,而且给他们免费。这着实让悟空、八戒、沙僧高兴了很久,因为达人先生的课实在太贵了,为了听课悟空已经差不多把花果山的桃子都卖光了。  唐僧:我们今天主要讲,中断,简单的讲中断是一个事件,该事件改变了处理器的执行的指令顺序。而且这种事件和CPU芯片内外部硬件电路产生的电信号相对应。通俗的讲就是,我现在在上课,待会八戒

2015-07-13 10:20:39 265

原创 悟空学Linux专栏----第24篇

今天八戒比较开心,原因是最近考试考了满分。这让大家对八戒刮目相看,大家没想到八戒每天在课堂睡觉,竟然最后还能考满分。所以悟空和沙僧来向八戒道贺。  悟空:看不出来啊,你这猪脑袋竟然能记住这么多东西啊,考试还能拿到满分啊。  八戒:呵呵,其实试卷中的18道题目,我一道也不会。  悟空:怎么可能,你一道都不会,还能考这么高,你是不是考试作弊?  沙僧心想,为什么我作弊之后只能考个及格呢

2015-07-13 10:19:48 253

原创 悟空学Linux专栏----第23篇

沙僧最近比较郁闷,他的老板知道他最近学了高精度定时器,就要他实现一个精度误差小于100us的高精度定时器。可是沙僧上课都在睡觉,那里会高精度定时器,所以他跑去找悟空帮忙。  悟空听沙僧说完之后,想也没想就答应了沙僧。悟空心想高精度定时器的精度能够达到ns级别,实现100us应该很简单。悟空按照达人先生教的方法,很快实现了高精度定时器,为了测试误差,悟空直接在高精度定时器的“struct hrt

2015-07-13 10:18:53 302

原创 悟空学Linux专栏----第22篇

下课之后达人感到比较开心,因为今天悟空在课堂上提了不少的问题,达人心想今晚终于可以睡一个好觉了,所以达人今晚回家之后就早早的洗澡上床了。但是正当达人快要睡着的时候突然听到了外面有砰砰的敲门声,达人起来开门一看,竟然是悟空。  达人(囧):悟空啊,这么晚了有什么事吗?  悟空:老师,我下课之后发现我还有一个问题不懂,那就是高精度定时器到期之后是如何处理的呢?  达人:高精度定时器的到期处

2015-07-13 10:11:01 286

原创 悟空学Linux专栏----第21篇

今天悟空得到了一个好消息,就是八戒竟然主动邀请他去上课了,这让悟空很是意外,意外之余有点小感动。所以悟空一大早就来到了课室,看到八戒正在那里睡觉。  悟空:你是猪啊,怎么还睡啊?  八戒:猴哥啊,你终于来了,老师说了,你这次再不来上课,我就也不要来了。  这时达人来了,看到悟空达人很高兴,因为他今晚应该能睡一个好觉了,最近悟空每天晚上都是凌晨来找他,搞得他每晚都没法睡觉。  达人:

2015-07-13 10:09:36 297

原创 悟空学Linux专栏----第20篇

自从悟空发现高精度定时器的精度很高之后,悟空就决定开始研究高分辨率的定时器。有了低分辨率定时器的基础之后,悟空想内核表示高分辨率定时器的结构中应该至少包括三个成员。  一个表示到期时间的成员,而且这个成员肯定不是unsigned long类型的成员,因为内核表示时间的方法主要有两种,一个jiffies,一个是ktime_t,而要实现ns级别的精度,内核必须采用ktime_t类型。  第二个

2015-07-13 10:08:21 300

原创 悟空学Linux专栏----第19篇

今天悟空早早地就下载了达人先生的课件,悟空打算接着昨天的问题继续研究。悟空先研究tv1、tv2、tv3、tv4、tv5中存放的数据的条件。按照达人老师的课件。tv1中存放的是定时器的到期时间减去tvec_base中的timer_jiffies(和jiffies相等)的值小于2^8的值的定时器,tv2是存放着这个值在2^8 ~2^14之间的定时器,tv3是存放着这个值在2^14 ~2^20之间的定时

2015-07-10 15:10:07 289

原创 悟空学Linux专栏----第18篇

解决了struct timer_list中的expires成员为什么是unsigned long类型的问题之后。悟空决定自己揭开为什么采用双向链表管理数据结构。悟空从网上下载了达人老师的课件,决定先研究定时器的软件架构,Linux内核采用如下的结构体表示:  struct tvec_base {  spinlock_t lock;  struct timer_list *running

2015-07-10 15:08:00 306

原创 悟空学Linux专栏----第17篇

悟空正在低分辨率的定时器的问题而烦恼,这时沙师弟跑来找悟空诉苦,沙师弟说就因为他上课睡觉了,八戒就将他狠狠的揍了一顿,他要悟空给他主持公道。悟空没心思理他。  悟空自言自语:为什么struct timer_list中表示时间采用了unsigned long表示呢?  沙僧:这个我知道啊。因为低精度定时器的触发处理函数是由内核的tick产生的啊,而tick是基于jiffies来处理的,而ji

2015-07-10 15:04:39 277

原创 悟空学Linux专栏----第16篇

悟空觉得课堂估计是去不了,所以自己打算在家里继续自学,悟空知道达人老师接下来需要讲的是低分辨率的定时器。所谓定时器就是设定一个未来的时间,让系统在这个未来的时间触发一个特定的事件,执行一些预先设定的程序。低分辨率的定时器的计时单位是jiffies的值,也就是精度只能达到1/HZ,以HZ=1000为例,意味着系统定时器的精度就是1ms。  低分辨率的定时器用struct time_list结构体

2015-07-10 14:55:09 300

原创 悟空学Linux专栏----第15篇

今天悟空终于发现,原来八戒为了不让他扰乱达人上课,竟然偷偷的给达人换了课室。悟空心想算了,我还是换个身份去听课吧。悟空想扮八戒,但是又一想,八戒就在课堂上,扮八戒肯定穿帮,所以悟空想想还是扮三师弟沙僧算了。  达人:上次我们将时间的维护者timekeeper,而且系统会定时触发中断去执行do_timer函数,那么这个定时中断又是谁产生的呢?答案是时钟事件设备。  “沙僧”:时钟事件有什么特

2015-07-10 14:52:34 274

原创 悟空学Linux专栏----第13篇

下课之后悟空百思不得其解,为什么达人老师要敲他四下,这四下代表了什么含义呢?悟空想了很久也没有想明白,这时只听到外面的打更的人连敲四下。悟空这才恍然大悟,以前菩提老祖敲三下意味着三更给他开小灶,达人敲四下是不是叫我四更去找他啊?想到这悟空立马向达人家飞奔而去。  悟空体力比较好,不一会儿就到了,悟空看见达人家里的灯还开着。这让悟空感觉自己的猜想是对的,老师果然在等他。悟空按住心里的喜悦,连敲了

2015-07-10 14:31:57 375

原创 悟空学Linux专栏----第12篇

为了提高上课的学习效率,悟空在上课之前先预习一下,预习的时候发现了两个问题。一个是struct clocksource结构体中的read函数,这个函数是一个挂钩函数,那么这个挂钩函数最后调用的是什么函数呢?Linux内核又为什么要设计这个挂钩函数呢?直接调用不就得了吗?第二个就是这个函数返回的是一个cycle计数值,也就是时钟周期的计数值,要将这个值转换为时间,就必须知道时钟频率,而这个结构体中却

2015-07-08 10:57:48 339

原创 悟空学Linux专栏----第11篇

上节课悟空感觉受益匪浅,听课果然比自学效果要好,所以这次悟空一大早就来。今天达人先生要讲的是时钟源。  达人:上节课我们讲的是Linux时间的表示方法。  悟空:老师,那么Linux系统的时间是哪里来的呢?  达人:Linux系统的时钟是由时钟源产生的,软件用结构体struct clocksource表示时钟源。在硬件上面,这个时钟源往往是一个固定频率的计数器,这个计数器只能单调递增,

2015-07-08 10:57:01 283

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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