Invalid module format (-1): Exec format error

发布于 2022-09-26 12:59:25 字数 2600 浏览 9 评论 0

我仿照网上的例子编译字符驱动,在linux9 上能编译gcc -D__KERNEL__ -DMODULE -static -DLINUX -I /usr/src/linux-2.4/include  -c -o globalvar.o globalvar.c
然后在本机insmod globalvar.o。可是用检查编译arm-linux-gcc -D__KERNEL__ -DMODULE -static -DLINUX -I /home/global/k26/linux/include  -c -o globalvar.o globalvar.c生成globalvar.o后,下载到arm板上,arm板上的linux内核也是在同一个pc主机,用同样的编译器编译的。下载到arm板上,insmod globalvar.o,则抱错:insmod: cannot insert `globalvar.o': Invalid module format (-1): Exec format error
不知道是哪里出了问题?想请教。

以下是
字符驱动

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
MODULE_LICENSE("GPL");

#define MAJOR_NUM 254 //主设备号

static ssize_t globalvar_read(struct file *, char *, size_t, loff_t*);
static ssize_t globalvar_write(struct file *, const char *, size_t, loff_t*);

//初始化字符设备驱动的file_operations结构体
struct file_operations globalvar_fops =
{
 read: globalvar_read, write: globalvar_write,
};
static int global_var = 0; //"globalvar"设备的全局变量

static int __init globalvar_init(void)
{
 int ret;

 //注册设备驱动
 ret = register_chrdev(MAJOR_NUM, "globalvar", &globalvar_fops);
 if (ret)
 {
  printk("globalvar register failure");
 }
 else
 {
  printk("globalvar register success");
 }
 return ret;
}

static void __exit globalvar_exit(void)
{
 int ret;

 //注销设备驱动
 ret = unregister_chrdev(MAJOR_NUM, "globalvar");
 if (ret)
 {
  printk("globalvar unregister failure");
 }
 else
 {
  printk("globalvar unregister success");
 }
}

static ssize_t globalvar_read(struct file *filp, char *buf, size_t len, loff_t *off)
{
 //将global_var从内核空间复制到用户空间
 if (copy_to_user(buf, &global_var, sizeof(int)))
 {
  return - EFAULT;
 }
 return sizeof(int);
}

static ssize_t globalvar_write(struct file *filp, const char *buf, size_t len, loff_t *off)
{
 //将用户空间的数据复制到内核空间的global_var
 if (copy_from_user(&global_var, buf, sizeof(int)))
 {
  return - EFAULT;
 }
 return sizeof(int);
}

module_init(globalvar_init);
module_exit(globalvar_exit);

[ 本帖最后由 againyuan 于 2007-10-27 21:21 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

写下不归期 2022-10-03 12:59:25

我的pc机上linux是2.4的,目标板上的是2.6.9,是不是他们的编译方式不一样。
.o .ko 。到底应该怎样编译呢?
谢谢哦!

回梦 2022-10-03 12:59:25

把ldd3看一下, 2.4 与2.6  kernel 的驱动的不同

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文