免费注册 查看新帖 |

Chinaunix

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

请教!如何将一个模块加到目标开发板? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-27 20:27 |只看该作者 |倒序浏览
我的模块就是一个很简单的字符设备驱动程序
如下:
#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<0)
 {
  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<0)
 {
  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);

该模块在自己的PC机上可以调试成功
但是我想把它动态加载加到开发板上,我应该怎么做呢?

请高手指点,非常感谢!

论坛徽章:
0
2 [报告]
发表于 2007-08-28 09:40 |只看该作者
利用某种方式 nfs 或tftp 传到开发板上  然后insmod

论坛徽章:
0
3 [报告]
发表于 2007-08-28 10:34 |只看该作者
那应该要先交叉编译一下把??
但是我的模块交叉编译不了啊
所以后面的都没有做
我知道如何将文件传到开发板上
但是,交叉编译不成功,即使下载下去也运行不了咯,呵呵

谢谢你,,呵呵

论坛徽章:
5
4 [报告]
发表于 2007-08-28 11:01 |只看该作者
那应该要先交叉编译一下把??
但是我的模块交叉编译不了啊


你怎么不会提问?

你的标题是"请教!如何将一个模块加到目标开发板?", 你的内容是"模块交叉编译不了".

为什么编译不了????

论坛徽章:
0
5 [报告]
发表于 2007-08-28 15:43 |只看该作者
呵呵,不好意思啊,好象扰乱你的思路了

我用的编译命令是:
arm-linux-gcc -Wall -DMODULE -D__KERNEL__ -DDEBUG -PRINTK -I /usr/src/linux-2.4.20-8/include globalvar.o globalvar.c

我也不知道为什么交叉编译不了....出了很多错误,生成不了.BIN文件
首先,交叉编译工具应该没什么问题把,我已经交叉编译过应用程序放到开发板上了,并且运行成功...
其次,该模块在PC上的LINUX里,已经用应用程序测试过了...

请高手指点...非常感谢

论坛徽章:
5
6 [报告]
发表于 2007-08-28 16:00 |只看该作者
你把出错信息贴出来. 如果太多, 起码把前面的出错贴出来.

论坛徽章:
0
7 [报告]
发表于 2007-08-30 10:23 |只看该作者
呵呵,谢谢你了啊,昨天出去办事了
现在才有时间,希望你还能看到

用arm-linux-gcc -Wall -DMODULE -D__KERNEL__ -DDEBUG -PRINTK -I /usr/src/linux-2.4.20-8/include -c -o g;obalvar.o globalvar.c
命令后,错误如附件1

使用命令
arm-linux-gcc -Wall -Os  -DMODULE -D__KERNEL__ -DDEBUG -PRINTK -I /usr/src/linux-2.4.20-8/include -s -o globalvar globalvar.c
错误如附件2

我是刚接触LINUX,还不太懂内核,上面信息看不明白是什么意思。。。
打算在开发板上LINUX下编个字符设备驱动。。。
请高手指点,3X

附件1.rar

4.28 KB, 下载次数: 55

附件2.rar

6.57 KB, 下载次数: 58

论坛徽章:
5
8 [报告]
发表于 2007-08-30 10:44 |只看该作者
有些像编译器arm-linux-gcc和内核版本之间匹配的问题.

你查看当前编译器的文档, 看支持哪些内核版本, 再更换编译器或内核版本试试.
另: /usr/src/linux-2.4.20-8/include/asm是一个链接, 确认一下这个链接是否指向正确的地址.

论坛徽章:
0
9 [报告]
发表于 2007-08-30 14:48 |只看该作者
呵呵,谢谢你了,光明使者,试一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP