自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

从零开始

Inch by Inch & Day by Day

  • 博客(21)
  • 收藏
  • 关注

原创 tslib编译及使用方法

1.      在编译tslib之前请先确认下面的软件是否安装sudo apt-getinstall autoconfsudo apt-getinstall automakesudo apt-get install libtool 2.      编译:tar xzftslib-1.4.tar.gz cd tslib./autogen.sh mkdir tmp

2014-11-15 11:50:48 2550

原创 Linux设备驱动程序学习笔记14:中断的初始化流程

init是Linux内核启动的第一个用户级进程,系统的很多初始化工作都是由它开始的,当然也包括中断的初始化工作。其主要函数在init/main.c中,汇编程序会跳到该文件的start_kernel函数执行,我们就由这个函数开始分析Linux中断初始化相关的主要流程。asmlinkage void __init start_kernel(void){ … … setup_arch

2014-11-13 09:19:37 1221

原创 创建简单的samba服务器

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。创建简单的samba服务器1. 在Linux中安装samba软件,试验环境为Ubuntu:sudo apt-get install samba2.增加新的samba用户sudo smbpasswd -a name【增加samba用户】还有一些其它常用的用户操作选项:sudo 

2014-11-12 16:48:16 565

原创 Linux设备驱动程序学习笔记13:中断的注册流程

在中断的调用流程中讲到Linux中对中断的处理最终会调用到在驱动程序中注册的中断处理函数。中断处理函数(interrupt handle /  interruptservice routine)是设备驱动程序的一部分,内核通过它来回应特定的中断。中断处理函数同普通的函数并无太大的区别,但由于它是运行在中断上下文(interrupt context)中的,所以他不能休眠和引起阻塞。中断处理函数的

2014-11-03 17:08:10 802

原创 Linux设备驱动程序学习笔记12:中断调用流程

通过轮询的方式去查询各个硬件的状态显得有的低效,一种更好的机制是当硬件状态准备好之后能够主动地报告给CPU。中断就是这样的一种机制,它允许硬件发信号给CPU。下面就先分析一下当一个中断发生时,Linux系统的处理流程。首CPU在收到中断线上的中断信号后,会跳到某个固定的地址去执行代码,这个地址被称为中断向量。这部分代码是同体系结构相关,主要是汇编代码,其中的主要工作有保存中断现场,切换到中

2014-09-28 11:44:58 1234

原创 Linux设备驱动程序学习笔记11:输入设备子系统

各种不同的输入设备(如按键,鼠标,触摸屏等)都是字符设备。这些设备文件操作接口等基本是通用的,只是他们底部的硬件操作方式有所不同。Linux内核中采用了一种分层的思想,将这些上层相同的东西分类出来单独开发了一个输入子系统(input subsystem)。输入子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成输入系统留出的接口,在很大程度上简化输入设备的驱动开发。Linux的

2014-09-24 16:16:48 1705

原创 Linux设备驱动程序学习笔记10:轮询

在应用程序中可以通过select或poll系统调用来查询多个文件描述符。它们都允许进程一直阻塞,直到一个或多个文件描述符成为就绪状态或者在调用时指定一个超时时间。poll执行的任务同select很类似,两者的主要区别在于如何指定待检查的文件描述符,通常select的应用更广泛一些。select调用的原型为:

2014-09-19 14:35:12 620

原创 vim常用配置

Vim默认的配置文件是/etc/vim/vimrc,这是一个全局配置。在不影响其他用户的情况下我们可以再自己的用户目录下新建一个.vimrc文件,这个文件中的配置会覆盖全局配置。我在使用vim时的几个常用的配置有:"语法高亮if has("syntax") syntax onendif"设置Tab键的宽度set tabstop=4set softtabstop=4

2014-08-22 23:20:20 510

原创 Linux设备驱动程序学习笔记09:等待队列

应用程序通过read/write等系统接口对设备进行操作而不关心设备是否准备好。如果应用程序在对设备进行操作时设备未准备好,就必须在驱动程序中进行处理。在打开一个设备文件时,可以指定打开方式为阻塞或者非阻塞型的。这两种不同的方式决定了再驱动程序中如何处理设备未准备好时的情况。在通过open打开一个(设备)文件时通过是否设置O_NONBLOCK位来决定是以哪种方式打开文件的:/*以只读非

2014-08-22 16:33:07 710

原创 Linux设备驱动程序学习笔记08:自旋锁和信号量

并发与竞态在写驱动程序的时候,必须要考虑的一个问题是对共享资源(硬件资源、全局变量以及静态变量等)的并发访问。而并发访问则很容易导致竞态(对资源的非控制访问)的产生。假设驱动程序中有类似下面的一段代码:...static char *p;...void func(void) { if (!p) { p = kmalloc(size, GPF_KERNEL); if (!

2014-08-14 15:41:54 724

原创 Linux设备驱动程序学习笔记07:字符设备驱动程序V

我们的字符设备的驱动程序源码如下:/* memdev.c : ldd Author : moon.cheng.2014@gmail.com Date : 2014-08-05 Version: 1.0 This program is a demo program for linux device drivers created by moon. It is a

2014-08-05 17:22:22 569

原创 Linux设备驱动程序学习笔记06:字符设备驱动程序IV

本文将一块内存当做一个字符设备,并为它写一个驱动程序。字符设备结构体我们可以用一个cdev结构体来表示一个设备。鼠标、键盘、触摸屏等都可以被当做一个字符设备,这些设备都有一些自己独有的属性。比如我们将要用到的这块内存,它有一个属性是这块内存的大小,这个属性对于鼠标键盘来说是没有的。要如何通过一个通用的cdev结构体来表示包含有各种不同属性的结构体呢?内核虽然是用C和汇编语言编写的,如果

2014-08-05 15:24:14 553

原创 GCC头文件及库文件路径的配置

加载头文件路径配置在实际编程时经常会涉及到包含头文件的问题。采用#include ”xxx.h”的方式包含头文件编译器会先在工作目录中查找如果没找到则会继续查找系统目录。采用#include 的方式包含头文件编译器则只会查找系统目录。在实际项目中通常不会将.h文件直接放在工作目录或是系统目录下,所以经常会在编译的过程中遇到找不到头文件的情况。如果是在linux环境下的话可以通过

2014-08-01 09:04:49 5466

原创 Linux设备驱动程序学习笔记05:字符设备驱动程序III

本文将简要分析cdev结构剩下的几个成员:

2014-07-30 09:32:05 583

原创 Linux设备驱动程序学习笔记04:字符设备驱动程序II

对上层用户来说linux是将设备当做一个文件来使用的,cdev中是的const struct file_operations *ops;成员定义了驱动程序的文件操作表。讲到这部分就不得不提其它两个数据结构了:file 和 inode。大部分的驱动程序操作都涉及到这三个内核数据结构。现在我们就一起来学习一下这几个数据结构。file_operationfile_operation结构体中的成员

2014-07-30 09:26:01 672

原创 Linux设备驱动程序学习笔记03:字符设备驱动程序I

在Linux内核中用cdev结构体来表示一个字符设备,cdev的定义在linux/Cdev.h中:struct cdev { struct kobject kobj; //内嵌的kobject struct module *owner; //指向实现驱动程序的模块(如果有的话) const struct file_operations *ops; //指向驱动程序的文件操作表 stru

2014-07-28 18:47:30 883

原创 Linux设备驱动程序学习笔记02:编写编译并运行驱动程序

学习一个新东西最好的方式就是去实践它。在实践的过程中会不断遇到问题、产生疑问。解决这些问题的过程就是我们进步成长的过程。一、如何写驱动程序在学习C语言的时候有一个著名的hello world程序。在学习驱动程序的时候我们也可以写一个类似的小程序,它的源码如下://file name module_ts.c#include #include static int __init m

2014-07-19 22:10:53 2271

原创 Linux设备驱动程序学习笔记01:设备驱动程序简介

设备驱动程序(Device Driver)是一种可以使操作系统和设备通信的特殊程序。驱动程序硬件设备提供接口。操作系统只有通过这个接口,才能使用硬件设备且应用程序必须通过操作系统来使用硬件设备。他们之间的关系可以用下面的图来表示:

2014-07-19 00:14:12 1228

原创 僵尸进程

僵尸进程是指那些已经停止运行(调用exit系统函数),但是其entry仍然保存在进程表中的进程。 僵尸进程是如何产生的?当一个进程结束后,它在进程表中的entry并不会被立即删除。因为它的父进程需要通过这个entry来读取它的exit status。只有当它的父进程通过wait系统调用读取了它的exit status之后。该进程在进程表中的entry才会被删除。如果系统中存在太多僵尸进

2014-06-25 15:54:35 671

原创 写linux命令程序who的几点总结

写linux命令程序who的几点总结 最近在一边学习C一边看《Unix-Linux编程实践教程》。这本书在去年就已经看过一遍了,其中的例子当时也跟着编过。本来是最近是准备看《UNIX环境高级编程》这本书的,突然发现《Unix-Linux编程实践教程》的内容都已忘的差不多了,就决定先再把它看一遍。 既然要拿起来在学,就好好学一下吧。决定自己先不看书,自己动手先再重写一遍。根据书中的套路(这个现在

2014-06-06 11:55:46 800

原创 Linux环境下编译链接库

没有任何一个重要的程序是用某种程序设计语言从零开始写出的。都是存在一组支撑库,这也就形成了进一步工作的基础。本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。1.库的概念根据代码被载入时期的不同,库又有静态库[*.a]和动态库[

2014-03-21 14:51:21 646

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除