读书笔记之《Linux Device Driver》 (一)
Linux设备驱动
第一章 设备驱动简介
驱动程序的角色是提供机制,而不是策略。
编写内核代码来存取硬件,但是不能强加特别的策略给用户(只需要表现出硬件的最基本的功能,如何使用这些功能又用户自己选择)
对策略透明的驱动特征:支持同步和异步操作、可以多次打开、利用硬件全部能力、没有软件层提供策略相关操作。
内核角色划分为:进程管理、内存管理、文件系统、设备控制、网络。
字符设备是一种可以当做一个字节流来存取的设备,字符设备通过文件系统存取。
块设备通过位于/dev目录的文件系统结点来存取,一个块设备只能传送一个或多个长度经常是512字节(或更大的2的幂)的整块。但是Linux允许应用程序像字符设备一样读写一个块设备。
一个网络接口负责发送和接受数据报文,在内核网络子系统驱动下,不需要知道如何把一个事务映射到实际的被发送和接受的报文上,例如面向流的TCP,但是网络设备被设计成处理报文的发送和接收,网络驱动只处理报文。
文件系统其实是一个软件驱动。
安
全问题:驱动编写者应避免将安全策略编写到代码中,但是有例外:某些类型的设备存取可能反面地影响系统;驱动程序BUG,特别是内存访问控制上的;用户进
程接收的输入除非能核实它,否则不要信任它;从内核获取的内存应当清零或者在对用户进程或设备可用前初始化;设备解析发送给它的数据,就需要确保用户不能
发送任何危及系统的东西;
第二章 建立和运行模块
printk(KERN_ALERT “hello”);的优先级之后,不需要加逗号。
模块只连接到内核,唯一能调用的函数就是内核输出的那些,因此模块源文件不应当包含通常的头文件,<stdarg.h>和其他特殊情况例外。
内核编程错误至少会杀掉当前进程。
驱动经常做两个任务:驱动模块中一些函数作为系统调用的一部分,一些负责中断处理。
内核编程的堆栈远远小于用户空间编程,如果需要大的结构,应当在调用时间内动态分配内存。
双下划线开始的函数,是一个底层的接口组件,要小心使用。
内核代码不能做浮点算术(内核里不能使用浮点变量?)
一种方便的makefile写法,思路是使用KERNELRELEASE变量来定位内核源码目录,如果没有内核源码树目录,则从已安装模块目录中的符号连接指回内核建立树;如果有则调用默认建立工作。
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
相关文档:
重新启动网络设置:
/sbin/service network restart
适用机型:
所有服务器
文档内容:
要建立一个Linux服务器就首先要了解Linux环境下和网络服务相关的配置文件的含义及如何进行安全的配置。在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,也许你需要编辑这些文件来完成联网工作,下面介绍几个基本的 ......
给对linux感兴趣的初学者的文章 收藏
序言:给Linux新手
=================================
by YUHJ@SMTH BBS
from 水木清华
你从来只用过Windows,从来没接触过UNIX,只知道把一个文件拽
来拽去,只知道硬盘就是C: D: E:却从来没有研究过分区表,也许
会用VC编个程 ......
测量网卡的网络流量,linux下有两款小工具nload和iftop
下载源文件后configue && make && make install
个人比较喜欢iftop,它能动态的用简单的ASC图标识网卡当前流量
首行是网络流量刻度,
中间是与其它机器的流量,有个白底的bar直观的标识流量变化,后三列数据分别表示:
1. preceding 2 seco ......
因为做linux常常会要做linux下的流量查看,下面的三个方法能很好的解决当前流量查看
iftop工具
用途: 用来即时监看网路状态和各ip所使用的频宽
iftop 官方网站:
http://www.ex-parrot.com/~pdw/iftop/
安装iftop,,必须先安装libpcap
http://www.tcpdump.org/release/
wget http://www.tcpdump.org/release/libpc ......