当前位置:  技术问答>linux和unix

嵌入式Linux中copy_to_user中Segmentation fault错误

    来源: 互联网  发布时间:2017-04-28

    本文导语:  其实这个代码与具体开发板无关,想在内核空间和用户空间传递结构体数据,第一块的write已经验证成功,但是read一直报Segmentation fault错误,已经调了好几天。想请教大家,谢谢大家,具体代码如下: 驱动代码: #i...

其实这个代码与具体开发板无关,想在内核空间和用户空间传递结构体数据,第一块的write已经验证成功,但是read一直报Segmentation fault错误,已经调了好几天。想请教大家,谢谢大家,具体代码如下:

驱动代码:
#include   
#include   
#include 
#include 
#include 
#include 
#include  
#include 

/*
      Kernel Version: Linux 2.6.38
      Arm Version: Mini 6410
*/

#define MyPrintk  printk

struct my_data_structure
{
unsigned int number;
char *name;
unsigned long count;
};

static dev_t  Leds_Major ;
static char * DEVICE_NAME = "DataTransfemission";
static struct class *leds_class;
static struct my_data_structure my_own_data[] = {
{1,"Jack",0},
{2,"Tom",0},
{3,"Kobe",0},
{4,"Xiaohong",0}
};

static ssize_t data_read(struct file *file, char __user * buffer, size_t count, loff_t *pos)
{
struct my_data_structure temp_data= 
{6,"Jack",0};
MyPrintk("123n");
int ret = copy_to_user(buffer,(void *)&temp_data, sizeof(temp_data));
if (ret != 0){
MyPrintk("read errorn");
}
return 0;
}

static ssize_t data_write(struct file *flie, const char __user * buffer, size_t count, loff_t *pos)
{
struct my_data_structure user_data;
int ret = copy_from_user((void *)&user_data, buffer, count);
if (ret != 0){
MyPrintk("write errorn");
}
MyPrintk (KERN_EMERG "Kernel from user data: %i, %s, %lun", user_data.number, 
user_data.name, user_data.count);  
return 0;
}

static int data_open(struct file *file, struct node *nodes)
{
return 0;
}

static struct file_operations  s3c64XX_leds_fops = {
.owner = THIS_MODULE,
.read = data_read,
.write = data_write,
.open = data_open,
};

static int myleds_init(void)  
{   
Leds_Major = register_chrdev(Leds_Major,DEVICE_NAME , &s3c64XX_leds_fops);
if(Leds_Major count = 2;
ret = write(fd, my_write_data2 , sizeof(struct my_data_structure));
if(ret count);


printf("read 2!n");
struct my_data_structure* my_read_data2;
ret = read(fd, my_read_data2 , sizeof(struct my_data_structure));
if(ret number, my_read_data2->name, my_read_data2->count);



free(my_write_data2);
free(my_read_data2);
free(my_read_data3);
return 0;
}

|
我没调试你的程序,但你的程序肯定是不能运行的,
printf("my_read_data: %ui, %s, %uln", my_read_data.number, my_read_data.name, my_read_data.count);肯定要段错误的
my_read_data.name的地址在内核
struct my_data_structure{    unsigned int number;    char *name;    unsigned long count;};
这样的定义是不能将name的数据传送到用户端
你需要把name改成char数组。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问在哪下载嵌入式Linux开发平台???想学嵌入式开发!!!
  • 有谁做过嵌入式 Linux开发?是否有嵌入式Linux的JVM?
  • 嵌入式网络编程与非嵌入式网络编程有什么不同
  • 问一个弱弱的问题:做嵌入式开发,宿主机的Linux版本一定要跟目标机上的嵌入式Linux版本一致么?
  • 我怎么糊涂了:想开发嵌入式系统(目标机采用UCLINUX嵌入式操作系统),在RED HAT LINUX下开发,选用什么工具呢?QT还是qt embedded?
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 请问什么是嵌入式数据库?(空)
  • 关于“嵌入式Linux”
  • 嵌入式系统的学习
  • 嵌入式学习方法
  • 请问:构建一个嵌入式开发环境时的疑问?
  • linux 嵌入式开发用买开发板吗?
  • 求嵌入式Linux的入门书籍!
  • 嵌入式应用开发协作系统 Yocto
  • 嵌入式系统的C运行库 Newlib
  • 嵌入式GLIBC EGLIBC
  • 驱动程序开发和嵌入式开发有什么联系吗?
  • 嵌入式 syslog
  • vc++与Linux嵌入式
  • 计算机专业学习 嵌入式可以么 ??
  • 现在LINUX主要用在哪些嵌入式设备上?
  • 嵌入式系统 Prex
  • web开发和嵌入式开发哪个更有挑战
  • 嵌入式linux 组播接收问题
  • Linux的嵌入式开发,请高手指点
  • 国内有哪些好的嵌入式公司???
  • 开源嵌入式操作系统 Contiki
  • 嵌入式Web服务器 Appweb
  • 实时嵌入式操作系统 NuttX
  • 嵌入式系统虾米意思呀?
  • Linux 用什么工具进行嵌入式开发。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,