`
saybody
  • 浏览: 903906 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

编写 Hello world 模块驱动

阅读更多

编写 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程序编写及内核驱动开发详解 #### 程序目标 本教程旨在通过创建一个简单的`HelloWorld`驱动程序来介绍如何将其编入Linux内核并在系统启动时加载,进而实现打印“Hello World”的功能。这不仅有助于...

    Linux驱动开发之旅(一)--helloworld

    "Linux驱动开发之旅(一)--helloworld"是一个针对初学者的教程,旨在帮助新手理解驱动开发的基本步骤和关键点。在这个教程中,我们将创建一个简单的字符设备驱动,它的主要功能就是向用户空间输出"Hello, World!...

    Linux Hello World 驱动

    首先,我们从编写"Hello World"驱动开始。在Linux驱动程序中,"Hello World"通常是一个非常简单的字符设备驱动,它会在设备节点上输出一条欢迎信息。这个驱动的核心部分通常包括以下内容: 1. **驱动注册**:在内核...

    linux 第一个HelloWorld驱动带测试源码.rar

    "linux 第一个HelloWorld驱动带测试源码.rar" 提供了一个简单的入门级示例,帮助初学者熟悉Linux内核驱动的开发过程。这个压缩包包含了创建、编译和测试一个基本驱动程序的所有必要文件。 首先,"HelloWorld"驱动...

    UBUNTU14.04下helloworld内核驱动源文件与makefile

    "Hello World"内核驱动程序是一个简单的起点,它可以帮助初学者熟悉内核模块的构建过程。这里我们将深入探讨如何在Ubuntu 14.04上创建并编译一个"Hello World"内核驱动,以及涉及到的关键文件。 首先,`hello.c`是...

    Linux嵌入式驱动模块modules_helloworld

    "modules_helloworld"这个项目很可能是为了帮助开发者理解如何在Linux环境中编写和加载基本的驱动模块。下面,我们将深入探讨Linux驱动开发的基本概念、流程以及如何创建一个简单的“Hello, World!”驱动模块。 1. ...

    linux设备驱动,helloworld驱动程序

    在压缩包文件`helloworld_demo`中,通常会包含驱动源代码文件(如`helloworld.c`)、Makefile以及必要的编译和加载驱动的指令。你可以通过阅读源代码,跟随注释一步步理解驱动的工作原理。同时,通过`insmod`或`...

    Linux驱动开发之编写第一个内核模块--Hello World源码

    Linux驱动开发之编写第一个内核模块--Hello World源码, 亲测OK,对应文章链接: https://dingdong.blog.csdn.net/article/details/106329048

    Linux设备驱动程序学习(0)-Hello, world!模块 - Linux设备驱动程序

    本篇将深入浅出地介绍Linux设备驱动程序的基本概念,并通过一个简单的“Hello, world!”模块示例,帮助初学者入门Linux驱动程序开发。 首先,我们需要理解Linux设备驱动程序的分类。在Linux中,设备可以分为字符...

    Ubuntu下内核编程之第一个模块helloworld(附源码)

    接下来,我们创建一个简单的内核模块,名为“helloworld”。这个模块的主要目标是在系统日志中打印出“Hello, World!”的信息。首先,我们需要创建一个C源文件,比如`helloworld.c`,并在其中写入以下代码: ```c #...

    helloworld驱动[文].pdf

    本篇文章主要探讨了如何在Linux系统中编写和加载一个简单的“Hello World”驱动模块,这是一个非常基础且实用的学习示例。 首先,我们要创建一个动态加载的驱动模块。在内核源码的"drivers/char/"目录下,新建一个...

    基于fedora9的hello驱动模块编译教程(源码)

    在Linux系统中,驱动程序是操作系统与硬件设备之间...通过这个"hello"驱动模块的实例,你不仅学习了如何编写简单的内核模块,还熟悉了Fedora 9上相关的编译和加载过程。这对于进一步探索Linux驱动开发是非常有帮助的。

    hello world!

    "Hello World!" 是编程世界的入门程序,它标志着一个程序员的旅程开始。在大多数编程语言中,"Hello World!" 是编写的第一段代码,用于演示最基本的语法结构。这个简单的程序通常会打印出 "Hello World!" 这个字符串...

    linux驱动开发实例

    Hello World 模块程序设计是 Linux 驱动开发的入门级实验,旨在帮助初学者掌握 Linux 内核模块的编写、编译、加载和卸载的过程。这个实验包括编写 Hello World 模块的源代码、编译 Makefile、加载模块到目标板上、...

    linux内核驱动模块模板之hello

    本教程将基于"hello"这个简单的内核驱动模块,探讨如何编写和编译这样的模块,以及涉及的关键知识点。 首先,"hello"模块的目的是在内核中打印出“Hello, World!”的信息。这通常是初学者入门内核编程的第一个练习...

    模块驱动_驱动_

    在Linux系统中,驱动程序是操作系统与硬件设备之间的桥梁,它们负责翻译来自操作...通过`hello`这个简单的示例,我们可以学习到如何编写和管理一个基本的模块驱动,这对于深入理解和实践Linux驱动开发是十分有益的。

    Linux内核模块和驱动的编写

    Linux内核模块和驱动的编写 Linux内核模块和驱动的编写是指在Linux操作系统中,开发和实现内核模块和驱动程序的过程。内核模块是一种特殊的程序,运行在内核模式下,可以动态地添加或删除模块,从而实现了内核的...

    Junit简单HelloWorld教程 word文档

    这个简单的HelloWorld教程旨在引导初学者了解如何使用JUnit进行测试驱动开发(TDD)。TDD是一种软件开发方法论,强调先编写测试用例,确保测试失败,然后再编写实现代码,使测试通过。 TDD的主要规范包括: 1. 在...

    centos7下编译hello.ko驱动程序

    本示例详细介绍了如何在CentOS 7环境下编译一个简单的“Hello World”内核模块(ko)驱动程序。这个过程包括查看内核版本、准备编译环境、编写源代码、创建Makefile以及编译和加载模块。 首先,确认当前系统的内核...

Global site tag (gtag.js) - Google Analytics