留言板
路过的蜗牛们,在这里留个脚印吧~
蜗窝欢迎各种言论,谈天说地、技术交流、问题求救、跳槽招聘、牢骚抱怨……哈哈。
评论:
wowo
2015-11-18 09:41
2015-11-18 09:41
@passerby:源码可以参考这里:fs/open.c
SYSCALL_DEFINE1(chroot, const char __user *, filename)
SYSCALL_DEFINE1(chdir, const char __user *, filename)
SYSCALL_DEFINE1(chroot, const char __user *, filename)
SYSCALL_DEFINE1(chdir, const char __user *, filename)
man8266
2015-10-31 08:27
2015-10-31 08:27
非常好的原创,我正在拜读wowo的大作,收益很大。做过多年的嵌入式软硬件设计,但LINUX经验还不是很丰富,最近有low power方面的任务,搞的晕头转向。我们系统以前的low power机制与LINUX机制差别很大,读了本站的一些文章之后(还没读完),有点感觉了。多谢多谢。
Daniel Shieh
2015-10-21 11:17
2015-10-21 11:17
最近遇到一个Linux死机的问题,大致现象是这样的:
x86平台,用的CentOS系统,kernel是3.10,应用层频繁调用ioctl去读写一个离散量(寄存器),只开一个终端,高频率调用,没出现死机情况。多终端,同时运行这个应用,会死机。应用中ioctl读写离散量的频率是50ms间隔连续读写三次,大概开四个终端,一分钟左右死机,频率在500ms的时候就是三四个小时死机。
3.10版本内核中file_operations结构体已经没了ioctl成员,已经用unlocked_ioctl取代了,而这个字义上就是没有锁,其实看了源码,就是去了大内核锁,后来,我在unlocked_ioctl方法中自己实现了读写锁和自旋锁版本,但是都还是出死机问题,是在读写寄存器前后加的锁。应用中把ioctl的写操作去掉的话,多终端运行一晚上,12个小时也没有死机,看现象肯定是和写操作有关系,这里有必要加锁吗?加锁不加锁都出死机问题,崩溃啊。
窝窝和linuxer大神,这种情况可能是什么问题?现在没什么思路了。指点一下吧。
x86平台,用的CentOS系统,kernel是3.10,应用层频繁调用ioctl去读写一个离散量(寄存器),只开一个终端,高频率调用,没出现死机情况。多终端,同时运行这个应用,会死机。应用中ioctl读写离散量的频率是50ms间隔连续读写三次,大概开四个终端,一分钟左右死机,频率在500ms的时候就是三四个小时死机。
3.10版本内核中file_operations结构体已经没了ioctl成员,已经用unlocked_ioctl取代了,而这个字义上就是没有锁,其实看了源码,就是去了大内核锁,后来,我在unlocked_ioctl方法中自己实现了读写锁和自旋锁版本,但是都还是出死机问题,是在读写寄存器前后加的锁。应用中把ioctl的写操作去掉的话,多终端运行一晚上,12个小时也没有死机,看现象肯定是和写操作有关系,这里有必要加锁吗?加锁不加锁都出死机问题,崩溃啊。
窝窝和linuxer大神,这种情况可能是什么问题?现在没什么思路了。指点一下吧。
lucky
2015-09-12 20:42
2015-09-12 20:42
Linux内核版本推荐和区别
您好!
我想请教下uboot和Linux kernel重要的几个版本推进,更新版本新引入的机制或策略?比如kernel后面引入device tree的机制。
之前在网上学习的,很多是以前版本的,比如linux 2.6 ,uboot1.x,然后在接触新版本的时候,不了解变化,导致走了很多弯路,才发现机制有所变化。
感谢!希望能得到您的指导!
您好!
我想请教下uboot和Linux kernel重要的几个版本推进,更新版本新引入的机制或策略?比如kernel后面引入device tree的机制。
之前在网上学习的,很多是以前版本的,比如linux 2.6 ,uboot1.x,然后在接触新版本的时候,不了解变化,导致走了很多弯路,才发现机制有所变化。
感谢!希望能得到您的指导!
linuxer
2015-09-14 12:35
2015-09-14 12:35
@lucky:我定义你说的重要的几个版本就是long term的版本,具体如下:
longterm: 3.18.21
longterm: 3.14.52
longterm: 3.12.47
longterm: 3.10.88
longterm: 3.4.108
longterm: 3.2.71
longterm: 2.6.32.67
这些longterm的版本不会增加新的功能,但是会修复各种issue。选定了这些版本之后,可以通过changelog了解各个版本之间的功能的不同,我没有仔细研究这些版本的不同,因此无法给出具体的信息,如果你有兴趣可以去看看,有什么心得可以发布在网站上哦
longterm: 3.18.21
longterm: 3.14.52
longterm: 3.12.47
longterm: 3.10.88
longterm: 3.4.108
longterm: 3.2.71
longterm: 2.6.32.67
这些longterm的版本不会增加新的功能,但是会修复各种issue。选定了这些版本之后,可以通过changelog了解各个版本之间的功能的不同,我没有仔细研究这些版本的不同,因此无法给出具体的信息,如果你有兴趣可以去看看,有什么心得可以发布在网站上哦
printk
2015-08-17 11:28
2015-08-17 11:28
@wowo 大神 ,请教一个问题,关于kdump的,我们单位现在开发的基于arm V7平台的freescale IMX6 CPU的设备,现在由于内核不稳定,导致的死机问题增多,想问一下有没有什么类似于kdump的功能,能在内核freeze的时候提供一个core文件,定位到问题发生点。但是kdump不支持arm平台,使用ftrace跟踪,显示的特别乱,并且如果调用过多,无法跟踪到最后死机现场。
求教~~~~~
求教~~~~~
wowo
2015-08-17 14:24
2015-08-17 14:24
@printk:抱歉,我也不是很了解这一块的内容,因为一般情况下,内核崩溃用ksymoops也就足够了,不知道为什么一定需要kdump?另外,arm下应该也可以用kdump,只是要编译两个kernel image吧(因为ARM不支持重定向内核)。
fire
2015-08-15 17:10
2015-08-15 17:10
版主你好,
你对Linux的管理流程很深入,请教个问题,最近碰到的critical bug都和PM有关。
什么时候会使用PM resume唤醒Kernel呢? 只有电源芯片,外部IRQ之类的才能PM resume吗?
我们系统上的pm resume代码如下, 我想问下,系统挂起后,是不是只要PM resume之后,才能接收到runtime resume?
atomic_set(&motg->pm_suspended, 0);
if (motg->async_int || motg->sm_work_pending) {
pm_runtime_get_noresume(dev);
ret = msm_otg_resume(motg);
/* Update runtime PM status */
pm_runtime_disable(dev); //不是很明白这三句的含义
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
if (motg->sm_work_pending) {
motg->sm_work_pending = false;
msm_queue_sm_work(motg);
}
}
你对Linux的管理流程很深入,请教个问题,最近碰到的critical bug都和PM有关。
什么时候会使用PM resume唤醒Kernel呢? 只有电源芯片,外部IRQ之类的才能PM resume吗?
我们系统上的pm resume代码如下, 我想问下,系统挂起后,是不是只要PM resume之后,才能接收到runtime resume?
atomic_set(&motg->pm_suspended, 0);
if (motg->async_int || motg->sm_work_pending) {
pm_runtime_get_noresume(dev);
ret = msm_otg_resume(motg);
/* Update runtime PM status */
pm_runtime_disable(dev); //不是很明白这三句的含义
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
if (motg->sm_work_pending) {
motg->sm_work_pending = false;
msm_queue_sm_work(motg);
}
}
wowo
2015-08-17 14:09
2015-08-17 14:09
@fire:1. 什么时候会使用PM resume唤醒Kernel呢?
====================================
我不太确定您这里的“PM resume”指的是什么,是指System sleep过程中的resume动作(和Runtime PM对应)吗?如果是的话,resume是和suspend成对出现的,只有suspend了,才会resume。
2. 一般情况下,唤醒源是那些没有被disable的中断,电源芯片应该也是其中的一种,和具体系统的设计有关。
3. 我们系统上的pm resume代码如下, 我想问下,系统挂起后,是不是只要PM resume之后,才能接收到runtime resume?
======================================================
这个问题的本质是Runtime PM和System sleep(suspend&resume etc.)之间的交互, 我一直没有来得及写。您可以先参考“Documentation/power/runtime_pm.txt”中的相关的内容,这里我们先简单的讨论一下。
a)就某个设备而言,suspend的过程中,RPM和System sleep之间的关系可以分为三种:一,先RPM suspend,后System sleep suspend;二,先System sleep suspend,后RPM suspend;三,RPM suspend和System sleep suspend之间互相交叉。
b)显然,kernel power managerment的同步机制应该会保证第三种情况不会发生,就先忽略。
c)第二种情况,由于先System sleep suspend,情况比较简单,PM core会在prepare阶段(suspend_devices_and_enter->dpm_suspend_start->dpm_prepare->device_prepare),get一次RPM的引用计数(pm_runtime_get_noresume),以保证系统不会再RPM suspend,此后的过程,就是正常的suspend流程。因此这种情况也不会发生。
d)第一种情况有些复杂,如果设备已经RPM suspend了,那么System sleep suspend要怎么做?要强调的是,这种情况下,RPM suspend、System sleep suspend以及后续的resume行为,完全是由设备驱动决定的,例如,RPM suspend执行“浅睡眠(可以唤醒系统)”,System sleep suspend执行“深睡眠(不可以唤醒系统)”,等等。
e)因此,设备驱动对已经RPM suspend的设备,再执行System sleep suspend时,很有可能会先把设备从RPM suspend状态唤醒,然后再让它进入System sleep suspend状态,而这一切Runtime PM已经不知情了。
f)回到resume的过程,来探讨一下您提出的两个问题(主要针对第一种情况)。
g)首先,系统没有从suspend状态resume的时候,RPM机制肯定是没有激活的,因此,肯定是System sleep resume后,才可能有RPM resume。至于是否一定有RPM resume,这依赖于System sleep resume后,设备的实际状态。
h)如果设备在System sleep suspend之前,已经RPM suspend了,它的RPM status就是SUSPEND状态。但在System sleep resume之后,设备有可能直接变成full power on状态了(这和设备驱动的策略有关),因此就和RPM的实际status不符,怎么办呢?手动修改RPM状态,使其变成ACTIVE的(pm_runtime_set_active(dev) ),这就是那三句话的意思。
I)最后,如果设备已经是RPM ACTIVE了,在需要RPM resume的时候,就不会再真正执行resume操作;甚至,如果之后不需要再使用设备,有可能会执行RPM suspend。
有点长,希望能帮到您。
====================================
我不太确定您这里的“PM resume”指的是什么,是指System sleep过程中的resume动作(和Runtime PM对应)吗?如果是的话,resume是和suspend成对出现的,只有suspend了,才会resume。
2. 一般情况下,唤醒源是那些没有被disable的中断,电源芯片应该也是其中的一种,和具体系统的设计有关。
3. 我们系统上的pm resume代码如下, 我想问下,系统挂起后,是不是只要PM resume之后,才能接收到runtime resume?
======================================================
这个问题的本质是Runtime PM和System sleep(suspend&resume etc.)之间的交互, 我一直没有来得及写。您可以先参考“Documentation/power/runtime_pm.txt”中的相关的内容,这里我们先简单的讨论一下。
a)就某个设备而言,suspend的过程中,RPM和System sleep之间的关系可以分为三种:一,先RPM suspend,后System sleep suspend;二,先System sleep suspend,后RPM suspend;三,RPM suspend和System sleep suspend之间互相交叉。
b)显然,kernel power managerment的同步机制应该会保证第三种情况不会发生,就先忽略。
c)第二种情况,由于先System sleep suspend,情况比较简单,PM core会在prepare阶段(suspend_devices_and_enter->dpm_suspend_start->dpm_prepare->device_prepare),get一次RPM的引用计数(pm_runtime_get_noresume),以保证系统不会再RPM suspend,此后的过程,就是正常的suspend流程。因此这种情况也不会发生。
d)第一种情况有些复杂,如果设备已经RPM suspend了,那么System sleep suspend要怎么做?要强调的是,这种情况下,RPM suspend、System sleep suspend以及后续的resume行为,完全是由设备驱动决定的,例如,RPM suspend执行“浅睡眠(可以唤醒系统)”,System sleep suspend执行“深睡眠(不可以唤醒系统)”,等等。
e)因此,设备驱动对已经RPM suspend的设备,再执行System sleep suspend时,很有可能会先把设备从RPM suspend状态唤醒,然后再让它进入System sleep suspend状态,而这一切Runtime PM已经不知情了。
f)回到resume的过程,来探讨一下您提出的两个问题(主要针对第一种情况)。
g)首先,系统没有从suspend状态resume的时候,RPM机制肯定是没有激活的,因此,肯定是System sleep resume后,才可能有RPM resume。至于是否一定有RPM resume,这依赖于System sleep resume后,设备的实际状态。
h)如果设备在System sleep suspend之前,已经RPM suspend了,它的RPM status就是SUSPEND状态。但在System sleep resume之后,设备有可能直接变成full power on状态了(这和设备驱动的策略有关),因此就和RPM的实际status不符,怎么办呢?手动修改RPM状态,使其变成ACTIVE的(pm_runtime_set_active(dev) ),这就是那三句话的意思。
I)最后,如果设备已经是RPM ACTIVE了,在需要RPM resume的时候,就不会再真正执行resume操作;甚至,如果之后不需要再使用设备,有可能会执行RPM suspend。
有点长,希望能帮到您。
功能
最新评论
文章分类
随机文章
文章存档
- 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)
2015-11-17 17:00