编写 Hello world 模块驱动

(1) 模块动态加载驱动方式linux

在内核源码的“drivers/char/”目录下新建一个名为“hello .c”的文件,网络营销培训内容以下:网络

#include <linux/module.h>函数

#include <linux/kernel.h>spa

#include <linux/init.h>命令行

MODULE_LICENSE ("GPL");ci

static int __init hello_init (void)开发

{get

printk (KERN_INFO "Hello world/n");源码

return 0;it

}

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”(模块),而后保存配置,编译出内核镜像烧写到开发板中。或是下载到开发板上运行。(fblww-0213)
相关文章
相关标签/搜索