Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153052
  • 博文数量: 25
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-22 23:16
文章存档

2009年(22)

2008年(3)

我的朋友

分类: LINUX

2008-11-22 23:38:53


写的第一个驱动是将cpu的GPIOi电平拉低,这样可以使MCU查询到该PIN值为O,从而执行关机断电的操作

1、gpioi.c
#include 
#include

MODULE_LICENSE("Dual BSD/GPL");
static int gpioi_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}

static void gpioi_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(gpioi_init);
module_exit(gpioi_exit);

2、Makefile:
KERNELDIR := /home/xxx/Project/kernel
PWD := $(shell pwd)
CC=arm-linux-gcc
obj-m := gpioi.o
all:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    rm -rf *.ko *.o  *.mod.*


3、装载/卸载模块
#insmod gpioi.ko
提示:"insmod :cannot insmod gpioi.ko. success(8),success."
#dmesg |tail  查看内核打印的信息

#modinfo gpioi.ko  查看该驱动模块的VERMAGIC(红色部分),发现内核版本与模块版本不一致。

filename:       gpioi.ko

license:        Dual BSD/GPL

author:        

description:    A simple Module

alias:          a simplest module

vermagic:       2.6.14 sdk-2.3-3 gcc-4.0

depends:    

#echo 15 > /proc/sys/kernel/printk 打印所有内核消息到console
但是发现终端打印消息不同步,有一点延迟,比如某个函数都已经执行完了,而printk的消息还没有完全打印出来。如果你有好的解决办法,还望不吝赐教。


注:
a、KERNELDIR所指向的kernel要事先编译好,否则会出错。
b、内核版本与模块版本不一致。version magic 问题:重新make menuconfig ,“General Setup"->修改Local kernel version名称,使其与kernel的VERMAGIC_STRING保持一致。

参考资料:
《内核模块加载时的版本检查》,
http://blog.chinaunix.net/u2/70379/showart_1138667.html


阅读(1056) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:file_operations

给主人留下些什么吧!~~