Andriod深度探索—HAL与驱动开发 第十 章 读书笔记and一点心得

 打印内核调试信息:printk

Printk函数的用法与printf函数相似,只不过printk函数运行在内核空间,printf函数运行在用户空间。

Prink函数在printk.c文件中实现,该文件的路径如下:

/root/kernel/linux_kernel_2.6.36/kernel/printk.c

Printk函数至少要有一个参数(格式字符串)如果格式字符串中包含有占位符(%d、%s等),后面必须跟与占位符相等数量的参数,以便一一对应传入printk函数。

Printk文件是一个简单的有4个数字组成的文本文件,该文本的默认数值如:6     4     1     7

这4个数字的含义如下:

6:将消息输出到控制台的级别。只有高与该级别的输出信息才会输出到控制台。

4:默认的消息日志级别。如果不在printk函数中指定日志级别,就会使用该值作为默认级别。

1:控制台日志级别可被设置的最小值(最高优先级别)。

7:控制台日志级别的默认值。

防止printk函数降低Linux驱动性能

Printk函数在控制台显示消息是通过/dev/console设备文件实现的。该设备文件只在字符界面的控制台下才起作用,所以printk函数只有用在字符界面的控制台上才能正常输出消息。

如果不想使用printk输出消息,只要将“#if1”中的1改为0即可。

通过虚拟文件系统(/proc)进行数据交互

   Create_proc_read_entry函数在内部是通过调用Create_proc_entry函数实现的。

Linux文件的读写由属性决定

删除虚拟目录之前,要先删除虚拟目录中的虚拟文件

调试工具

用gdb调试用户空间程序

用gdbserver远程调试用户空间程序

用kgdb远程调试内核程序

心得:Linux内核调试移植被很多人认为是非常困难的。大多数人宁愿直接使用printk函数输出调试信息,也不愿意使用各种命令进行调试。因为这样做并不一定能换来更多的好处。这里除了介绍了printk函数调试技术外,也介绍了其他的调试技术。这些调试技术虽然不一定都能用到,但是了解还是非常有必要的。

本人博客地址:http://home.cnblogs.com/u/jie617530/

时间: 2024-10-22 03:50:59

Andriod深度探索—HAL与驱动开发 第十 章 读书笔记and一点心得的相关文章

Andriod深度探索—HAL与驱动开发 第八 章 读书笔记and一点心得

Linux驱动的代码重用 Linux 驱动的代码重用有很多种方法.可以采用标准C 程序的方式.将要重用的代码放在其他的文件(在头文件中声明〉中.如果要使用某些功能, include 相应的头文件即可(这种方式称为静态重用).也可以使用另外一种动态重用的方式,也就是一个Linux 驱动可以使用另外←个Linux驱动中的资源(函数.变量.宏等〉. 强行卸载Linux驱动  如果编写的Ljnux 驱动程序在逻辑上是正确的,那么可以正常装载和卸载,但在某些情况下,可能某些程序会出现异常情况.这时Linu

Andriod深度探索—HAL与驱动开发 第七章 读书笔记and一点心得

创建LED驱动的设备文件 第1步:使用cdev_init函数初始化cdev 第2步:指定设备号.直接在代码指定或动态分配 第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第4步:使用class_create宏创建struct class 第5步:使用device_create函数创建设备文件 卸载LED驱动的设备文件 需要依次调用device_destroy.class_destroy和unregister_chrdev_region方法 void device_dest

Andriod深度探索—HAL与驱动开发 第七章 读书笔记

创建LED驱动的设备文件 第1步:使用cdev_init函数初始化cdev 第2步:指定设备号.直接在代码指定或动态分配 第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第4步:使用class_create宏创建struct class 第5步:使用device_create函数创建设备文件 卸载LED驱动的设备文件 需要依次调用device_destroy.class_destroy和unregister_chrdev_region方法 void device_dest

Android深度探索--HAL与驱动开发----第五章读书笔记

第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们经常用的手机类似, 也包含显示屏. 键盘. Wi-Fi. 蓝牙等模块(可 能有的是选配〉.但与手机不同的是在开发板上安装嵌入式系统要比手机容易得多.而且一般开发 扳都有很多扩展的端口,可以很容易开发定制的硬件, 并与开发板链接.因此,开发板相对于孚机 来说,更适合对程序进行测试,尤其适合对底层的 L

Android深度探索--HAL与驱动开发----第六章读书笔记

Linux驱动程序与其他类型的Linux程序一样拥有自己的规则,下面给出一个编写基本的Linux驱动的一般步骤: (1)建立Linux驱动的骨架(装载和卸载Linux驱动): (2)注册和注销设备文件: (3)指定与驱动相关的信息: (4)指定回调函数: (5)编写业务逻辑: (6)编写Makefile文件: (7)编译Linux驱动程序: (8)安装和卸载Linux驱动. 对于一个Linux驱动程序,一开始可以在Ubuntu Linux上做前期开发和测试.对于访问硬件的部分也可以在Ubuntu

Android深度探索--HAL与驱动开发----第四章读书笔记

1. 下载.编译.测试源代码 创建存放下载文件的目录(repo) 下载repo脚本文件 创建用于存放源代码的目录 开始下载源代码. 2. 源代码目录含义摘要 Abi 应用程序二进制接口 Device 于设备相关的代码 External 宽展工具源代码 Ndk NDK相关的源代码 Sdk SDK如ddms.draw9patch.sdkmannager. System Android的基本系统 3. 下载源代码中的一部分 使用repo sync命令 使用git clone命令 4. linux内核目

Android深度探索--HAL与驱动开发----第七章读书笔记

首先创建led驱动的设备文件,可以使用cdev_init,register_chrdev_region,cdev_add等建立主设备号的设备文件.步骤如下: 1使用cdev_init初始化cdev 2指定设备号 3使用cdev_add函数将字符设备添加到内核中的字符设备组中 4使用class_creat宏创建struct class 5使用device_creat函数创建设备文件 然后卸载led驱动的设备文件 {Device_destroy(leds_class,dev_number); If(

Android深度探索--HAL与驱动开发----第三章读书笔记

1. 什么是Git? Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. 2. Git的安装. # apt-get install git #apt-get install git-doc git-svn git-email git-gui gitk 在Linux下可以直接使用man命令查看指定命令的帮助文档 #git help <sub-comm

Android深度探索HAL与驱动开发 第四章

Android深度探索HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 一.下载编译和测试Android源代码 1.配置Android源代码下载环境 创建一个用于存放下载脚本文件的目录(可将该文件放到任何一个目录在这里使用-/bin) # mkdir ~/bin # PATH=~/bin:$PATH 2.下载repo脚本文件(用于下载Android源代码) # curl htttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/