易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核以及驱动技术—简单

无论是VC还是VB,还是C#,还是JSP PHP等等语言,在学习他们之前总是先来一个HELLO
WORLD的例子,这个好像成了我们程序入门的必经之路。所以在驱动程序的学习上,也离不开这个步骤。但是驱动程序的开发是运行在内核空间的,而应用程序
是运行在用户空间的,所以驱动程序的开发盒调试和应用程序的开发都有很大的区别。对于这个hello world的程序我也化了不少时间才搞清楚。
 
 
驱动程序作为系统内核的一部分,它工作在核心态,而应用程序工作在用户态。也就是说,不能直接通过指针,把用户空间的数据地址传递给内核(因为MMU映射
的地址根本不一样)。要想在应用程序和驱动程序之间传递数据(指针),就需要经过转换。把用户态“看到”的空间地址转换成内核态可访问的地址。
Linux系统提供了一系列方便的函数实现这种转换,如get_user、put_user、copy_from_user、copy_to_user等,它们自己负责访问权限的检查,使用时,不需要关系更多的问题。
 
 
Linux内核把驱动程序划分为3种类型:字符设备、块设备和网络设备。字符设备和块设备可以像文件一样被访问。它们的主要区别不在于能否seek,而是
在于系统对于这两种类型设备的管理方式。应用程序对于字符设备的每一个I/O操作,都会直接传递给系统内核对应的驱动程序;而应用程序对于块设备的操作,
要经过系统的缓冲区管理,间接传递给驱动程序处理。块设备的这种管理方式是为存储提供优化的;而字符设备的管理方式是为操作提供优化的。

于网络设备,它在Linux系统中是一类比较特殊的设备它不像字符设备或块设备那样通过对应的设备文件节点去访问,内核也不再通过read和write等
调用去访问网络设备。Linux的网络系统主要是基于BSD
UNIX的套接字机制,在系统和驱动程序之间有专门的数据结构进行数据传输,系统支持对数据发送和数据接收缓存,提供流量控制机制,提供更多的协议支持。
    在linux系统中,驱动程序都做成模块的形式,也就是module。简单的说,一个模块提供一个功能,这些模块是可以按照需要随时装入内核空间和从内核空间卸载的。因此,内核模块是为了给内核动态增减功能而设计的,并不仅仅是限于驱动程序。
    因为内核模块需要加载到内核空间,所以其程序的编写与一般应用程序不同,在里面再也找不到类似main()这样的入口函数,下面对应函数相应的源代码hello.c,分析一个驱动模块的写法。
#ifndef __KERNEL__


相关文档:

linux定时执行,脚本问题解决汇总

#!/bin/bash
yesterday=`date -d -1days "+%Y%m%d"`
 
cd /home/www/zdyzlog/
zgrep -P '.*CopyRightId\[A00009042202\].*实时策略开始.*'  /home/appusr/resin-3.0.18/log/log4j_daily_drmThreeWebService.log.$yesterday.gz  >> /home/www/zdyzlog/zhongduancelivkaishi_$yesterday.txt
zgr ......

linux下安装oracle10xe版

radhat 5.2下安装oracle10g
1、系统需求:
内存:至少512mb,推荐用1g;
硬盘:服务器至少60g;
(一般情况下硬件都能符合要求)
软件包:glibc-2.3.2, libaio-0.3.96
交换空间:
RAM: 0~256MB,   SWAP: 3 倍 RAM 大小
RAM: 256~512MB,  SWAP: 2 倍 RAM 大小
RAM: >=512MB,   SWAP: 10 ......

Linux下常用压缩格式的压缩与解压方法

Linux下常用压缩格式的压缩与解压方法





    
大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善,谢谢!
作者:Linux爱好者
来自:www.L ......

Linux内核设备模型(5)

译者:郭少悲
2009/12/02
原文:linux/Documentation/driver-model/device.txt
基本的设备数据结构
~~~~~~~~~~~~~~~~~~
struct device {
        struct list_head g_list;
        struct list_head node;
      ......

linux下两次小问题导致的core

一、一个以前的老业务,类似下面这样的
     int test(char * ptest)
   {
          return  atoi(ptest);
   }
   异常的时候,指针是空的,立马就core掉了
二、
   int  uin = 77564267; ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号