Linux设备模型(4)_sysfs

作者:wowo 发布于:2014-3-14 18:31 分类:统一设备模型

sysfs是一个基于RAM的文件系统,它和Kobject一起,可以将Kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。

sysfs具备文件系统的所有属性,而本文主要侧重其设备模型的特性,因此不会涉及过多的文件系统实现细节,而只介绍sysfs在Linux设备模型中的作用和使用方法。具体包括:

  • sysfs和Kobject的关系
  • attribute的概念
  • sysfs的文件系统操作接口

阅读全文>>

标签: Linux Kernel 内核 设备模型 sysfs

评论(29) 浏览(69880)

蓝牙协议中LQ和RSSI的原理及应用场景

作者:wowo 发布于:2014-3-12 15:59 分类:蓝牙

LQI (Link Quality Indication),是当前接收到的信号的质量的一种度量。所谓的接收到信号的质量,是接收器通过接收到的信号和理想信号之间的错误累积值估算的。例如,如果使用FSK或者GFSK调制方式,接收器可以将每个bit的频率和期望的频率比较,累积一定数量的symbols(例如64个),就得到了错误累积值。由此可知,由于LQI的测量和调制方式有关,因此它可以相对地给出当前的链路质量(质量越好,LQI的值越小,反之越大)。

RSSI(Received Signal Strength Indication),是信号强度的指示,而不关心信号的质量(quality)或者正确率(correctness)。LQI不关心实际的信号强度,但信号质量却和信号强度有关,因为越强的信号,越不容易受到干扰,在接收端的表现就是“正确率”较高、LQI较低、信号质量较好。

阅读全文>>

标签: 蓝牙 LQI RSSI

评论(9) 浏览(31786)

Linux设备模型(3)_Uevent

作者:wowo 发布于:2014-3-10 20:39 分类:统一设备模型

Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。

该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节点,更进一步,可以通知其它的应用程序,将该U盘设备mount到系统中,从而动态的支持该设备。

阅读全文>>

标签: Linux Kernel 内核 设备模型 Uevent

评论(48) 浏览(91998)

Linux设备模型(2)_Kobject

作者:wowo 发布于:2014-3-7 0:25 分类:统一设备模型

Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考Documentation/kobject.txt的表述)。因此有必要先把它分析清楚。

阅读全文>>

标签: Linux 内核 设备模型 kobject ktype kset

评论(70) 浏览(89328)

Linux设备模型(1)_基本概念

作者:wowo 发布于:2014-2-27 17:01 分类:统一设备模型

在“Linux内核的整体架构”中,蜗蜗有提到,由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。个人意见,这种现象打破了“简洁就是美”的理念,是丑陋的。它导致Linux内核看上去非常臃肿、杂乱、不易维护。但蜗蜗也知道,这不是Linux的错,Linux是一个宏内核,它必须面对设备的多样性,并实现对应的驱动。

为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核所规定的数据结构的填充和实现。

本文将会从设备模型的基本概念开始,通过分析内核相应的代码,一步一步解析Linux设备模型的实现及使用方法。

阅读全文>>

标签: Kernel 内核 设备模型 Device Model 驱动开发

评论(65) 浏览(94581)

Linux内核的整体架构

作者:wowo 发布于:2014-2-21 13:23 分类:Linux内核分析

本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。

注:本文和其它的“Linux内核分析”文章都基于如下约定:  
a) 内核版本为Linux 3.10.29(该版本是一个long term的版本,会被Linux社区持续维护至少2年),可以从下面的链接获取:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.29.tar.xz 
b) 鉴于嵌入式系统大多使用ARM处理器,因此涉及到体系结构部分的内容,都以ARM为分析对象

阅读全文>>

标签: Linux Kernel 内核 架构

评论(18) 浏览(85973)

由Flappy Bird想到的技术观、哲学观和人生观

作者:wowo 发布于:2014-2-13 13:04 分类:技术漫谈

最近这只鸟(Flappy Bird)很火!蜗蜗本来不擅于玩各种游戏,这次只所有会关注到这只鸟,完全是因为看到鸟作者的新闻后,作为同路的技术人,钦佩、共鸣等感觉油然而生所致。几天内,断断续续的玩了几十次之后,很有感触,就在此分享一下。

阅读全文>>

标签: Flappy Bird 简约 激励

评论(9) 浏览(13790)

MinGW下安装man工具包

作者:wowo 发布于:2014-1-24 18:50 分类:Linux应用技巧

      在软件开发方面,蜗蜗是一个坚定的Linux追随者,vimmakegccmanshell等等,每一个工具都充满了艺术的气息。因而工作时,电脑都会运行两个操作系统:Windows是主系统,主要用于日常的邮件收发、文档编写等工作;Linux运行在虚拟机上,主要负责软件开发。

      后来发现MinGW这个工具后,可以在Windows系统下完成大部分的Linux操作,并可以编译生成在Windows下执行的二进制文件。因而就渐渐的把开发工作转移至MinGW,这样就不用再开一个虚拟机了。

      可是刚使用MinGW时,有一个很不舒服的地方:无法使用man命令。要知道,该命令在Linux下可是神通广大,上知各种shell命令的使用方法,下知各种库函数的参数定义和调用示例(个人感觉,比Windows下的MSDN好用多了)。所以,我用了一个笨到极致的方法:开着虚拟机,就是为了使用Linux系统里面的man命令!

      突然有一天,我想,难道在MinGW下真的不能使用man吗?毫无疑问,是可以的。下面我就简单说明一下怎么在MinGW下使用man命令。

阅读全文>>

标签: MinGW Linux man

评论(9) 浏览(17141)

小printf大作用(用日志打印的方式调试程序)

作者:wowo 发布于:2014-1-23 20:52 分类:软件开发

      一般来说,初学编程者所写的第一个程序,就是使用printf打印“Hello world”。其实printf的功效远不只这些,在程序调试方面,printf也有非常大的用处。 

      “蜗蜗”在接触Linux driver开发之前,学习过桌面程序开发(如Turbo C、Visual C等),也从事了一段时间的嵌入式软件开发。这些开发有一个共同点,对调试工具非常依赖,如桌面程序的Debugger(调试器)、嵌入式开发的仿真器(JTAG等)。还依稀记得,刚工作时,为了插空使用仿真器,不得不趁周末别人不工作时加班使用。直到后来从事Linux driver开发、见识到了printk的魅力之后,多年来,就再也没有使用过仿真器或者调试器了。 

      下面我就总结一下使用日志打印辅助debug的心得。

阅读全文>>

标签: 日志 打印 printf debug 调试

评论(6) 浏览(25119)

Windows系统结合MinGW搭建软件开发环境

作者:wowo 发布于:2014-1-22 12:16 分类:软件开发

      MinGW,即Minimalist GNU For Windows,它包含了GNU工具集的运行环境、GCC编译器工具集以及其它的GNU程序开发工具(如makegawkgrep等等)。借用MinGW,可以在Windows操作系统上,使用强大的、丰富多彩的开源工具进行软件开发,例如vim、gcc、python等等。

阅读全文>>

标签: MinGW GNU Linux 开发环境

评论(0) 浏览(27699)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog