上一节的程序很振奋人心,我们自己实现了一个myprintk打印函数.但是这个函数存在一个致命的缺陷,那就是只能使用一次cat /proc/mymsg命令来读取mylog_buf的值.这是因为读到最后会出现:mylog_r == mylog_w,表示缓冲区为空,下一次就不能在读到数据了.在本节里面我们就着手来解决这个问题,我们要实现的就是每次使用 cat /proc/mymsg 时,都会从头打印.那么我们就需要将入口做一个拷贝,一个保存起来,一个进行变换.这样的话,当下一次读的时候,我们可以将保存…
首先我们需要弄清楚proc机制,来看看fs/proc/proc_misc.c这个文件,从入口函数开始看: proc_misc_init(void)         #ifdef CONFIG_PRINTK { struct proc_dir_entry *entry; entry = create_proc_entry("kmsg", S_IRUSR, &proc_root);//这里创建了一个proc入口kmsg if (entry) entry->proc_fops…
1.基本原理 (1)在UBOOT里设置console=ttySAC0或者console=tty1 这里是设置控制终端,tySAC0 表示串口, tty1 表示lcd(2)内核用printk打印 内核就会根据命令行参数来找到对应的硬件操作函数,并将信息通过对应的硬件终端打印出来!   2.printk的使用 (1)printk函数的信息如何才能在终端显示出来 在内核代码include/linux/kernel.h中,定义了控制台的级别: extern int console_printk[]; #…
1,printk类似于用户态的printf函数,但是比printf函数多了一个日志级别,内核中最常见的日志输出都是通过调用printk来实现的,其打印级别有8种可能的记录字串, 在头文件 <Linux/kernel.h> 里定义: KERN_EMERG  0用于紧急消息, 常常是那些崩溃前的消息. KERN_ALERT  1需要立刻动作的情形. KERN_CRIT  2严重情况, 常常与严重的硬件或者软件失效有关. KERN_ERR  3用来报告错误情况; 设备驱动常常使用KERN_ERR 来…
驱动程序的调试一. 打印: prink, 自制proc文件UBOOT传入console=ttySAC0 console=tty11. 内核处理UBOOT传入的参数console_setup add_preferred_console // 我想用名为"ttySAC0"的控制台,先记录下来 2. 硬件驱动的入口函数里: drivers/serial/s3c2410.c register_console(&s3c24xx_serial_console); 3. printk vpr…
转载▼http://blog.sina.com.cn/s/blog_48462a890102e0nu.html     1.在桌面上新建一个文本文档,如:“新建 文本文档.txt”,方法是:在桌面的空白处右键,选择:新建-文本文档,在文档中含有: @echo off set p=c:\program files\winrar\ "%p%rar.exe" a -sfx -p g:\temp.exe g:\temp @ echo. & pause (命令中红色部分是要压缩的文件,蓝…
在一个我们谈到了如何编写一个简单的字符设备驱动程序,我们不是神,编写肯定会失败的代码,在这个过程中,我们需要继续写代码调试.在普通c应用.我们经常使用printf输出信息.或者使用gdb要调试程序,然后司机如何调试它?的问题,在应用程序中执行这样的程序就会报segmentation fault的错误,而因为驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机.并会抛出oops信息.那么我们怎样来分析oops信息呢,甚至依据oops信息来定位详细的出错的代码行呢?以下就依据一个简单的实例来说明怎…
在做内核驱动开发的时候,能够使用/proc下的文件,获取对应的信息,以便调试. 大多数/proc下的文件是仅仅读的,但为了演示样例的完整性,都提供了写方法. 方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危急): 方法二:使用proc_create和seq_file创建proc文件(较方法三简洁): 方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比較完整): 演示样例四:在proc文件里使用内核链表的一个演…
在这样做的内核驱动程序的开发时间.可以使用/proc下档.获取相应的信息.对于调试. 大多数/proc下的文件是仅仅读的.但为了演示样例的完整性.都提供了写方法. 方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危急): 方法二:使用proc_create和seq_file创建proc文件(较方法三简洁): 方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比較完整): 演示样例四:在proc文件里使用内核链表的…
http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关.若结果为0,则表示关闭了此功能,不会生成core文件. (2)使用ulimit -c filesiz…