Android深度探索与HAL驱动开发(卷1)-- 第十章随笔

第10章 嵌入式Linux的调试技术

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

在编写代码时应了解一下几点:

1、creat_proc_read_entry 函数在内部是通过调用creat_proc_entry 函数实现的。所谓只读就是通过 creat_proc_read_entry 函数可以指定处理文件读动作的函数,并且通过mode参数设置文件的只读属性(0944)。如果想把只读文件改成读写文件,只需要设置处理文件写动作的函数,并且将文件属性改成0666。

2、Linux文件的读写由属性决定。在程序中可以用八进制表示,例如0666表示八进制的666,也就是二进制的 110110110 。如果查看文件属性,会看到文件开头是-rw-rw-rw- 。而将文件属性设为0444,则文件属性是 –r—r—r—r-- ,表示只读。

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

使用gdb_debug时应注意的问题:

由于gdb_server 是基于ARM处理器的程序的调试器(arm_none_linux_gnueabi_gdb),而且最好使用哪个版本编译的程序,就使用与之对应版本的调试器。虽然gdb_debug是在Android模拟器上运行的,但在Linux终端执行调试器是仍然需要指定gdb_debug。

Linux内核调试一直被很多人认为是非常困难的,大多数人宁愿直接使用printk函数输出调试信息,也不愿意使用各种命令(gdb、gdbserver、kgdb等)进行调试。因为这样做并不一定能换来更多的好处。

时间: 2024-10-15 11:37:30

Android深度探索与HAL驱动开发(卷1)-- 第十章随笔的相关文章

Android深度探索与HAL驱动开发(卷1)-- 第一章随笔

本文主要从 Android版本与对应的linux内核版本关系 和 Android系统架构 两部分来讨论. 1.Android版本与Linux内核的关系 (1)Android最初使用Linux2.6作为其内核,随着Android与Linux内核的发展,不同版本的Android使用的linux内核版本差异较大,所以不同Android版本驱动可能并不通用. 下表显示了目前所有Android版本与linux内核版本的联系. Code name Android Version number Linux K

Android深度探索与HAL驱动开发(卷1)-- 第九章随笔

第9章 硬件抽象层:HAL Hal(Hardware Abstract Layer,硬件抽象层)是建立在Linux驱动之上的一套程序库.这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层. 编写支持HAL的Linux驱动程序的步骤: 第一步:编写Linux驱动 第二步:编写HAL Library 第三步:编写 Service Library 编写HAL 模块的步骤和原理如下: 第一步:定义结构体和宏 第二步:编写HAL模块的open函数 第三步:定义hw_module_met

Android深度探索与HAL驱动开发(卷1)-- 第二章随笔

Android软件开发是指创建新的Android操作系统的过程.通常是使用Android软件开发工具包(SDK)利用Java语言进行开发. Android SDK Android软件开发工具包(SDK)包括一套全面的开发工具.这些措施包括调试器,库文件,一个基于QEMU的手机模拟器,文档,示例代码和教程.目前支持的开发平台,包括可运行Linux的计算机,Mac OS X 10.5.8以上版本,和Windows XP或更高版本.截至2015年3月, Android 自带的SDK本身不可再用,但软件

Android深度探索与HAL驱动开发(卷1)-- 第七章随笔

应用程序.库.内核.驱动程序的关系   从上到下,一个软件系统可以分为:应用程序.库.操作系统(内核).驱动程序.开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节.以点亮LED为例,这4层软件的协作关系如下: 1.应用程序使用库提供的open函数打开代表LED的设备文件. 2.库数据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核. 3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序.

Android深度探索与HAL驱动开发(卷1)-- 第四章随笔

Linux内核源代码目录含义 arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录.和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分).mm(内存管理).math-emu(浮点单元仿真).lib(硬件相关工具函数).boot(引导程序).pci(PCI总线)和power(CPU相关状态).    block:部分块设备驱动程序.    crypto:常用加密和散列算法(如AES.SHA等),还有一些压缩和CRC校验算法.    Document

Android深度探索与HAL驱动开发(卷1)-- 第六章随笔

内核空间与用户空间 介绍 Linux系统将自身划分为两部分,一部分为核心软件,即是kernel,也称作内核空间,另一部分为普通应用程序,这部分称为用户空间. Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分.将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各

Android深度探索与HAL驱动开发(卷1)-- 第五章随笔

RISC(reduced instruction set computer)精简指令集计算机 简介 精简指令集,是计算机中央处理器的一种设计模式,也被称为RISC(Reduced Instruction Set Computer的缩写).[1] 这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高.常用的精简指令集微处理器包括DECAlpha.ARC.ARM.AVR.MIPS.PA-RISC.PowerArchitecture(包括PowerPC)和

Android深度探索(卷1)HAL与驱动开发学习笔记(2)

Android深度探索(卷1)HAL与驱动开发学习笔记(2) 第二章搭建Android开发环境 书中介绍了两种JDK的安装方法, 方法一: 从官网下载JDK并进行配置,解压后在终端打开profile文件来设置PATH环境变量(# soure /etc/profile),打开profile文件后输入下面的内容 export PATH=.:developer/jdk6/bin:$PATH 保存profile文件以后,有两种方法可以重新加载profile文件. 1.# sourse  /etc/pro

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码.输出调试信息等.虽然嵌入式Linux在调试方面并没有Visual Studio.Delphi.Eclipse这些可视化工具方便,但是学习一些这方面的技术无疑更有助于开发强大而稳定的Linux内核模块. 对于嵌入式Linux内核模块,可执行程序.代码库的调试可能更要复杂些.因为在大多数时候需要至少两台