随笔分类 -  初级驱动

摘要:内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。一、什么是模块模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其 阅读全文
posted @ 2013-09-11 17:40 总是TMD后知后觉 阅读(337) 评论(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后知后觉 阅读(595) 评论(0) 推荐(0)
摘要:作者:蔡伦辉写在前面作者一直支持GPL的精神。允许任何人自由使用、转载、复制和再分发,但必须保留作者署名,必须保证全文完整转载,包括完整的版权声明。由于作者水平有限,因此不能保证文章内容准确无误,请批判阅读。如果你发现任何错误或对文章内容有任何建议,欢迎你与我联系:Email: caiallen@tom.comQQ群: 14765968设置测试系统在该小节中,有以下一段话:“不管内核来自哪里,想要为2.6x内核构造模块,还必须在自己的系统中配置并构造好内核树。这一要求和先前版本的内核不同,先前的内核只要有一套内核头文件就够了。但因为2.6内核的模块要和内核源代码树中的文件连接,通过这种方式,可 阅读全文
posted @ 2013-08-28 09:31 总是TMD后知后觉 阅读(427) 评论(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后知后觉 阅读(1298) 评论(0) 推荐(0)
摘要:嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。按照如下方法就可以成功编译出hello world模块驱动。1、首先确定本机linux版本怎么查看Linux的内核kernel版本?'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。#uname -aLinux whh 3.5.0-19-generic #30-UbuntuSMPTue Nov 1 阅读全文
posted @ 2013-08-27 13:45 总是TMD后知后觉 阅读(291) 评论(0) 推荐(0)
摘要:一、U-boot第二阶段概述上面有两篇文关于u-boot第一阶段的介绍,这两篇文章是从网上找到的,由于分析的很详细,看完这后觉得对这两篇文章u-boot第一阶段的介绍已经比较完美了,所以分享出来。从这篇文章开始分析u-boot的第二阶段。如果你只把u-boot理解成引导kernel的一段代码的话,u-boot完全没有必要设计成现在这样的一种软件框架,直接写几个文件就能完成kernel的引导和启动。U-boot的功能很大一部还有起到调试的作用,也就是u-boot命令行的部分。所以它才有了现在这种相对比较复杂的框架。U-boot的第二阶段可以认为是初始化u-boot的软件框架,并实现引导kerne 阅读全文
posted @ 2013-08-26 17:18 总是TMD后知后觉 阅读(653) 评论(0) 推荐(0)
摘要:2.6内核的编译及内核树的建立---fedora core 5 标签:linux内核1. 在旧的版本下(如linux 2.4)linux内核模块的编译只需要有内核的头文件就行了,就可以通过和编译其他程序一样的方法编译成filename.o文件,这个.o文件是直接 可以加载道内核中的,加载之后就可以用了。然而在2.6下就截然不同了,在linux 2.6下内核的编译要有系统内核树的支持,下面介绍一下这个“内核树”是如何建立的。2. 本文的工作环境是Fedora Core 5,用“uname -r”查看内核版本是:2.6.15-1.2054_FC5Fedora Core 5 与旧版本不同,不包含 k 阅读全文
posted @ 2013-08-26 14:31 总是TMD后知后觉 阅读(311) 评论(0) 推荐(0)
摘要:直接写Makefile 文件(假设要编译的文件为hello.c)1 ifneq ($(KERNElRELEASE),)2 obj-m := hello.o3 else4 obj-m := hello.o5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build6 PWD := $(shell pwd)78 default:9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules10 endif第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核 阅读全文
posted @ 2013-08-26 14:30 总是TMD后知后觉 阅读(1188) 评论(0) 推荐(0)
摘要:如何编译linux驱动模块 首先,我们要了解一下模块是如何别被构造的。模块的构造过程与用户空间的应用程序的构造过程有显著不同;内核是一个大的、独立的程序,对于它的各个部分如何组合在一起有详细的明确的要求。Linux2.6内核的构造过程也与以前版本的内核构造过程不同;新的构造系统用起来更加简单,并且可产生更加正确的结果,但是它看起来和先前的方法有很大不同。 内核的构造系统非常复杂,我们所看到的只是它的一小部分。如果读者想了解更深入的细节,则应阅读在内核源码中的Document/kbuild目录下的文件。 在构造内核模块之前,有一些先决条件首先应该得到满足。首先,读者要保证你有适合于你的内核版.. 阅读全文
posted @ 2013-08-26 14:26 总是TMD后知后觉 阅读(393) 评论(0) 推荐(0)