免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4315 | 回复: 13
打印 上一主题 下一主题

请教:hello的make编译失败 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-17 19:04 |只看该作者 |倒序浏览
Makefile文件如下:
ifeq($(KERNELRELEASE),)
        KERNELDIR ?= /lib/modules/$(shell uname -r)/build
        PWD := $(shell pwd)

modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions .PHONY: modules modules_install clean
else
        obj-m :=hello.o
endif
错误提示信息:Makefile:1: ***missing separator. stop.

我的hello.c是这样写的
#include<linux/init.h>
#include<linux/module.h>
#include<linux/config.h>

MODULE_LICENSE("GPL");

static int hello_init(void)
{
        printk(KERN_ALERT "hello arm!\n");
        `return 0;
}

static viod hello_exit(void)
{
        printk("byebye!\n");
}

module_init(hello_init);
module_exit(hello_exit);

linux的版本是2.6.13
问题出在哪?用tab键了。请大家给予指点,不胜感激!!

[ 本帖最后由 yufeng1009 于 2009-7-18 15:04 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-18 15:03 |只看该作者

请教,hello.ko向目标板加载失败

上面的程序终于编译通过了,生成了hello.ko。我用insmod  hello.ko在虚拟机上能够加载成功。但在目标板上仍然不成功。错误提示:
[root@FriendlyARM /bin]# insmod hello.ko
insmod: cannot insert `hello.ko': Invalid module format (-1): Exec format error
我改用 arm-linux-gcc  -D__KERNEL__ -DMODULE -DLINUX -Wall  -c -o hello.ko hello.o
生成hello.ko加载仍是上面的提示,错误在哪里?

[ 本帖最后由 yufeng1009 于 2009-7-18 15:46 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-07-18 21:26 |只看该作者
有一种情况是内核版本不对应. 比如你编译MODULE用的是2.4内核. 然后想把它装到2.6的内核上.

论坛徽章:
0
4 [报告]
发表于 2009-07-18 21:39 |只看该作者

回复 #3 accessory 的帖子

也就是说,2.4和2.6的编译选项不同,对吧?感觉我的Makefile文件是针对gcc的,怎样写是 arm-linux-gcc-的呢?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2009-07-19 09:41 |只看该作者

回复 #4 yufeng1009 的帖子

1、需要使用交叉编译器;2、版本一定要一致。

论坛徽章:
0
6 [报告]
发表于 2009-07-19 11:15 |只看该作者

回复 #5 dreamice 的帖子

能不能说得具体点?首先内核版本是一致的都是2.6.13的,我的虚拟机也已经装上了 3.4.1 的交叉编译链。我不清楚 怎么在 Makefile里体现交叉编译,我上面的Makefie编译器应该是gcc 吧

论坛徽章:
0
7 [报告]
发表于 2009-07-20 15:07 |只看该作者

re

交叉编译器的指明示在内核树的Makefile里

你的目标板编译过的内核在哪

上面的Makefile 里把 KERNELDIR 设为你目标板的编译过的内核源码树就可以了,

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2009-07-20 15:57 |只看该作者
根据错误提示,感觉像是Makefile中的tab键没用好啊,都确认正确了吗?

论坛徽章:
0
9 [报告]
发表于 2009-07-20 16:02 |只看该作者

回复 #7 奇门遁甲-lu 的帖子

目标板编译过的内核?我才接触不久懂得很少。我没在目标板上编译过内核,必须要做么?
望指教

论坛徽章:
0
10 [报告]
发表于 2009-07-20 16:09 |只看该作者

回复 #8 Godbach 的帖子

是这样的,我的程序在宿主机上已经编译成功了,也可以把这个模块加载到宿主机。
我不懂的是交叉编译怎么进行?我修改了根目录的编译器CROSS_COMPILE=arm-linux-,还是错。我的宿主机和目标机的版本都是2.6.13的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP