留言板
路过的蜗牛们,在这里留个脚印吧~
蜗窝欢迎各种言论,谈天说地、技术交流、问题求救、跳槽招聘、牢骚抱怨……哈哈。
评论:
electrlife
2016-08-25 12:48
2016-08-25 12:48
@wowo:Hi,我很好奇版主是从事什么行业的,具体的工作职责是什么,如何练就这样的胸怀与思想?
真的很是佩服!每每想到我何时在linux 方面也能有这样的造诣!就感觉很渺茫!因为不懂所以觉得Linux 真的很神奇,程序的结构真的很值得学习!但最近找工作确又给我泼冷水,做Linux 驱动的公司一般开的工资都在2万以内,感觉和Linux 的高大上完全不符!或者是说确实自己的水平太低了!
真的很是佩服!每每想到我何时在linux 方面也能有这样的造诣!就感觉很渺茫!因为不懂所以觉得Linux 真的很神奇,程序的结构真的很值得学习!但最近找工作确又给我泼冷水,做Linux 驱动的公司一般开的工资都在2万以内,感觉和Linux 的高大上完全不符!或者是说确实自己的水平太低了!
wpch315
2016-03-28 09:24
2016-03-28 09:24
找到原因了,arch idle时系统会进入low power模式,会对外设power gating,dma控制器唤醒延迟较长导致问题,把低功耗等级降下一个就好了
wpch315
2016-03-22 14:23
2016-03-22 14:23
@wowo
请教一个问题,最近调串口驱动时发现使用dma的方式接收数据有问题,目前的现象是:
在系统的线程都处于休眠状态的时候,dma接收有问题,我建立了一个线程一直进行while循环,这时dma接收就是OK的
分析后发现可能是dma驱动中中断里调度一个tasklet时,在系统的线程都处于休眠状态的时候会有较大的延迟,我想请问一下:
1.是否还有其他可能性较大的原因
2.如果确实是tasklet调度的问题,什么地方的问题会导致这种情况?
谢谢!
请教一个问题,最近调串口驱动时发现使用dma的方式接收数据有问题,目前的现象是:
在系统的线程都处于休眠状态的时候,dma接收有问题,我建立了一个线程一直进行while循环,这时dma接收就是OK的
分析后发现可能是dma驱动中中断里调度一个tasklet时,在系统的线程都处于休眠状态的时候会有较大的延迟,我想请问一下:
1.是否还有其他可能性较大的原因
2.如果确实是tasklet调度的问题,什么地方的问题会导致这种情况?
谢谢!
wpch315
2016-03-22 17:30
2016-03-22 17:30
@wpch315:我把tasklet里的事放到中断里做,发现现象一样,所以排除之前的推测,现在看上去就是线程的状态会影响dma的硬件行为,搞不清楚为什么会这样,请教各位
wowo
2016-03-23 15:38
2016-03-23 15:38
@wpch315:我觉得的可以从如下的思路去查找原因:
1)打开系统电源管理有关的日志输出,确认出错的这段时间内,系统的状态到底如何,是否进行了低功耗状态的切换,是哪个低功耗状态?
2)根据你描述的现象,直接使用UART中断Okay,但DMA不Okay,则说明UART中断可以使系统从“这个低功耗状态”返回,而DMA中断不可以。看看CPU那些低功耗状态有可能这样做。
3)试试打开uart的流控功能,应该就可以解决。
1)打开系统电源管理有关的日志输出,确认出错的这段时间内,系统的状态到底如何,是否进行了低功耗状态的切换,是哪个低功耗状态?
2)根据你描述的现象,直接使用UART中断Okay,但DMA不Okay,则说明UART中断可以使系统从“这个低功耗状态”返回,而DMA中断不可以。看看CPU那些低功耗状态有可能这样做。
3)试试打开uart的流控功能,应该就可以解决。
jordonwu
2016-03-14 19:49
2016-03-14 19:49
@wowo & all,
请教一个遇到的问题,一个lvds屏接imx6,这个lvds除了要配置timing之外,在工作之前需要通过spi接口执行一段初始化code,搜索了下参考代码,在imx_linux-3.0.35及之前的版本里有类似spi初始化lvds/lcd屏的代码(如http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/drivers/video/mxc/mxcfb_epson_vga.c?h=imx_3.0.35_4.1.0)
static int __init epson_lcd_init(void)
{
int ret;
ret = platform_driver_register(&lcd_plat_driver);
if (ret)
return ret;
return spi_register_driver(&lcd_spi_dev_driver);
}
但是在新版本的kernel中,这些代码都被移除掉了,我想请问下:在引入device tree之后,如果要执行spi初始化lvds panel的代码,这个是在lvds的dts部分配置还是在spi的dts部分配置? 另外kernel中是否已经存在有类似的code? 谢谢
请教一个遇到的问题,一个lvds屏接imx6,这个lvds除了要配置timing之外,在工作之前需要通过spi接口执行一段初始化code,搜索了下参考代码,在imx_linux-3.0.35及之前的版本里有类似spi初始化lvds/lcd屏的代码(如http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/drivers/video/mxc/mxcfb_epson_vga.c?h=imx_3.0.35_4.1.0)
static int __init epson_lcd_init(void)
{
int ret;
ret = platform_driver_register(&lcd_plat_driver);
if (ret)
return ret;
return spi_register_driver(&lcd_spi_dev_driver);
}
但是在新版本的kernel中,这些代码都被移除掉了,我想请问下:在引入device tree之后,如果要执行spi初始化lvds panel的代码,这个是在lvds的dts部分配置还是在spi的dts部分配置? 另外kernel中是否已经存在有类似的code? 谢谢
fancy
2016-03-11 14:58
2016-03-11 14:58
WoWo你好,
请教一个问题, 我目前碰到系统在刚唤醒的时候,通过get_monotonic_boottime获取的时间没有包含系统sleep的时间,如果等待大约300ms左右,此时通过get_monotonic_boottime就能获取到包含了系统sleep的时间。
请问在系统刚被唤醒的时候,通过什么接口能够获取到包含了睡眠的时间?不甚感激!
请教一个问题, 我目前碰到系统在刚唤醒的时候,通过get_monotonic_boottime获取的时间没有包含系统sleep的时间,如果等待大约300ms左右,此时通过get_monotonic_boottime就能获取到包含了系统sleep的时间。
请问在系统刚被唤醒的时候,通过什么接口能够获取到包含了睡眠的时间?不甚感激!
wowo
2016-03-11 16:48
2016-03-11 16:48
@fancy:我对这个应用场景也不是很熟悉,不过可以提供一些思路,供你参考:
首先你用的这个接口应该是对的,问题是为什么会delay了300ms?
从timekeeping的resume流程来看(timekeeping_resume),有两个方法更新suspend的时间:
1)你所使用的clocksource支持suspend nonstop(CLOCK_SOURCE_SUSPEND_NONSTOP)。
2)rtc_resume的时候调用timekeeping_inject_sleeptime更新。
那么问题来了,你的平台使用的是什么方法?你在什么时机调用get_monotonic_boottime获取boot time呢?
首先你用的这个接口应该是对的,问题是为什么会delay了300ms?
从timekeeping的resume流程来看(timekeeping_resume),有两个方法更新suspend的时间:
1)你所使用的clocksource支持suspend nonstop(CLOCK_SOURCE_SUSPEND_NONSTOP)。
2)rtc_resume的时候调用timekeeping_inject_sleeptime更新。
那么问题来了,你的平台使用的是什么方法?你在什么时机调用get_monotonic_boottime获取boot time呢?
fancy
2016-03-14 15:33
2016-03-14 15:33
@wowo:谢谢wowo的回复。
我是nexus5的开发平台(高通),在系统休眠后,mcu触发中断唤醒系统,在第一次中断处理函数中去获取boot time的。但是看log, 在“timekeeping_resume”中得到的timekeeping_suspend_time是0。 但是在第二次或第三次中断处理函数中再用get_monotonic_boottime去获取AP time, 这个时间就包含了系统suspend的时间。貌似timekeeping_resume获取到的suspend时间无法及时更新。
[ 341.333599] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 341.424081] PM: suspend of devices complete after 79.244 msecs
[ 341.430902] PM: late suspend of devices complete after 1.896 msecs
[ 341.438512] PM: noirq suspend of devices complete after 2.369 msecs
[ 341.444145] Disabling non-boot CPUs ...
[ 341.454448] msm_pm_enter
[ 341.454448] msm_pm_enter: power collapse
[ 341.454448] msm_pm_enter collapsed=1
[ 341.454465] timekeeping_resume() 0 0-----------------suspend tims is 0 (tv_sec and tv_nsec)
[ 341.458198] Enabling non-boot CPUs ...
[ 341.467805] CPU1 is up
[ 341.471267] PM: noirq resume of devices complete after 1.804 msecs
[ 341.477099] Resume caused by IRQ 301, qpnp_rtc_alarm
[ 341.481485] Resume caused by IRQ 200, qcom,smd-rpm
[ 341.487958] PM: early resume of devices complete after 1.509 msecs
我是nexus5的开发平台(高通),在系统休眠后,mcu触发中断唤醒系统,在第一次中断处理函数中去获取boot time的。但是看log, 在“timekeeping_resume”中得到的timekeeping_suspend_time是0。 但是在第二次或第三次中断处理函数中再用get_monotonic_boottime去获取AP time, 这个时间就包含了系统suspend的时间。貌似timekeeping_resume获取到的suspend时间无法及时更新。
[ 341.333599] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 341.424081] PM: suspend of devices complete after 79.244 msecs
[ 341.430902] PM: late suspend of devices complete after 1.896 msecs
[ 341.438512] PM: noirq suspend of devices complete after 2.369 msecs
[ 341.444145] Disabling non-boot CPUs ...
[ 341.454448] msm_pm_enter
[ 341.454448] msm_pm_enter: power collapse
[ 341.454448] msm_pm_enter collapsed=1
[ 341.454465] timekeeping_resume() 0 0-----------------suspend tims is 0 (tv_sec and tv_nsec)
[ 341.458198] Enabling non-boot CPUs ...
[ 341.467805] CPU1 is up
[ 341.471267] PM: noirq resume of devices complete after 1.804 msecs
[ 341.477099] Resume caused by IRQ 301, qpnp_rtc_alarm
[ 341.481485] Resume caused by IRQ 200, qcom,smd-rpm
[ 341.487958] PM: early resume of devices complete after 1.509 msecs
yun_2106118
2016-03-08 23:31
2016-03-08 23:31
大家好,我现在遇到一个休眠问题,系统经常性遇到休眠不下去的问题,但是不是必然的,都是在frezz阶段失败,
Freezing of tasks aborted after 0.045 seconds,active wakeup source: alarm,请问下这个怎么去查。系统是5.1系统除此以外,系统没有其他wake_lock。睡眠不下去的时候,就一直重复上述frezz过程,不知道为什么alarm一直阻止,按理说,如果alarm没有执行完毕,不会再次启动睡眠流程啊。请各位帮忙指导下,谢谢
Freezing of tasks aborted after 0.045 seconds,active wakeup source: alarm,请问下这个怎么去查。系统是5.1系统除此以外,系统没有其他wake_lock。睡眠不下去的时候,就一直重复上述frezz过程,不知道为什么alarm一直阻止,按理说,如果alarm没有执行完毕,不会再次启动睡眠流程啊。请各位帮忙指导下,谢谢
wowo
2016-03-09 14:23
2016-03-09 14:23
@yun_2106118:建议先检查一下这个wakeup source是kernel driver持有的,还是Android通过wakelock持有的,如果是driver持有的,可能是RTC相关的驱动有问题,如果是Android持有的,用dumpsys alarm,查一下系统是不是有异常的alarm设置。
yun_2106118
2016-03-09 23:03
2016-03-09 23:03
@wowo:谢谢wowo的回复,我看过wake_lock是没有任何锁的,而wakeup_souce中能够看到仅仅alarm是active状态,因此看起来时的确是kernel 锁,但是kernel里面是没有任何程序去使用rtc的,所以才有点纠结。我还是在查查kernel,如果有好的建议,还请多多指教。谢谢。
功能
最新评论
- wangjing
写得太好了 - wangjing
写得太好了! - DRAM
圖面都沒辦法顯示出來好像掛點了。 - Simbr
bus至少是不是还有个subsystem? - troy
@testtest:只要ldrex-modify-strex... - gh
Linux 内核在 sparse 内存模型基础上实现了vme...
文章分类
随机文章
文章存档
- 2025年4月(5)
- 2024年2月(1)
- 2023年5月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)
2016-06-17 10:25
我觉得,这个意见,很好、很尖锐、也很矛盾。我需要小心的回答,也欢迎更多的人留言讨论(为了方便,我把它转移到留言板了),讨论的结果,我会更新到“关于蜗窝”页面。
有一点需要更正一下,蜗窝不仅仅是“一个主要针对linux内核和驱动深入研究的地方”。因为技术是相通的,不应该有界限。无论是linux kernel、还是RTOS、还是应用软件,无论是软件设计、还是硬件设计、还是产品设计,其背后的指导思想都是相同的。
从表面看,蜗窝为大家分享了很多技术文章,有些文章可能帮到了某些人,但这并不是蜗窝的直接目的(因此CSDN不是蜗窝的榜样)。
蜗窝的直接目的,是通过整理、分享一些文章,以便加深自己的理解,提升自己的能力。
在这个基础上,如果我们整理、分享出来的这些文章,条理和逻辑足够清晰,以至于可以启发、帮助到他人,就再好不过了,就当是利己利人吧。
隐藏在这背后的,就是蜗窝的理念,以及一直没敢说出来的目标(太宏大、太困难、太不切实际,因此怕被笑话),就是改变国内的技术氛围,改变从业者对待技术、对待自己所从事的工作以及对待自己的态度。
怎么改变呢?从对待技术和工作的态度做起:沉得住气,细致、认真,善于总结,善于刨根问底,能够认同所从事的工作,并从中获得愉悦感和充实感。
这就是蜗窝一直鼓励大家分享的原因所在,分享是到达这个目的的第一步,从不假思索的索取模式,转换为思考模式,哪怕思考的过程只有自己能懂,也足够了(达者兼济天下 穷者独善其身)。
最后,就是分享的质量了,说实话,我也很矛盾。正如您所说,linuxer和我写的一些文章,虽然不是特别好,但也不算差,在百度和谷歌的搜索排名,基本上都是第一页,这是蜗窝的荣幸,但我们不应满足于此。
因此,对于其他同学的分享,我们的要求很简单,原创+有自己的思考,至少能把自己写明白,最好能坚持、有进步。当然,有些可能对蜗窝有影响,希望大家宽容对待。
也希望迈出第一步和大家分享的同学,把压力转化为动力,精益求精,像对待知己、恋人、孩子一样,对待自己的文字。