随笔分类 - Linux
摘要:在文章《ARM linux kernel从入口到start_kernel代码分析 -- 只到machine type选中为止》中,bootloader将machine type(是一个数字)放在了R5寄存器里面,然后linux kernel枚举所有machine type数字,找到匹配的,然后执行machine_desc结构中的一系列初始化函数。那在编写kernel driver的时候,如何给板子申明一个machine type的数字?这个数字就是machine_desc结构中nr这个member的值。当使用MACHINE_START宏定义自己板子的machine_desc结构的时候,假设给.
阅读全文
摘要:转载自:http://blog.sina.com.cn/bytex本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入start_kernel()函数.我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会加上行号以便于和源码进行对照.例:在文件init/main.c中:00478: asmlinkage void __init start_kernel(void)前面的"00478:" 表示478行,冒号后面的内容就是源码了.在分析代码的过程中,我们使用缩进来表示各个代码的调用层次.由于启动部分有一些代码是平台特定
阅读全文
摘要:在kernel的printk.c中,有一个全局变量console_suspend_enabled,这个变量控制着当suspend之后,是否还可以往console上输出message。默认是不可以的。这会给debug带来一些困扰,尤其是suspend之后如果出现kernel panic或是其他异常情况的时候。所以,可以修改这个变量然后重新编译kernel,或者kernel也提供了一个kernel cmdline:no_console_suspend,在kernel config的时候定义就OK了。但是kernel的这个no_console_suspend的cmdline似乎不起作用,看了一下代.
阅读全文
摘要:MediaInfo是个opensource project,有个应用程序可以查看一个media的详细信息。射手播放器也依赖mediainfo提供的MediaInfo.dll来给出media的信息。对于multimedia developer来说,这是个非常不错的工具。
阅读全文
摘要:export ARCH=armexport CROSS_COMPILE=armv7a-cros-linux-gnueabi-/* make menuconfig, make oldconfig, make xxx_defconfig */make uImagemake modulesDESTDIR=./modules_install make modules_install INSTALL_MOD_PATH=./modules_install
阅读全文
摘要:Probably the most powerful tracer derived from Ftrace is the function tracer. It has the ability to trace practically every function in the kernel. It can be run not just for debugging or analyzing, but also to learn and observe the flow of the Linux kernel.Two previous articles, Debugging the Linu.
阅读全文
摘要:来自:http://lwn.net/Articles/365835/Ftrace是很棒的kernel debug工具,相比使用printk或其他打印message的方法,ftrace有更强大的debug功能。其他不说,由于printk的执行时间是毫秒级别的,所以printk的加入会导致一些并发行的bug很难重现。而ftrace使用的是ringbuffer,所以时间是微秒级的,这就已经是一个很明显的优势了。还有包括kernel panic/oops的时候可以将trace dump出来等。具体见下文,一共三个part。Ftrace is a tracing utility built direc.
阅读全文
摘要:The Ftrace tracing utility has many different features that will assist in tracking down Linux kernel problems. The previous article discussed setting up Ftrace, using the function and function graph tracers, using trace_printk(), and a simple way to stop the recording of a trace from user space. T.
阅读全文
摘要:转自:http://hi.baidu.com/johnman/blog/item/69a11a4f2c7b2634aec3ab30.htmlX服务器和WM(window manager 窗口管理器)之间是什么关系. 平时大家起动图形界面是怎么启动的呢? 如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入: init 3 就可以安全的回到字符界面. 好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了. 先输入以下命令: #startx 起动图形界面,你看到的是一个和平时使用一.
阅读全文
摘要:第一種方法:minicom 在 screen 裡, 要如何送 key (Ctrl+) 給 minicom 而不會被 screen 吃掉 ?要按 Ctrl+a a例如:要離開 minicom, 要按 Ctrl+a a q第二種方法:用# minicom -m把 minicom 預設的 Ctrl+ 變成 Alt+
阅读全文
摘要:经测试,select与depends on是相反的逻辑关系。A depends on B那么只有在B选中才能选AA select B那么只要选中A就会选中B所以select叫反向依赖。
阅读全文
摘要:还不错的文档:/Files/super119/Git_Magic.pdf
阅读全文
摘要:Recv-Q:表示收到的数据中还有多少没有被进程取走(通过recv)Send-Q:表示需要发送的数据还有多少没有被发出所以,一般来说这两个值都是0,如果不为0且持续增长,那就表明程序出现了问题。比如Recv-Q的数字持续增长,表示没有进程去取这些收到的数据。比如使用select+recv来收数据的时候,由于select有1024这个限制,所以如果socket的FD大于1024的时候,就会导致这个socket FD上的数据不会被select检测到从而导致recv不会被调用。所以,通过netstat的这两个值就可以简单判断程序收不到包到底是包没到还是包没有被进程recv。
阅读全文
摘要:比如我们有个进程创建了一个socket FD,这个socket监听在UDP 5060端口上。我们现在想知道这个socket在这个进程中对应的FD是多少,那就可以这样:lsof -i @0.0.0.0:5060输出类似:COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEicebox.si 10005 root 10u IPv4 15963326 UDP *:sip所以可以看到是进程10005的10号FD,对应就是这个socket。
阅读全文
摘要:转自:http://www.cnblogs.com/taowen/archive/2012/02/28/2372330.htmlFriendbuy是一家互联网创业公司。产品的源代码是托管在GITHUB上的。在EC2上有三套环境:生产环境,测试环境和持续集成环境。基本上每天都有大量的代码被提交,测试和部署。一年多的磨合下来,逐渐理顺了GIT的使用流程。但是,最开始并不是这样的,所有的开发人员都没有使用过GIT,基本上都是SVN的背景。最开始的使用方式只有一个GIT分支,就是MASTER。开发团队直接向MASTER提交新的改动,部署其实就是在生产环境下执行git pull开发人员的日常工作也很简单
阅读全文
摘要:4个PDF在这(with notes):/Files/super119/CodingStyle.pdf/Files/super119/HOWTO.pdf/Files/super119/stable_api_nonsense.pdf/Files/super119/stable_kernel_rules.pdfCoding styles最有价值,然后是stable API nonsense,然后是HOWTO和stable kernel rules.
阅读全文
摘要:Linux kernel的宏:#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))为什么不会segment fault?因为没有访问那个f。一旦有访问,就会segment fault,比如:#include <stdio.h>struct a{ int f;};void test_func(int f){ // printf("f is: %d\n", f); return;}int main(){ test_func(((struct a *)0)->f); return 0;}这里main里面尝试将f的值
阅读全文
摘要:为了看起来更清晰,这里用一个简单点的宏来演示:#define SAFE_DELETE(p) do{ delete p; p = NULL} while(0)假设这里去掉do...while(0),#define SAFE_DELETE(p) delete p; p = NULL;那么以下代码:if(NULL != p) SAFE_DELETE(p)else ...do sth...就有两个问题,1) 因为if分支后有两个语句,else分支没有对应的if,编译失败2) 假设没有else, SAFE_DELETE中的第二个语句无论if测试是否通过,会永远执行。你可能发现,为了避免这两个问题,我不一
阅读全文
摘要:编程优化:1. 编程优化,比如Fortran二维数组中,要按行存放,按列访问,这样可以让cache工作更高效。2. 循环展开,如CPU一拍能做四次浮点运算,那么可以将一个浮点计算循环(计算内容简单的)拆分成每次循环step为4,循环体内手动做四次循环代码。这样代码不好看,但是能得到性能提高。3. 运算顺序的调整,减少CPU流水线的迟滞。可以和循环展开配合,得到更好的性能。3. 针对Cache的优化。 数组合并: 利用块长,改善空间局部性 循环交换: 改变嵌套循环中访问内存的次序 循环合并: 增强数据的可重用性(时间局部性) 分块: 集中访问可取入cache的块状矩阵,避免全行或全列的读写,以增
阅读全文
摘要:Chapter 1 & 2: An introduction to device driver & Building and Running modules1. Concurrent, Security -- module writting notes2. Kernel stack is small, normally one page(4K). So don't create a lot of local variables and don't have a long call stack.3. Kernel can't handle float po
阅读全文