天天看点

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

继续阅读