图解kset,kobject,subsys

   <基于hacktao.com上的作品创作,转载请注明!>

         linux设备模型方面是驱动中比较高级的一块内容,对于刚开始学习驱动开发人员来说开始必须掌握驱动模型的编写框架和常用函数,当设备模型框架熟悉之后,就可以进入研究设备模型的实现。进入设备之前,我们必须搞清楚subsys,kset,kobject等概念。理清楚它们的结构,整个设备模型就了然了。

              学习前的须知:

       Linux设备模型的目的是:为内核建立起一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。

现在内核使用设备模型支持多种不同的任务:
电源管理和系统关机 :这些需要对系统结构的理解,设备模型使OS能以正确顺序遍历系统硬件。

与用户空间的通讯 :sysfs 虚拟文件系统的实现与设备模型的紧密相关, 并向外界展示它所表述的结构。向用户空间提供系统信息、改变操作参数的接口正越来越多地通过 sysfs , 也就是设备模型来完成。

热插拔设备

设备类型:设备模型包括了将设备分类的机制,在一个更高的功能层上描述这些设备, 并使设备对用户空间可见。

继续阅读 »

利用Qt creator编写linux驱动

利用Qt creator编写linux驱动

       最近在潜心研究linux驱动开发,个人在这几天驱动开发中的遇到的几个难点:

  1. 开发工具不够智能
  2. 驱动代码庞大不知如何入手
  3. 硬件方面主要是电路方面知识欠缺

 

        从这几个方面入手来解决开发linux驱动的难题。

        在搜索引擎上我发现很多高手常用驱动的开发工具还是vi/vim,emacs。但是对于我用惯了集成开发环境工具的来说,使用vi感觉还是很别扭。由于自己常用Qt SDK开发环境。无意中使用QtCreator来编写驱动代码,发现QtCreator开发驱动也是很方便的。下面我简单介绍配置的过程:

1)  新建一个工程

2)  配置pro,加载内核代码头文件

INCLUDEPATH+=/lib/modules/2.6.38-8-generic/build/include(这里是内核头文件,这样实现智能代码提示)

  

继续阅读 »

坚持

活的太自在,容易飘起来,正如现在这个状态的我,以前过惯了自由自在,漫无目的的日子,导致遇到事情不容易坚持,容易放弃。

很长一段时间心理都处于一个不太平衡的状态下,抱怨重复而又单调的生活,抱怨在一个如同牢笼的日子里挣扎,不断在重复的工作上网这两件事情上,好像时钟永远在跳动。沉重的压迫对于我对于生活的无奈,我知道自己是少年不知愁滋味,有时候想想父辈们在田间面对毒辣的烈日,在饥饿中苦苦忍受,我觉得自己没有机会抱怨生活了。

说完了。

QT 2D绘图全面解析

Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等。QPainterDevice是QPainter用来绘图的绘图设备,Qt中有几种预定义的绘图设备,如QWidget,QPixamp,QPrinter等.他们都从QPaintDevice继承。QPaintEngine类提供了不同类型设备的接口,QPaintEngine对程序员不透明,由QPainter,QPaintDevice类与其进行交互。

从Qt4.2开始,Graphics View框架取代了QCanvas,QGraphics View框架使用了MVC模式,适合对大量2D图元的管理,Grphics View框架中,场景(scene),存储了图形数据,它通过视图(view)以多种表现形式,每个图元(item)可以单独进行控制.Arthur绘图基础,在Arthur绘图框架中的基本绘图元素是画笔,画刷。QPainter类具有GUI程序需要的绝大多数函数,能够绘制基本图形(点,线,矩形,多边形等)以及复杂的图形(如绘图路径).使用绘图路径(QPaintPath)的优点是复杂形状的图形之用生成一次,以后再使用的时候是需要调用QPainter::drawPath()就可以了。QPainterPath对象可以用来填充,绘制轮廓。线和轮廓都可以用画笔(QPen)进行绘制,画刷(QBrush)进行填充。画笔定义了风格(线形),宽度,笔尖画刷以及端点是如何绘制的(cap-style),端点的连接方式(join-style).画刷用来填充画笔绘制的图形,可以定制不同的填充模式和颜色的画刷。当绘制文字时,字体使用QFont类定义,Qt使用指定字体的属性,如果没有匹配的字体,Qt将使用最接近的字体。字体属性可以通过QFontInfo来获取。字体的度量(measurement)使用QFontMetrics类来获取。QFontDatabase类可以获得底层窗口系统所有可用的字体.

继续阅读 »

Qt实现遍历文件夹和文件目录(递归)

Qt实现遍历文件夹和文件目录(递归)

bool FindFile(const QString & path)
{
QDir dir(path);
if (!dir.exists())
return false;
dir.setFilter(QDir::Dirs|QDir::Files);
dir.setSorting(QDir::DirsFirst);
QFileInfoList list = dir.entryInfoList();
int i=0;
do{

QFileInfo fileInfo = list.at(i);
if(fileInfo.fileName()==”.”|fileInfo.fileName()==”..”)
{
i++;
continue;
}
bool bisDir=fileInfo.isDir();
if(bisDir)
{
nFiles++;
std::cout << qPrintable(QString(“%1 %2 %3″).arg(fileInfo.size(), 10)
.arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl;

FindFile(fileInfo.filePath());
}
else{
nFiles++;
std::cout << qPrintable(QString(“%1 %2 %3″).arg(fileInfo.size(), 10)
.arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl;
}
继续阅读 »