请教!如何将一个模块加到目标开发板?
我的模块就是一个很简单的字符设备驱动程序
如下:
#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机上可以调试成功
但是我想把它动态加载加到开发板上,我应该怎么做呢?
请高手指点,非常感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
利用某种方式 nfs 或tftp 传到开发板上 然后insmod
那应该要先交叉编译一下把??
但是我的模块交叉编译不了啊
所以后面的都没有做
我知道如何将文件传到开发板上
但是,交叉编译不成功,即使下载下去也运行不了咯,呵呵
谢谢你,,呵呵
你怎么不会提问?
你的标题是"请教!如何将一个模块加到目标开发板?", 你的内容是"模块交叉编译不了".
为什么编译不了????
呵呵,不好意思啊,好象扰乱你的思路了
我用的编译命令是:
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里,已经用应用程序测试过了...
请高手指点...非常感谢
你把出错信息贴出来. 如果太多, 起码把前面的出错贴出来.
呵呵,谢谢你了啊,昨天出去办事了
现在才有时间,希望你还能看到
用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
有些像编译器arm-linux-gcc和内核版本之间匹配的问题.
你查看当前编译器的文档, 看支持哪些内核版本, 再更换编译器或内核版本试试.
另: /usr/src/linux-2.4.20-8/include/asm是一个链接, 确认一下这个链接是否指向正确的地址.
呵呵,谢谢你了,光明使者,试一下