Linux
walkingman321
这个作者很懒,什么都没留下…
展开
-
Linux设备模型
OverviewLinux的sysfs文件系统一般mount在/sys目录。本文主要介绍sysfs文件系统中设备驱动模型的建立过程,内核版本2.6.29。设备驱动信息主要用来表示设备以及驱动的层次关系,以及处理热插拔等。/sys中与之相关的数据有:class 代表一类设备,比如mtd、net、tty等等bus 总线,比如PCI、USB、I2C等device 代表一个设备driver 代表一个驱动以下是一些sysfs中的全局变量:// /sys/c原创 2010-09-30 15:55:00 · 6015 阅读 · 5 评论 -
ARM Linux异常处理之data abort(二)
上文提到data abort的正常处理过程中,最终会调用do_DataAbort函数,下面分析一下该函数的处理过程。do_DataAbortasmlinkage void __exception do_DataAbort( unsigned long addr, // 导致异常的内存地址 unsigned int fsr原创 2011-03-10 22:37:00 · 18296 阅读 · 0 评论 -
linux HID驱动分析
最近研究蓝牙的键盘鼠标,所以粗略看了一下Linux的HID框架。HID 总线HID的总线在hid-core.c的hid-init中初始化:bus_register(&hid_bus_type);hid_bus_type的定义:static struct bus_type hid_bus_type = { .name = "hid",原创 2012-01-21 23:31:21 · 19243 阅读 · 2 评论 -
蓝牙底层HCI驱动的实现
Overview蓝牙协议栈与蓝牙底层设备一般是通过串口连接,两者之间通过HCI协议通讯。这就要求实现一个串口tty驱动。而对于Bluez协议栈来说,它是通过建立蓝牙的socket来发送、接收数据。因此,在蓝牙通信中,对上层应用是socket通信,对底层则一般是通过一个tty驱动实现。本文以HCIUART_LL为例,讨论了蓝牙底层的tty驱动部分,代码在drivers\bluetooth\hci原创 2012-03-20 21:41:30 · 14669 阅读 · 2 评论 -
select()函数、poll()函数
重读2.4 052 fs/select.ctarget="_blank">http://docs.google.com/Doc?id=dcbsxfpf_213vc73kssk2008-4-22这里讨论的是select和poll的系统调用实现方式.首先要熟悉的是内核中为poll和select定义的各种输入输出消息的含义: POLLIN 有数据可以读转载 2012-03-24 21:48:54 · 1936 阅读 · 0 评论 -
Bluez HID分析--Linux kernel部分
本文介绍蓝牙协议栈Bluez在linux中实现HID功能的kernel部分。在linux kernel中,Bluez对HID的实现代码在/net/bluetooth/hidp文件夹中,主要包括sock.c,core.c和hidp.h三个文件。Bluez提供了一个socket接口,用户空间程序通过使用该socket控制HID。该socket使用的协议编号为BTPROTO_HIDP。1. 初原创 2012-01-23 23:56:15 · 11178 阅读 · 0 评论 -
Linux regulator分析
Regulator模块用于控制系统中某些设备的电压/电流供应。在嵌入式系统(尤其是手机)中,控制耗电量很重要,直接影响到电池的续航时间。所以,如果系统中某一个模块暂时不需要使用,就可以通过regulator关闭其电源供应;或者降低提供给该模块的电压、电流大小。Regulator的文档在KERNEL/Documentation/Power/Regulator中。 Regulator与模块原创 2011-11-18 11:31:06 · 10223 阅读 · 1 评论 -
Linux对电平触发与沿触发中断的区别
<br />对于电平触发中断和沿触发中断,在Linux中分别用了handle_level_irq和handle_edge_irq进行处理。中断发生后,系统的中断开关会自动处于disable状态,这由CPU的硬件保证(至少arm中是这样),所以两个函数都在中断禁止的环境中执行。<br /> <br />handle_level_irq<br />void handle_level_irq (unsigned int irq, struct irq_desc *desc)<br /> spin_lo原创 2011-03-19 23:16:00 · 5679 阅读 · 1 评论 -
ARM Linux异常处理之data abort(一)
本文简要分析了ARM Linux的data abort异常处理过程,内核版本2.6.28,s3c6410平台。异常向量与程序跳转data abort是ARM体系定义的异常之一。异常发生时,ARM会自动跳转到异常向量表中,通过向量表中的跳转命令跳转到相应的异常处理中去。ARM的异常处理向量表在entry-armv.S文件中: .globl __vectors_start__vectors_start: swi SYS_ERROR0 b vector_u原创 2011-03-07 22:58:00 · 25833 阅读 · 0 评论 -
Linux Posix Timer实现代码分析
本文简要介绍了Linux实现POSIX定时器的内核代码。内核中对posix定时器的实现代码在kernel/posix-timers.c/h中,本文使用的代码是2.6.29;关于用户空间如何使用POSIX定时器请查阅相关man文档。Linux提供的POSIX定时器功能主要由以下几个函数组成:int timer_create(clockid_t which_clock, struct sigevent* timer_event_spec, timer_t* created_timer_id);int timer原创 2011-02-01 23:32:00 · 9662 阅读 · 0 评论 -
Linux Signal实现代码分析
本文介绍了Linux信号处理的基本流程。关于信号处理的具体细节可以看ULK第三版第11章。1. 基本数据结构1.1 task_struct中信号相关的域struct signal_struct * signal; // Pointer to the process's signal descriptorstruct sighand_struct * sighand; // Pointer to the process's signal handler des原创 2011-01-28 00:38:00 · 14636 阅读 · 5 评论 -
Linux的timerfd分析
timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,所以能够被用于select/poll的应用场景。1. 使用方法timerfd提供了如下接口供用户使用timerfd_createint timerfd_create(int clockid, int flags);timerfd_create用于创建一个定时器文件。参数clockid可以是CLOCK_MONOTONIC或者CLOCK_REALTIME。参数flags可以是0或者O_CLOEXEC/O_NONBLOCK原创 2011-01-24 22:41:00 · 29385 阅读 · 2 评论 -
Linux Call Trace原理分析
本文介绍了在Linux环境下根据EABI标准进行call dump调试的一般性原理。Linux开发过程中,由于程序不稳定,经常会出现错误,导致程序异常,甚至崩溃。这时,就需要有一种机制将崩溃时的函数调用栈打印出来,方便调试,这种机制就是call dump。下面简单介绍powerpc环境中如何实现call dump。内核态call dump内核态有三种出错情况,分别是bug, oops和panic。bug属于轻微错误,比如在spin_lock期间调用了sleep,导致潜在的死锁问题,等等。oops代表某一用户原创 2011-01-03 21:01:00 · 54684 阅读 · 0 评论 -
关于Linux log机制的一些整理
很久以前整理的,今天偶然看到了,放到网上方便查询。一、 syslogd和klogdsyslogd与syslog配套使用,主要用于daemon输出log。Klogd读/proc/kmsg,保存的是kernel log。Klogd启动时有一个-f选项,用于指定保存kernel log的文件。如果没有指定,会发送到syslog,由syslog统一保存。二、原创 2012-04-13 23:00:58 · 8786 阅读 · 0 评论