摘要: linux中shell变量$#,$@,$0,$1,$2的含义解释linux中shell变量$#,$@,$0,$1,$2的含义解释:变量说明:$$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。$@所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" 阅读全文
posted @ 2014-01-02 15:43 tony7373 阅读(272) 评论(0) 推荐(0)
摘要: SHELL 判断中-a -z意义[ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -k FILE ] 如果 FIL 阅读全文
posted @ 2014-01-02 15:28 tony7373 阅读(257) 评论(0) 推荐(0)
摘要: 1、open,open提供给驱动程序初始化的能力。作用: 1、检查设备特定错误。 2、如果是首次打开设备则对设备初始化。 3、如果有必要,更新f_op指针 4、分配并填写置于file->private_date里的数据结构。 int (*open) (struct inode *inode, struct file *filep)2、release方法 1、释放open分配并填写置于file->private_date里的数据结构 2、最后一次关闭操作时关闭设备。 int scull_release(struct inode *inode, struct file *filep.. 阅读全文
posted @ 2013-12-26 09:48 tony7373 阅读(178) 评论(0) 推荐(0)
摘要: 1、内核中使用struct cdev结构来表示字符设备。2、获取一个独立的cdev结构: struct cdev *my_cdev=cdev_alloc(); my_cdev->ops= &my_fops;3、初始化一个已经分配到的cdev结构: void cdev_init(struct cdev *cdev, struct file_oprations *fops);4、告诉内核该结构的信息: int cdev_add(struct cdev *dev, dev_t num, unsigned int count); 内核一旦得到该结构的信息,则就会对该设备进行操作,所以在设 阅读全文
posted @ 2013-12-26 08:57 tony7373 阅读(154) 评论(0) 推荐(0)
摘要: 1、全局。设备被多次打开,则打开它的所有文件描述符都可以共享该设备所包含的的数据。2、持久。多次打开或者关闭设备,数据不会丢失。3、多个进程同时读取一个设备,会为读取的数据发生竞争。4、scull内部实现将说明在不使用中断的情况下如何实现阻塞试和非阻塞试的读写操作。5、scullsingle:只允许一个进程使用该驱动程序 scullpriv:对每个终端/控制台都是私有的,对每个终端或控制台的进程将获取到不同内存区。 sculluid:可多次打开,但是每次只能有一个用户打开。 scullwuid:同上,但是实现阻塞试open6、主设备号标识设备对应的是驱动程序,Linux内核允许多个驱动程... 阅读全文
posted @ 2013-12-25 21:26 tony7373 阅读(428) 评论(0) 推荐(0)
摘要: 1、初始化static int __init initialization_function(void) {......};module_init(initialization_function);static的声明是为了说明这种函数在特定文件外没有其他的意义。该函数仅在初始化期间使用,在模块被装载后,模块装载器就会把初始化函数扔掉。用来描述新设备的数据结构指针被传递到内核注册函数的参数中,而数据结构通常指向模块函数的指针,因此模块体中的函数就会在恰当时候被内核的函数调用。2、注册设备包括:串口、杂项设备、sysfs入口、/proc文件、可执行域、线路规程等。3、清除函数 static v.. 阅读全文
posted @ 2013-12-25 20:51 tony7373 阅读(477) 评论(0) 推荐(0)
摘要: 1、所有模块都包含这两个头文件: #include #include module.h中包含可装载模块需要的大量的符号和定义,init.h是指定初始化和清除函数。2、显示的标记内核模块许可证。 MODULE_LICENSE("GPL") 如果一个模块没有显示的标记上述内核可识别的许可证,则内核会被认为这种模块会”污染“内核,从而引发用户问题。3、#include 包含驱动程序使用的大部分内核API的定义,包括睡眠函数以及各种变量声明。4、struct task_struct *current;当前进程。5、#include 包含内核版本信息的头文件。6、#include . 阅读全文
posted @ 2013-12-25 20:02 tony7373 阅读(244) 评论(0) 推荐(0)
摘要: Linux内核中的等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。 阅读全文
posted @ 2013-12-24 17:45 tony7373 阅读(927) 评论(0) 推荐(0)
摘要: register_chrdev_region()和registe_chrdev() 分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下: extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号 extern int alloc_chrdev_region(dev_t, unsigned, const char *);//动态的申请注册一个设备号 extern int register_chrdev(unsigned int, const char *, struct file_. 阅读全文
posted @ 2013-12-24 17:20 tony7373 阅读(402) 评论(0) 推荐(0)
摘要: http://www.cnblogs.com/leaven/archive/2010/08/19/1803382.htmlLinux内核对定时器的描述Linux在include/linux/timer.h头文件中定义了数据结构timer_list来描述一个内核定时器:struct timer_list { struct list_head list; unsigned long expires; unsigned long data; void (*function)(unsigned long); };各数据成员的含义如下:(1)双向链表元素list:用来将多个定时器连接成一条双向循环队列。 阅读全文
posted @ 2013-12-24 16:57 tony7373 阅读(288) 评论(0) 推荐(0)