摘要: 内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。一、什么是模块模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其 阅读全文
posted @ 2013-09-11 17:40 总是TMD后知后觉 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 一、互斥锁1. 初始化:在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要调用pthread_mutex_destroy.原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthrea 阅读全文
posted @ 2013-09-11 17:13 总是TMD后知后觉 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 1. 互斥锁创建 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是一个结构常量。 动态方式是采用pthread_mutex_init()函数来初始化互斥锁,API定义如下:int pthread_mutex_init(pthread_mutex_t *mutex, co. 阅读全文
posted @ 2013-09-10 09:30 总是TMD后知后觉 阅读(2839) 评论(0) 推荐(0) 编辑
摘要: yum是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题 yum特点可以同时配置多个资源库(Repository)简洁的配置文件(/etc/yum.conf)自动解决增加或删除rpm包时遇到的倚赖性问题使用方便保持与RPM数据库的一致性yum安装CentOS自带(yum-*.noarch.rpm)#rpm -ivh yum-*.noarch.rpm在第一次启用yum之前首先需要导入系统的RPM-GPG-KEY:#rpm –import /usr/share/doc/ce 阅读全文
posted @ 2013-09-05 15:28 总是TMD后知后觉 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 我们在更新CentOS或者Ubuntu的内核时,在执行make menuconfig时可能会出现这样的错误:*** Unable to find the ncurses libraries or the*** required header files.*** ‘make menuconfig’ requires the ncurses libraries.****** Install ncurses (ncurses-devel) and try again.解决方法如下:CentOS:yum install -y ncurses-develUbuntu:sudo apt-get insat 阅读全文
posted @ 2013-09-05 09:55 总是TMD后知后觉 阅读(491) 评论(0) 推荐(1) 编辑
摘要: 做为一个RHCA(红帽认证架构师),当然有一些管理yum的小技巧。我原来以为别人都会,后来才发现只有自己知道。好东西当然要分享。 另外,我有一些对生产环境安装软件的朋友一些建议。多用rpm,deb之类的包管理安装,不要使用编译安装。原因有以下几点。1、编译安装麻烦,浪费时间。2、你以后可能都不记的编译的参数,你的下一任维护也麻烦。因为他不清楚你当时是用的什么参数编译。这个你的boss可关心着哦。3、当然,有人一定会讲,编译性能高,其实不见的,出问题的机会也高哦,在讲一个程式性能提高3%有什么用。其实没有多少用。当然,你用LFS的系统做生产环境,那就有分别,因为你任何一个包都是自己编译的。相信你 阅读全文
posted @ 2013-09-03 11:38 总是TMD后知后觉 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 1.设置字体大小options-document options ,找到screen fonts,即可打开下面的界面设置全文字体大小2.往里添加中文注释时,字间距很大。解决方法如下:1、Options->Style Properties2、左边Style Name下找到Comment Multi Line、Comment、Comment Right、Comment Single Line.在右边对应的Font属性框下的Font Name中选“Pick...” 设置为宋体、常规、小四,确定,退回Style Properties界面,Size设为12。(字号可根据自己的喜好和显示器大小适当设 阅读全文
posted @ 2013-08-29 11:10 总是TMD后知后觉 阅读(3771) 评论(0) 推荐(0) 编辑
摘要: 从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *myclass ;class_create(THIS_MODULE, “my_device_driver”);device_create(myclass, NULL, MKDEV(major_num, mino 阅读全文
posted @ 2013-08-29 09:16 总是TMD后知后觉 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 作者:蔡伦辉写在前面作者一直支持GPL的精神。允许任何人自由使用、转载、复制和再分发,但必须保留作者署名,必须保证全文完整转载,包括完整的版权声明。由于作者水平有限,因此不能保证文章内容准确无误,请批判阅读。如果你发现任何错误或对文章内容有任何建议,欢迎你与我联系:Email: caiallen@tom.comQQ群: 14765968设置测试系统在该小节中,有以下一段话:“不管内核来自哪里,想要为2.6x内核构造模块,还必须在自己的系统中配置并构造好内核树。这一要求和先前版本的内核不同,先前的内核只要有一套内核头文件就够了。但因为2.6内核的模块要和内核源代码树中的文件连接,通过这种方式,可 阅读全文
posted @ 2013-08-28 09:31 总是TMD后知后觉 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 在使用命令ismod helloworld.ko 加载编译成功的模块helloworld.ko时出现错误insmod: error inserting 'helloworld.ko': -1 Invalid module format一般出错信息被记录在文件/var/log/messages中[root@hailiang linux-2.6.15.5]# cat /var/log/messages |tailSep 14 09:20:19 localhost kernel: hello: disagrees about version of symbol struct_modu 阅读全文
posted @ 2013-08-27 15:20 总是TMD后知后觉 阅读(1210) 评论(0) 推荐(0) 编辑