`
saybody
  • 浏览: 869225 次
  • 性别: 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”(模块),然后保存配置,编译出内核镜像烧写到开发板中。或是下载到开发板上运行。

分享到:
评论

相关推荐

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

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

    centos7下编译hello.ko驱动程序

    1. 查看内核版本 [root@localhost test]# uname -r 3.10.0-862.el7.x86_64 ...3. 编写hello.c 及 Makefile cat hello.c: [root@localhost test]# cat hello.c #include #include MODULE_LICENSE(Dua

    Linux嵌入式驱动模块modules_helloworld

    自己编写测试,教程详见文章https://blog.csdn.net/szm1234/article/details/112601700

    Linux学习备忘册--II.驱动学习_V1.3.pdf

    4.加载和卸载helloworld模块。5.移植编写led驱动模块。6.移植编写lcd驱动模块。上面的学习过程没有阶跃,应该不存在从某一步到某一步无法跨越的问题,再深入的,去理解驱动模块,去改写移植其他类型的驱动模块应该也...

    LINUX设备驱动第三版_588及代码.rar

    Hello World模块 核心模块与应用程序的对比 编译和装载 内核符号表 预备知识 初始化和关闭 模块参数 在用户空间编写驱动程序 快速参考 第三章 字符设备驱动程序 scull的设计 主设备号和次设备号 一些...

    linux驱动学习去开发入门

    make -C /home/tekkaman/working/SBC2440/linux-2.6.22.2 M=/home/tekkaman/working/Linuxdriver/Helloworld modules make[1]: Entering directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' CC [M] /home/...

    Linux实验课设报告

    4、Linux shell编程:输出Hello World、获取系统信息、获取网卡信息、监控CPU负载 5、Linux内核编译与运行:Busybox准备、环境配置、编译最小文件系统、编译内核、运行QEMU 6、Linux内核模块编程:内核模块编程、...

    linux设备驱动程序

    Hello world模块 核心模块与应用程序的对比 编译和装载 内核符号表 预备知识 初始化和关闭 模块参数 在用户空间编写驱动程序 快速参考 ch03.第三章 字符设备驱动程序 scull的设计 主设备号和次设备号 一些重要的数据...

    树莓派驱动开发实战,基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享

    基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享,旨于对Linux内核模块机制的熟悉、常见接口的Linux驱动...目前实现hello world, gpio led, gpio key, device io,pwm, 红外, PDD与设备树相关驱动,还有一些文档

    node-seeli:面向对象,事件驱动的CLI模块

    面向对象,事件驱动,交互式CLI模块。 Seeli旨在为您提供所需的工具,以按您希望的方式编写命令行界面,否则,您将无法使用。 const os = require ( 'os' ) const cli = require ( 'seeli' ) cli . set ( { ...

    Linux DeviceDrivers 3rd Edition

    Hello World模块 22 核心模块与应用程序的对比 24 编译和装载 28 内核符号表 33 预备知识 35 初始化和关闭 36 模块参数 40 在用户空间编写驱动程序 42 .快速参考 44 第三章 字符设备驱动程序 46 scull的...

    linux设备驱动程序第三版

    Hello World 模块 ......................................................................................................... 28 3.3 2.3. 内核模块相比于应用程序 ............................................

    嵌入式Linux应用程序开发详解

    目录 第1章 Linux快速入门 1 1.1 嵌入式Linux基础 1 1.1.1 Linux发展概述 1 1.1.2 Linux作为嵌入式操作系统的优势 2 ...12.3 实验内容——使用Qt编写“Hello,World”程序 420 本章小结 428

    linux_learn_diary

    实现了hello_world内核模块,在x86和arm32上运行 实现了一个字符设备驱动,在arm32上运行 20200701 实现了字符设备驱动客户端 实现了misc设备 20200708 实现了虚拟设备的FIFO读写 20200925 自己动手写docker ...

    api-driven-development:API 驱动开发研讨会

    03. 用Koa简单介绍Web框架我们选择 Koa 是因为它是一个非常小的框架,使您能够使用节点模块生态系统编写简单而强大的 API。04. CRUD 端点在这个例子中,我们将为我们的应用程序设置几个端点。 它们将允许我们:列出...

    嵌入式Linux应用程序开发标准教程(第2版全)

    《嵌入式Linux应用程序开发标准教程(第2版)》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux...12.3 实验内容——使用Qt编写“Hello,World”程序 12.4 本章小结

Global site tag (gtag.js) - Google Analytics