Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314266
  • 博文数量: 41
  • 博客积分: 857
  • 博客等级: 准尉
  • 技术积分: 614
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-11 12:42
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(2)

2012年(6)

2011年(32)

分类: LINUX

2011-06-03 15:32:46

开发环境:VMware虚拟机下的Fedora9
linux内核:linux-2.6.32.2(FriendlyARM修正过的,光盘中所附的)
试验平台:mini2440(64M)
实验现象:加载模块时,开发板上的4个LED灯全亮,卸载模块时4个LED灯全熄灭.
 
 
1.解压mini2440光盘中的linux-2.6.32.2-mini2440-2010-921.tar.gz到/opt/FriendlyARM/mini2440/.
 
2.由于此内核源代码顶层目录中的Makefile中的ARCH=arm,CROSS_COMPILE=arm-linux-已被修改,所以在此不用重复此步骤.
 
3.创建.config文件,这里复制config_mini2440_n35(我的开发板的屏)并重命名为.config
 
4.编写led.c文件.程序代码如下
 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include     //对比mini2440用户手册,发现手册中缺少这个头文件
#include
#include
#include
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Lucien Song");

static int __init led_init(void)
{
printk("<0>""the four leds turn on!\n");
s3c2410_gpio_cfgpin(S3C2410_GPB(5),S3C2410_GPIO_OUTPUT);  //手册中S3C2410_GPB5这种写法是不对的
s3c2410_gpio_cfgpin(S3C2410_GPB(6),S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPB(7),S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPB(8),S3C2410_GPIO_OUTPUT);
s3c2410_gpio_setpin(S3C2410_GPB(5),0);
s3c2410_gpio_setpin(S3C2410_GPB(6),0);
s3c2410_gpio_setpin(S3C2410_GPB(7),0);
s3c2410_gpio_setpin(S3C2410_GPB(8),0);
return (0);
}
static void __exit led_exit(void)
{
printk("<0>""the four leds turn off!\n");
s3c2410_gpio_setpin(S3C2410_GPB(5),1);
s3c2410_gpio_setpin(S3C2410_GPB(6),1);
s3c2410_gpio_setpin(S3C2410_GPB(7),1);
s3c2410_gpio_setpin(S3C2410_GPB(8),1);
}
module_init(led_init);
module_exit(led_exit);
 
/************************************************************************
//linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/regs-gpio.h
#define S3C2410_GPIO_OUTPUT  (0xFFFFFFF1)
 
 
 
5.将编写好的hello.c文件放到内核源代码的/drivers/char/目录下,然后修改/drivers/char/Makefile文件,如下图.
              
6.编译内核模块.make modules
  编译结束后,将会在源代码目录下的/drivers/char/下生成我们所需要的led.ko文件,将其通过串口下载到mini2440的开发板上.(具体有关串口下载请查看mini2440的用户手册,这里千万不要用ftp传送,经试验用ftp传递的文件大小会发生变化).
 
7.串口终端下操作开发板,将led.ko文件转移到/lib/modules/2.6.32.2-FriendlyARM/目录下.
 
8.加载模块.insmod led.ko ,这时将会看到LED都亮了!
 
9.查看挂载的模块. lsmod
 
10.查看模块信息.modinfo led(由于开发析上的buybox里没有加入modinfo命令,所以这里不可用),LED全灭!
 
11.卸载模块.rmmod led(注意这里不是led.ko)
       
阅读(2617) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~