我一直在试验让kgdb工作在Nexus One上。 我已经从https://android.googlesource.com拉内核,并启用一切与kgdb包括使用menuconfig kgdbtstesting。 成功构build内核并将其闪存到设备(已解锁并运行CyanogenMod 7) 我也遵循http://bootloader.wikidot.com/android:kgdb上的说明,使usb连接充当kgdb所需的串行连接(并成功地testing了从ttyACM0到ttyGS0通信)。 存在以下文件夹,指示kgdboc和kgdbts已内置到内核中: /sys/modules/kgdboc/parameters /sys/modules/kgdbts/parameters 以下是dmesg的输出,显示正在完成的kgdbtstesting显示什么(我认为)是testing的成功完成: # dmesg | grep kgdb <6>[ 12.974060] kgdb: Registered I/O driver kgdbts. <6>[ 12.981781] kgdbts:RUN plant and detach test <6>[ 12.995178] kgdbts:RUN sw breakpoint test <6>[ 13.002441] kgdbts:RUN bad memory access test <6>[ 13.010864] kgdbts:RUN singlestep test 1000 iterations <6>[ 13.019042] kgdbts:RUN singlestep [0/1000] […]
我想了解dmesg的时间戳,发现很难将其转换为javadate/自定义date格式。 任何帮助深表感谢。 示例dmesg日志: [14614.647880] airo(eth1): link lost (missed beacons) 谢谢!
在Linux中,当需要从磁盘读取块时,进程状态会发生什么变化? 被封锁了吗? 如果是这样,另一个进程如何select执行?
这是来自操作系统开发网站的第二手问题,但这让我很好奇,因为我无法在任何地方find一个合适的解释。 当使用gcc编译和链接一个独立的C ++程序时,有时会出现这样的链接器错误: out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' 这显然是因为这个符号是在libstdc ++中定义的,在独立的环境中缺less这个符号。 解决这个问题只需要在某个地方定义这个符号: void *__gxx_personality_v0; 这是好的,但我不喜欢神奇的工作…所以问题是,这个符号的目的是什么?
任何人都可以请示例单片和微内核之间的差异解释? 还有其他的内核分类?
陷阱和中断有什么区别? 如果术语对于不同的系统是不同的,那么它们在x86上意味着什么?
我们希望将我们的服务器上的操作系统从Ubuntu 10.04 LTS升级到Ubuntu 12.04 LTS。 不幸的是,运行已经可运行的线程的延迟似乎已经从2.6内核显着增加到了3.2内核。 实际上,我们正在得到的延迟数字是难以相信的。 让我更具体的testing。 我们有一个运行两个线程的程序。 第一个线程获取当前时间(以RDTSC为单位),然后每秒发送一个条件variables。 第二个线程在条件variables上等待并在发送信号时唤醒。 然后获取当前时间(以RDTSC为单位)。 计算第二个线程中的时间和第一个线程中的时间之间的差值并显示在控制台上。 之后,第二个线程再次等待条件variables。 大约一秒钟后,第一个线程会再次发出信号。 所以,简而言之,我们得到一个线程,通过条件variables等待时间测量线程进行一次线程通信 。 在内核2.6.32中,这个等待时间在2.8-3.5 us左右,这是合理的。 在内核3.2.0中,这个延迟已经增加到40-100 us的量级。 我排除了两台主机之间的硬件差异。 它们运行在相同的硬件上(运行于3.6 GHz的双插槽X5687 {Westmere-EP}处理器,具有超线程,speedstep和所有C状态closures)。 testing应用程序改变线程的亲和力,以便在同一个套接字的独立物理核心上运行它们(即,第一个线程在核心0上运行,第二个线程在核心1上运行),所以线程没有弹起核心或弹跳/sockets之间的通信。 两台主机之间的唯一区别是,一台运行Ubuntu 10.04 LTS,内核为2.6.32-28(快速上下文切换框),另一台运行最新的Ubuntu 12.04 LTS,内核为3.2.0-23(缓慢的环境开关盒)。 所有的BIOS设置和硬件都是相同的。 内核中是否有任何变化可以解释为什么这个线程被安排运行需要多长时间? 更新:如果你想在你的主机和linux版本上运行testing,我已经把代码发布到了pastebin中供你阅读。 编译: g++ -O3 -o test_latency test_latency.cpp -lpthread 运行(假设你至less有一个双核心盒): ./test_latency 0 1 # Thread 1 on Core 0 and Thread 2 on […]
从sys.c行123: void *sys_call_table[__NR_syscalls] = { [0 … __NR_syscalls-1] = sys_ni_syscall, #include <asm/unistd.h> }; sys_call_table是一个通用的数组指针,我可以看到。 但是什么是符号: [0 … __NR_syscalls-1] 什么是… ? 编辑: 我在这里学到了另外一个C技巧: #include <asm/unistd.h>将被预处理并replace为其内容,并被分配给[0 … _NR_syscalls-1] 。
内核空间和用户空间有什么区别? 内核空间,内核线程,内核进程和内核堆栈意味着什么? 另外,为什么我们需要这种差异?
我主要使用vim / gvim作为编辑器,并且正在考虑使用lxr(Linux交叉引用)和cscope或ctags的组合来探索内核源代码。 但是,我从来没有使用cscope或ctags,并想知道为什么可以select一个,考虑到我使用vim作为主要编辑器。