打印

请教在开发板上运行驱动程序

[复制链接]
1406|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
songbw|  楼主 | 2008-7-14 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很简单的字符驱动
hello.c
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
  printk(KERN_DEBUG "hello world!\n");
  return 0;
 }

void cleanup_module(void)
  {   
     printk(KERN_DEBUG "goodbye cruel world !\n");
   }

Makefile如下:

CROSS =/tools/3.4.1/bin/arm-linux-gcc
INCPATH =/tools/2.6.8.1/include
all:hello
hello :
    $(CROSS) -I$(INCPATH) -c hello.c -o hello.o
clean :
    rm -rf hello *.o

我的内核版本是2.6.8.1,gcc版本是3.4.1,安装路径是tools/3.4.1
执行make后只生成hello.o文件,没有生成hello.ko文件,
最后下载到开发板的内核中产生如下错误:
No module found in object
insmod: cannot insert 'hello.o':Invalid module format (-1):Exec format error

上网查了好多也没个结果。
请高手指教了。

相关帖子

沙发
songbw|  楼主 | 2008-7-15 08:45 | 只看该作者

高手指教

使用特权

评论回复
板凳
songbw|  楼主 | 2008-7-15 09:43 | 只看该作者

很奇怪,我问的这个问题很难吗?为什么没人回答呢?

使用特权

评论回复
地板
阿南| | 2008-7-15 21:26 | 只看该作者

用这种方法试试

11.1 模块编程实验
1.源程序
模块程序清单:
#define MODULE
#include <linux/module.h>
int init_module(void){
    printk (“<1>Hello,world!\n”);
    return 0;
}
void cleanup_module(void){
    printk(“<1>Goodbye cruel world!\n”);
}
我们在基于PC机的Linux驱动学习时,已经完成过该实验,现在再次用这个最简单的实验来学习嵌入式Linux驱动的开发过程,和验证它与PC机Linux驱动的相同性。
2.PC机上编译运行
#gcc –c hello.c
#insmod ./hello.o
hello,world!
#rmmod hello 
Goodbye cruel world!
#
3.为目标板编译和运行
Makefile脚本清单:
CROSS=/opt/host/armv4l/bin/armv4l-unknown-linux-
INCPATH=/linuette/target/box/kernel/include
all: hello 
hello:
        $(CROSS)c –I$(INCPATH) hello.c
clean:
        rm –rf *.o
写好脚本后,输入make编译
#make
/opt/host/armv4l/bin/armv4l-unknown-linux-gcc –I/linuette/target/box/kernel/include hello.c
将生成的目标文件下载到目标板的/tmp目录下,动态装载和卸载时将在终端打印相应的字符串,如下:
#insmod ./hello.o
Hello,world!
#rmmod hello
Goodbye cruel world!
当装载后,可以查看 /proc/modules的内容,是否装载成功。
#cat /proc/modules

使用特权

评论回复
5
边锋软件| | 2008-7-15 23:12 | 只看该作者

打错了,留个脚印吧

使用特权

评论回复
6
yzaries| | 2008-7-15 23:50 | 只看该作者

看书

看看书吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

86

帖子

1

粉丝