码迷,mamicode.com
首页 > 其他好文 > 详细

hello world 驱动

时间:2014-09-12 17:06:43      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:des   style   color   io   os   使用   ar   for   文件   

1.不带参数的hello world驱动

[weishusheng@localhost holle-world]$ vim hello.c

#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("GPL");

static int hello_init(void)

 {
 printk(KERN_ALERT "hello %s!\n",whom);
 return 0;
 }
 
 static void hello_exit(void)
 {
 printk(KERN_ALERT "Goodbye, world!\n");

 }
module_init(hello_init);
module_exit(hello_exit);

 

 

 linux/init.h  与linux/module.h是模块必须包含的,MODULE_LICENSE("GPL")告诉内核该模块使用自由许可证,没有这句,内核在装载模块时会抱怨。module_init()与module_exit()是两个宏,不是函数,通过这两个宏,内核分别在内核装载模块和卸载模块时调用。

 

 

接下来编写Makefile

[weishusheng@localhost holle-world]$ vim Makefile 

1 #ARCH=x86
2 ARCH=arm920t
3 PROJ=fl2440
4 PWD=$(shell pwd)
5
6 ifneq ("${ARCH}", "x86")
7 CROSS_COMPILE ?= /opt/buildroot-2011.11/${ARCH}/usr/bin/arm-linux-
8 KERNEL_DIR = ${PWD}/../..//kernel/linux-3.0-Dm9000
9 else
10 KERNEL_DIR = /lib/modules/$(shell uname -r)/build
11 endif
12
13
14 obj-m += hello.o
15 #obj-m += workqueue.o
16
17 all:
18 make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
19 @make clear
20
21 clear:
22 @rm -f *.o *.cmd *.mod.c
23 @rm -rf *~ core .depend .tmp_versions Module.symvers modules.order -f
24 @rm -f .*ko.* *ko.* .*.o.cmd
25

26 clean:
27 rm -f *.ko

接下来编译

[weishusheng@localhost holle-world]$ ls
hello.c Makefile

[weishusheng@localhost holle-world]$ make

make -C /home/weishusheng/driver/holle-world/../..//kernel/linux-3.0-Dm9000 SUBDIRS=/home/weishusheng/driver/holle-world modules
make[1]: Entering directory `/home/weishusheng/kernel/linux-3.0-Dm9000‘
CC [M] /home/weishusheng/driver/holle-world/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/weishusheng/driver/holle-world/hello.mod.o
LD [M] /home/weishusheng/driver/holle-world/hello.ko
make[1]: Leaving directory `/home/weishusheng/kernel/linux-3.0-Dm9000‘
make[1]: Entering directory `/home/weishusheng/driver/holle-world‘
make[1]: Leaving directory `/home/weishusheng/driver/holle-world‘
[weishusheng@localhost holle-world]$ ls
hello.c hello.ko Makefile

    此时已经生成hello.ko,把hello.ko通过tftp下到开发板,insmod,然后用dmesg可查看到

>: insmod hello.ko 

>: dmesg

...

...

...

hello world!
>:

 

2.带参数的hello world程序

[weishusheng@localhost holle-world]$ vim hello.c

1 /*********************************************************************************
2 * Copyright: (C) 2014 weishusheng
3 * All rights reserved.
4 *
5 * Filename: hello.c
6 * Description: This file use fot build my first module
7 *
8 * Version: 1.0.0(09/02/2014)
9 * Author: weishusheng <642613208@qq.com>
10 * ChangeLog: 1, Release initial version on "09/02/2014 01:18:16 PM"
11 *
12 ********************************************************************************/
13 #include<linux/init.h>
14 #include<linux/module.h>
15 #include<linux/moduleparam.h>
16 MODULE_LICENSE("GPL");
17 static char *whom = "world";
18 static int howmany = 1;
19 module_param(howmany, int, S_IRUGO);
20 module_param(whom, charp, S_IRUGO);
21
22 static int hello_init(void)
23 {
24 int i;
25 for(i=0;i<howmany;i++)

26 printk(KERN_ALERT "hello %s!\n",whom);
27 return 0;
28 }
29
30 static void hello_exit(void)
31 {
32 printk(KERN_ALERT "Goodbye, world!\n");
33
34 }
35
36
37 module_init(hello_init);
38 module_exit(hello_exit);

    module_param用于声明参数,需要包含 #include<linux/moduleparam.h>头文件,module_param原型为module_param(name,type,perm),name是变量名字,type是变量类型,perm是访问许可值,一般设为S_IRUGO。Makefile可用上面那个,一样可用编译。

    后面就是make,insmod,dmesg查看了,步骤和上面一样。

 

hello world 驱动

标签:des   style   color   io   os   使用   ar   for   文件   

原文地址:http://www.cnblogs.com/wss-linux/p/3968597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!