留言板

路过的蜗牛们,在这里留个脚印吧~

蜗窝欢迎各种言论,谈天说地、技术交流、问题求救、跳槽招聘、牢骚抱怨……哈哈。

评论:

passerby
2015-11-17 17:00
有人知道sys_chdir和sys_chroot两个函数的源码实现吗
linuxer
2015-11-17 18:23
@passerby:这个问题有点大哦,不好回答。
passerby
2015-11-18 09:01
@linuxer:想看看根目录和当前目录怎么切换的,但是没有找到。。。
passerby
2015-11-18 09:38
@passerby:如果我没猜错,应该最终是调用set_fs_root来实现的。
wowo
2015-11-18 09:41
@passerby:源码可以参考这里:fs/open.c
SYSCALL_DEFINE1(chroot, const char __user *, filename)
SYSCALL_DEFINE1(chdir, const char __user *, filename)
passerby
2015-11-18 10:03
@wowo:Thank you,刚才我搜索set_fs_root时也发现了这里。仔细看了一下,这里定义了系统调用,就是是i西安sys_chroot的地方。最终都是调用set_fs_root和set_fs_pwd来做的根目录和工作目录设定。
dadanio
2015-11-10 15:57
无意中看到一篇你们的文章,明显感觉是自己理解后写出来的,不像很多翻译的或者拷贝的文章还声称是原创,关注你们,希望你们有更多的精华总结。谢谢你们
wowo
2015-11-10 16:49
@dadanio:多谢关注~~~
man8266
2015-10-31 08:27
非常好的原创,我正在拜读wowo的大作,收益很大。做过多年的嵌入式软硬件设计,但LINUX经验还不是很丰富,最近有low power方面的任务,搞的晕头转向。我们系统以前的low power机制与LINUX机制差别很大,读了本站的一些文章之后(还没读完),有点感觉了。多谢多谢。
wowo
2015-10-31 12:14
@man8266:能给您一些帮助,是“蜗窝”的荣幸,欢迎常来,多交流多讨论。
superm
2015-10-30 17:32
看到有这样的团队,感到很兴奋,如果想加入你们,也为该网站写点文章,不知如何联系?
linuxer
2015-10-30 19:41
@superm:欢迎,欢迎!这个团队是一个非常松散的组织,只要热爱技术(不仅仅限于linux),都可以进入这个团队(注册了这个网站的用户就是我们一员了)。当然,我们还是希望这个组织有一个共同的理念,那就是我们网站的宣传语:慢下来,享受技术。

只要注册了用户就都可以写文章发表在这个网站,如果你愿意,还可以在文章后面附注:

原创文章,转发请注明出处。蜗窝科技

当然,有这个附注的文章,我们要求更加严格,希望是有调理,言之有物的,代表蜗窝品质的
Daniel Shieh
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大神,这种情况可能是什么问题?现在没什么思路了。指点一下吧。
linuxer
2015-10-21 13:14
@Daniel Shieh:1、关闭本地中断 + spinlock 应该可以保证硬件操作部分代码的原子性
2、你说的那个离散量(寄存器)是否有特殊的读写要求?例如要求操作的间隔,或者需要polling某个状态寄存器什么的,要等到HW ready之后进行下一次寄存器操作

其他的暂时没有考虑到
~零~
2015-10-09 13:54
一直想学习音频子系统,网上资料实在有点少,各路大神,有没有兴趣写下。。。
lucky
2015-09-12 20:42
Linux内核版本推荐和区别
您好!
   我想请教下uboot和Linux kernel重要的几个版本推进,更新版本新引入的机制或策略?比如kernel后面引入device tree的机制。
   之前在网上学习的,很多是以前版本的,比如linux 2.6  ,uboot1.x,然后在接触新版本的时候,不了解变化,导致走了很多弯路,才发现机制有所变化。
    感谢!希望能得到您的指导!
linuxer
2015-09-13 00:18
@lucky:建议到https://www.kernel.org/上去看看各个版本的change log就OK了,太宽泛的问题不是很好回答,抱歉。
lucky
2015-09-13 13:34
@linuxer:您好
    我的意思是重要的几个版本。以及它们的关键性的区别
linuxer
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了解各个版本之间的功能的不同,我没有仔细研究这些版本的不同,因此无法给出具体的信息,如果你有兴趣可以去看看,有什么心得可以发布在网站上哦
lieye
2015-08-28 17:36
文章非常棒!
wowo
2015-08-30 07:05
@lieye:谢谢
printk
2015-08-17 11:28
@wowo 大神 ,请教一个问题,关于kdump的,我们单位现在开发的基于arm V7平台的freescale IMX6 CPU的设备,现在由于内核不稳定,导致的死机问题增多,想问一下有没有什么类似于kdump的功能,能在内核freeze的时候提供一个core文件,定位到问题发生点。但是kdump不支持arm平台,使用ftrace跟踪,显示的特别乱,并且如果调用过多,无法跟踪到最后死机现场。

求教~~~~~
wowo
2015-08-17 14:24
@printk:抱歉,我也不是很了解这一块的内容,因为一般情况下,内核崩溃用ksymoops也就足够了,不知道为什么一定需要kdump?另外,arm下应该也可以用kdump,只是要编译两个kernel image吧(因为ARM不支持重定向内核)。
printk
2015-08-21 13:20
@wowo:oops不是很可靠阿 ,,,起码比如说VPU的时钟disable后操作VPU的寄存器,会导致内核freeze,类似与这样的error就不会产生oops。。或者 有些oops还没来得及打到屏幕上,内核就已经挂拉
passerby
2015-08-17 16:43
@printk:感觉你这个要跟飞思卡尔的FAE联系吧,一般SOC厂商都会提供内核崩溃的调试机制。MTK就提供了类似KDUMP的机制可以得到core file + vlinux进行奔溃点调试,高通提供了类似的ramdump机制。这些都是向它们的FAE要datasheet看怎么做。
justin
2015-10-13 14:03
@passerby:同意,死机调试应该是平台基本功能,厂商应该会提供支持的。
fire
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);
        }
    }
fire
2015-08-15 17:12
@fire:我们做唤醒测试时,总是先看到pm resume, 有时候会有run time resume, 有时候又没有。

万分感激!
wowo
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。

有点长,希望能帮到您。

发表评论:

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog