编写 Hello world 模块驱动
华清远见-嵌入式领域著名讲师 O(∩_∩)O 牛牛猛
点击链接加我好友!
http://student.csdn.net/invite.php?u=111047&c=758a60d66d3a92d1
欢迎大家去我CSDN博客上踩踩
我的个人主页
晚上没事,同学邀我写个模块的实验手册,拿出来和大家分享一下
(1) 模块动态加载驱动方式
在内核源码的“drivers/char/”目录下新建一个名为“hello .c”的文件,内容如下:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE ("GPL");
static int __init hello_init (void)
{
printk (KERN_INFO "Hello world/n");
return 0;
}
static void __exit hello_exit (void)
{
printk (KERN_INFO "Goodbye world/n");
}
module_init (hello_init);
module_exit (hello_exit);
|
修改Makefile里面的内核源码包的路径,这里我们必须用到一个已经编译好的内核的源码
这里我们用了
KERNELDIR ?= /mnt/mengyang/source/kernel/linux-2.6.33
根据自己的实际情况修改,一定确保你的内核可以编译通过,内核可以正常运行!
在命令行里运行make命令,顺利的会生成*.ko文件。将*.ko文件复制到nfs目录,或是其他的存储设备。
在命令行里运行插入模块的命令
ismod *.ko
顺利的可以看到init函数将会被调用。
同样,运行
rmmod *.ko
顺利的可以看到clean函数被执行了。
执行上面命令时,可能报错误rmmod: chdir(2.6.33.2-TE2440): No such file or directory
这是由于busybox 1.13.1导致的,,原来是现在的内核模块在插入卸载时都会要转到/lib/modules/内核版本号/ 这个目录里。 所以只要建立这个目录并且把要使用的模块*.ko文件复制到这个目录就行了。
(2)静态的加载驱动
在内核源码中添加对hello 驱动的支持
修改drivers/char/目录下的“Kconfig”文件,在7 行添加如下内容:(红色部分所示)
#
# Character device configuration
#
menu "Character devices"
config CCTE_HELLO
tristate "CCTE2440 Hello Driver"
depends on ARCH_S3C2440
help
CCTE2440 Hello.
修改同目录下的“Makefile”文件,在合适的行添加如下内容:
#
# Makefile for the kernel character device drivers.
#
#
# This file contains the font map for the default (hardware) font
#
obj-$(CONFIG_ CCTE_HELLO) += hello.o
配置内核
然后输入:#make menuconfig,然后配置如下:
Device Drivers --->
Character devices --->
<*> CCTE2440 Hello Driver
将其选择为“M”(模块),然后保存配置,编译出内核镜像烧写到开发板中。或是下载到开发板上运行。
分享到:
相关推荐
### HelloWorld程序编写及内核驱动开发详解 #### 程序目标 本教程旨在通过创建一个简单的`HelloWorld`驱动程序来介绍如何将其编入Linux内核并在系统启动时加载,进而实现打印“Hello World”的功能。这不仅有助于...
"Linux驱动开发之旅(一)--helloworld"是一个针对初学者的教程,旨在帮助新手理解驱动开发的基本步骤和关键点。在这个教程中,我们将创建一个简单的字符设备驱动,它的主要功能就是向用户空间输出"Hello, World!...
首先,我们从编写"Hello World"驱动开始。在Linux驱动程序中,"Hello World"通常是一个非常简单的字符设备驱动,它会在设备节点上输出一条欢迎信息。这个驱动的核心部分通常包括以下内容: 1. **驱动注册**:在内核...
"linux 第一个HelloWorld驱动带测试源码.rar" 提供了一个简单的入门级示例,帮助初学者熟悉Linux内核驱动的开发过程。这个压缩包包含了创建、编译和测试一个基本驱动程序的所有必要文件。 首先,"HelloWorld"驱动...
"Hello World"内核驱动程序是一个简单的起点,它可以帮助初学者熟悉内核模块的构建过程。这里我们将深入探讨如何在Ubuntu 14.04上创建并编译一个"Hello World"内核驱动,以及涉及到的关键文件。 首先,`hello.c`是...
"modules_helloworld"这个项目很可能是为了帮助开发者理解如何在Linux环境中编写和加载基本的驱动模块。下面,我们将深入探讨Linux驱动开发的基本概念、流程以及如何创建一个简单的“Hello, World!”驱动模块。 1. ...
在压缩包文件`helloworld_demo`中,通常会包含驱动源代码文件(如`helloworld.c`)、Makefile以及必要的编译和加载驱动的指令。你可以通过阅读源代码,跟随注释一步步理解驱动的工作原理。同时,通过`insmod`或`...
Linux驱动开发之编写第一个内核模块--Hello World源码, 亲测OK,对应文章链接: https://dingdong.blog.csdn.net/article/details/106329048
本篇将深入浅出地介绍Linux设备驱动程序的基本概念,并通过一个简单的“Hello, world!”模块示例,帮助初学者入门Linux驱动程序开发。 首先,我们需要理解Linux设备驱动程序的分类。在Linux中,设备可以分为字符...
接下来,我们创建一个简单的内核模块,名为“helloworld”。这个模块的主要目标是在系统日志中打印出“Hello, World!”的信息。首先,我们需要创建一个C源文件,比如`helloworld.c`,并在其中写入以下代码: ```c #...
本篇文章主要探讨了如何在Linux系统中编写和加载一个简单的“Hello World”驱动模块,这是一个非常基础且实用的学习示例。 首先,我们要创建一个动态加载的驱动模块。在内核源码的"drivers/char/"目录下,新建一个...
在Linux系统中,驱动程序是操作系统与硬件设备之间...通过这个"hello"驱动模块的实例,你不仅学习了如何编写简单的内核模块,还熟悉了Fedora 9上相关的编译和加载过程。这对于进一步探索Linux驱动开发是非常有帮助的。
"Hello World!" 是编程世界的入门程序,它标志着一个程序员的旅程开始。在大多数编程语言中,"Hello World!" 是编写的第一段代码,用于演示最基本的语法结构。这个简单的程序通常会打印出 "Hello World!" 这个字符串...
Hello World 模块程序设计是 Linux 驱动开发的入门级实验,旨在帮助初学者掌握 Linux 内核模块的编写、编译、加载和卸载的过程。这个实验包括编写 Hello World 模块的源代码、编译 Makefile、加载模块到目标板上、...
本教程将基于"hello"这个简单的内核驱动模块,探讨如何编写和编译这样的模块,以及涉及的关键知识点。 首先,"hello"模块的目的是在内核中打印出“Hello, World!”的信息。这通常是初学者入门内核编程的第一个练习...
在Linux系统中,驱动程序是操作系统与硬件设备之间的桥梁,它们负责翻译来自操作...通过`hello`这个简单的示例,我们可以学习到如何编写和管理一个基本的模块驱动,这对于深入理解和实践Linux驱动开发是十分有益的。
Linux内核模块和驱动的编写 Linux内核模块和驱动的编写是指在Linux操作系统中,开发和实现内核模块和驱动程序的过程。内核模块是一种特殊的程序,运行在内核模式下,可以动态地添加或删除模块,从而实现了内核的...
这个简单的HelloWorld教程旨在引导初学者了解如何使用JUnit进行测试驱动开发(TDD)。TDD是一种软件开发方法论,强调先编写测试用例,确保测试失败,然后再编写实现代码,使测试通过。 TDD的主要规范包括: 1. 在...
本示例详细介绍了如何在CentOS 7环境下编译一个简单的“Hello World”内核模块(ko)驱动程序。这个过程包括查看内核版本、准备编译环境、编写源代码、创建Makefile以及编译和加载模块。 首先,确认当前系统的内核...