ham ,谁的杯具

这事主要怪我,恩,我没管好这个孩子。

所以事到如今,也只能由我出面来收拾这个烂摊子。

好吧,现在忽然想到,ham是个前端,所以直接到命令行调dpkg 和 apt好了。

所以上来就发现了 /var/lib/dpkg/status这个文件没有?这是很严重的问题

于是touch了一个,并且由此想到上次touch了很多文件都忘记了具体步骤。。。没啥好说的,怪我怪我。

于是赶快写了这个博客。

 恩,貌似还有一个lock文件要搞定一下。。。fix it。。。

小追了一下ham 

在apt-worker.cc里面发现了很多内容。

其中download-lists函数试图通过apt-get来下载列表。

但是这个函数中有一个关于catalog文件和sourcelist的比较。

貌似这个操作很重要。

Valgrind

 哈哈哈,神器,logo也fansy。

芝麻开门,芝麻开门。

中断到的生态圈

 截止到现在为止,跟中断有关的两个问题只解决了一个,而另外一个,需要比较深度的调试。

截至到现在为止,跟中断打交道也不少了。

接触到了很多接口和概念:irq , chip , action, handler ,desc do_IRQ , request_irq , setup_irq 

看上去都是拼图,puzzle。

但是,小心一穿就可以穿起来了。

首先:中断要到达cpu才可以被处理。

其次:cpu要能够分辨中断的号码,irq,就像来电显示和来电查询一样。

再次:cpu拿着irq要找到相应的handler才好。

这基本就清楚了,irq就像营业号,一方面要申请提供服务,setup_irq ;

另一方面要申请使用服务,request_irq .

最后,也是最重要的,就是保持服务能够被使用,这才是中断的核心机制。

中断到达后,cpu要查到中断号码,这一部是跟硬件有很大相关性的。

同事这也是狠关键的,irq的分配问题。

这也就是chip存在的意义了,也就是说,irq号,是要靠chip,或者相应的数据结构来分辨的。

其次,cpu根据中断号,找到相应的desc , 并调用action中的handler来处理中断,就是水到渠成了。

这样又归结出两个问题:

第一,irq是怎样分配,怎样生成,怎样传递的。

第二,irq是怎样被服务的。

九阳补丁

按照金庸老爷子的套路,一般,小破孩会被掉到山涧里,被歪脖树就下,并捡到九阳真经,就此上路。

我现在没这福分了,但是我依然毅然决然跳进google这条小水沟,被挂到一个叫comcat的地方,并捡到一个patch。

这个patch真是灵的很,希望能把它都用上,哈哈。 

追杀休眠杀手

wake_up_interrupt终究是没有审查出问题,这趟调试的效率是相当的高,有小弟就是爽的说。

这就出现了另外一个问题,之前有追到过一个由于设置wake_up而不能进入休眠的。

但是现在想想,问题又不是这样的,因为系统进休眠还是很顺利的,只是一睡不起。。。。这个问题倒是蛮大了。

再强调一下,之前追到的是不能进休眠的杀手,现在是不能出休眠,问题显然

依然出在wake_up_interrupt上面,所以,索性做绝。 

不是冤家不聚头

我现在已经开始进入并行计算模式了,比如我现在在调hal,otg,suspend-recover,oprofile这四个。

前两个还有帮手,我很欣慰。

后两个很不蒸汽,都死在了irq环节。

论剑华山啊真是,好吧,咱就在irq区域杀个你死我活。

这个成语真是经典。

你死还是我活? 

 

接下来准备写两篇文章,分别介绍一下,这两个问题是怎么解决的。

(1) irq_chip在irq处理过程中的call graph和irq_num关联。

(2)shared irq 的潜在bug。

敬请期待咯。

ps,is-p的文章不能下载。。。。准备跑路。

雁过留声

不要忘记,你曾经杀进内核腹地,在电源管理和中断处理区里都兜了好几圈,这些脚印不能 被风吹干。

make it memorized

启动事件

 关于13892的启动触发事件,搞的我很头疼。

这个芯片真的很难用。

所以大家请原谅我。。。。我狠狠的BS飞思卡尔一下好了。

问题在于,13892中没有一个寄存器是用来记录触发事件。

特别是针对电池和充电器的。

这样一来,当你插上充电器的时候,系统会启动,状态寄存器显示电池和充电器都在线。

假设,再你开机以后,操作系统未进入之前,插入充电器,操作系统将视同为上一种情况。

必须,要想办法,把触发的事件记录下来,必须!

 

其实也没那么难,在系统启动伊始,是可以根据CHADETI,就是Charger Detect 这个中断来判断触发事件。

如果是充电器的话,这个够了。

如果是电池,则,没有这个中断,但是有BPON,可以确定是电池了。

因此呢,系统启动伊始这个时机,就是在bootloader里面了,也就是说,这个东西要在bootloader里面去做。

没别的选择。

presentation

要做一个presentation,却不知道从何处下笔。

这可真是个两难的选择。。。。为什么总是两难的选择呢。。。

小0和小1

这个名字太煽情了,说正事吧还是。

看到了oprofile 觉得很好,但是觉得oprofile做的工作还不够,或者说,数据需要进一步处理,才能给上层的程序员来使用。

希望更多宏观信息,更多的,不禁想到一个问题:

很多数据要由人来区分这个程序的短板在哪,更多的问题在于,这个人要十分的熟悉目标处理器和应用程序才好。(对应用程序有个概况的了解就好) 。

不禁进一步想到,该怎样区分程序中的短板是在于程序本身,还是在于编译器,还在在于程序本身和机器之间不可调和的矛盾。(资本主义程序。。。)

这个问题太深奥了,向着哲学那边过去了。。

但是肯定还是有些思路的。

由此不由的想到了instrument,这个工具可以好好的研究一下,来得到更多的思路,反正也是clang和llvm,咱手里也有的说~