查看: 2933|回复: 0

在飞凌6410开发板上运行hello.c内核模块详解

[复制链接]
发表于 2011-10-18 13:06:23 | 显示全部楼层 |阅读模式
早上7点,就被窗外一群敲锣打鼓的响声吵醒了,今天可是星期天啊,没法睡了,起来做点有意义的吧。
昨天在OK6410开发板上折腾了一下午,才正常把内核模块的编译和运行搞定,现在整理一下过程,待以后有个参考。
什么事情实际做起来总会比想象的复杂,特别是一开始,本来是很简单的一段代码如下:
#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
static int __init hello_init()
{
    printk(KERN_EMERG"Hello World!\n");
    return 0;
}
static void __exit hello_exit()
{
    printk(KERN_EMERG "Goodbye Cruel World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
第一步当然是编译了,遇到第一个问题:要在6410上运行该内核模块,如何设置交叉编译器?首先想到的是makefile,打开makefile文件,如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /forlinux/kernel/linux-2.6.28
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
首先需要指定kernel的源代码路径:
KDIR := /forlinux/kernel/linux-2.6.28
这个路径由自己决定,移植的arm平台下的linux源代码放在什么地方就填什么路径,如果指定错误的话,会提示找不到
#include
#include
这两个文件的。
然后指定交叉编译器,CROSS_COMPILE=/usr/loacl/arm/4.2.2-eabi/usr/bin/arm-linux-
同样这个路径也是自己决定,放在哪个目录就填哪个目录。
makefile主要修改这两个地方就OK了,保存关闭。
在控制台命令下,进入hello.c目录,先make clean一下,再make,可以看到hello.ko内核模块生成了,将它拷贝到ok6410板上:
insmod hello.ko
可以看到hello world打印信息,但是在rmmod的时候,确无法卸载,google了一把,需要在linux源码目录下,执行make prepare一下,修复bounds.h文件。
再rmmod hello
Goodbye Cruel World!
卸载成功。
原文出自:一路上you你 大神的搜狐博客
文章转引自:飞凌嵌入式Linux讨论区 www.witech.com.cn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表