helloworld模块在开发板运行

早上7点,就被窗外一群敲锣打鼓的响声吵醒了,今天可是星期天啊,没法睡了,起来做点有意义的吧。
昨天在OK6410开发板上折腾了一下午,才正常把内核模块的编译和运行搞定,现在整理一下过程,待以后有个参考。
什么事情实际做起来总会比想象的复杂,特别是一开始,本来是很简单的一段代码如下:
#include <linux/module.h>
#include <linux/init.h>
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 <linux/module.h>
#include <linux/init.h>
这两个文件的。
然后指定交叉编译器,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!
卸载成功。

转载于:https://www.cnblogs.com/bo1989/archive/2012/11/12/2765682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值