C 对齐陷阱:未在[<;80467364>;]处处理指令e1913f9f

C 对齐陷阱:未在[<;80467364>;]处处理指令e1913f9f,c,linux-kernel,kernel,linux-device-driver,embedded-linux,C,Linux Kernel,Kernel,Linux Device Driver,Embedded Linux,当我在应用程序中使用自己的ioctl i2c写入函数进行i2c写入时,我从内核得到了“对齐陷阱:不处理指令”的问题 实际上我为一个相机编写了自己的驱动程序,具有i2c读/写功能来控制相机(控制路径) 这是我用来访问i2c进行写操作的代码 这个问题是在i2c写入应用程序运行几次或第一次运行之后出现的。。。。 因此,我们无法预测问题的发生 我也看到过这种情况,在单次运行之后,我们会在几分钟后得到这个问题 我不知道有什么问题。 顺便说一句,我有i2c读取功能,但没有任何“kmalloc”或内存allo

当我在应用程序中使用自己的ioctl i2c写入函数进行i2c写入时,我从内核得到了“对齐陷阱:不处理指令”的问题

实际上我为一个相机编写了自己的驱动程序,具有i2c读/写功能来控制相机(控制路径)

这是我用来访问i2c进行写操作的代码

这个问题是在i2c写入应用程序运行几次或第一次运行之后出现的。。。。 因此,我们无法预测问题的发生

我也看到过这种情况,在单次运行之后,我们会在几分钟后得到这个问题

我不知道有什么问题。 顺便说一句,我有i2c读取功能,但没有任何“kmalloc”或内存alloc/free。 它的工作没有任何问题

在代码中,如果我注释掉了“kfree(temp_buff)”,那么我就不会遇到这种“对齐”陷阱问题,但不建议这样做

有人能帮我解决这个问题吗

    static s32 ioctl_i2cwrite(struct v4l2_int_device *s, struct v4l2_i2c *i2c_reg)
    {
        int j = 0, i = 0, ret = 0, reg_size_bkp = 0;
    //Titus
        int total_size = i2c_reg->count + i2c_reg->reg_size;    
        u8 i2c_w_buf [total_size];
        char *temp_buff;


    //  int total_size = 3;
    //  u8 i2c_w_buf[3];


        printk("Titus : i2c_write executed! %s : %d, total_size -> %d\n",__func__,__LINE__,total_size);


    //  temp_buff = kmalloc(i2c_reg->count * sizeof(char), GFP_KERNEL);
        temp_buff = kmalloc(i2c_reg->count, GFP_KERNEL);
        if(temp_buff == NULL){
            printk("failed to allocate memory:\n");
            return -1;  
        }

        memset(temp_buff, 0, i2c_reg->count);
        memcpy(temp_buff, i2c_reg->buffer, i2c_reg->count);
    /*
        ret = copy_from_user(temp_buff,i2c_reg->buffer,i2c_reg->count);
        if(ret != 0)
        {
        pr_err("copy_from_user is failed... %s %d\n",__FILE__,__LINE__);
        kfree(temp_buff);
        return ret; 
        }
    */

        /* Backup the size of register which needs to be read after filling the address buffer */
        reg_size_bkp = i2c_reg->reg_size;
        printk(" i2c_write: reg_size_bkp=%d i2c_reg->reg_size=%d  %s\n",reg_size_bkp,i2c_reg->reg_size, __FILE__);


        // Fill the address in buffer upto size of address want to write */
        for(i = --i2c_reg->reg_size; i >= 0 ; i--,j++)              
            i2c_w_buf[i] = ((i2c_reg->reg >> (8*j)) & 0xFF);    

        /* Append the data value in the same buffer  */
        for(i = reg_size_bkp; i < (i2c_reg->count + reg_size_bkp) ; i++,temp_buff++)
            i2c_w_buf[i] = *temp_buff;

        ret = i2c_master_send(leonardo_data.i2c_client, i2c_w_buf, total_size );

        //TODO: Titus: It leads to alignment trap issue.
        kfree(temp_buff);


        return ret;
}
静态s32 ioctl_i2cwrite(struct v4l2_int_device*s,struct v4l2_i2c*i2c_reg)
{
int j=0,i=0,ret=0,reg\u size\u bkp=0;
//提图斯
int total_size=i2c_reg->count+i2c_reg->reg_size;
u8 i2c_w_buf[总尺寸];
字符*temp_buff;
//int total_size=3;
//u8 i2c_w_buf[3];
printk(“Titus:i2c\u写入已执行!%s:%d,总大小->%d\n”,\uuuu func\uuuuuuuuuu,总大小);
//temp\u buff=kmalloc(i2c\u reg->count*sizeof(char),GFP\u内核);
temp\u buff=kmalloc(i2c\u reg->count,GFP\u内核);
if(temp_buff==NULL){
printk(“分配内存失败:\n”);
返回-1;
}
memset(临时增益,0,i2c寄存器->计数);
memcpy(临时缓冲区,i2c注册->缓冲区,i2c注册->计数);
/*
ret=从用户处复制(临时缓冲区,i2c\U寄存器->缓冲区,i2c\U寄存器->计数);
如果(ret!=0)
{
pr\u err(“从用户复制\u失败…%s%d\n”,\u文件\u,\u行\u);
kfree(临时抛光);
返回ret;
}
*/
/*备份填充地址缓冲区后需要读取的寄存器大小*/
reg_size_bkp=i2c_reg->reg_size;
printk(“i2c\u写入:reg\u size\u-bkp=%d i2c\u-reg->reg\u-size=%d%s\n”、reg\u-size\u-bkp、i2c\u-reg->reg\u-size、\uuu文件);
//在缓冲区中填充地址,直到达到要写入的地址大小*/
对于(i=--i2c_reg->reg_size;i>=0;i--,j++)
i2c_w_buf[i]=((i2c_reg->reg>(8*j))&0xFF);
/*将数据值追加到同一缓冲区中*/
对于(i=reg\u size\u bkp;i<(i2c\u reg->count+reg\u size\u bkp);i++,temp\u buff++)
i2c_w_buf[i]=*温度buff;
ret=i2c_主数据发送(leonardo_data.i2c_client,i2c_w_buf,总大小);
//TODO:提图斯:这会导致对齐陷阱问题。
kfree(临时抛光);
返回ret;
}
root@imx6:/# root@imx6:/#对齐陷阱:不处理指令 e1913f9f位于[]的未处理故障:校准异常(0x001) 在0x9e383d41处,内部错误::1[#1]抢占已链接的SMP ARM模块 在:ov5642_摄像头mxc_v4l2_捕获ipu_bg_覆盖层_sdc ipu_静止 ipu prp enc ipu csi enc adv7180在ipu fg覆盖sdc v4l2内部设备gpio密钥usb\u f\u ecm g\u以太usb\u rndis u\u以太 libcomposite CPU:1 PID:935 Comm:Xorg未受污染3.14.52-svn99#2 任务:a8ace3c0 ti:a8d38000任务。ti:a8d38000 PC位于 gckOS_原子增量+0x1c/0x48 LR处于 gckVIDMEM_节点_分配+0x100/0x13c pc:[]lr: []psr:a00f0013 sp:a8d39c50 ip:a8d39c60 fp: a8d39c5c r10:00000006 r9:a8ec7e80 r8:00000009 r7:a8846700 r6 :00000000 r5:a8846300 r4:9e383240 r3:00000000 r2:a8d39c6c r1:9e383d41 r0:a8846300标志:FIQ on模式下的NzCv IRQ SVC_32 ISA ARM段用户控制:10c5387d表:3840404a DAC: 00000015进程Xorg(pid:935,堆栈限制=0xa8d38238)堆栈: (0xa8d39c50至0xa8d3a000)9c40:
a8d39c9c a8d39c60 8047b810 80467358 9c60:800dd984 9e383240 00000000 a8ec7e80 a868c540 0000000 9 0000000 7 0000000 2 9c80:0000000 6 0000000 1 a8846700 00004000 a8d39cfc a8d39ca0 8046ecfc 8047b71c 9ca0:a8d39ccc a8d39cb0 800ddb1c 80052c24 a8819a00 000003a7 00004000 a8d39db8 9cc0: 000000 cc a8b37cc0 a8ec7e80 00000000 a8b37eb4 FFFFFF00000000 a8d39d88 9ce0:A884670000000000 A8D380000000001 a8d39d5c a8d39d00 80471768 8046ea34 9d00:000000 40 0000000 6 0000000 3 a8d39dbc 00000000 00100100 00000000 00000000 9d20:00000000 000003a7 a8b37eb4 00000000 FFFFFF00000000 a8844600 a8de7540 9d40:a8d38000 00007530 a8104338 7e8f38f8 a8d39ef4 a8d39d60 8046d848 80470d9c

9d60:00000000 00000000 7e8f3970 00000000 00000140 00000000 7e8f3970 00000000 9d80:00000140 00000000 00000007 00000002 00000000 00000000 000000000000009DA0:00000000000000004000000400000000040000000006 00000003 00000001 00000000 9dc0:00000000 00000000 00000000 00000000 00000000 00000000 00000000 7e8f39d8 9de0:00000000 76fa4000 76f6e6fd 76f9899c 00000017 76e4ff10 00001000 FFFFFFFFF9E00:fffffff0 783b79f0 00001100000000000000 7e8f39ec 00000001 7e8f3a10root@imx6:/# 9e20:00000000000000000002076F674A3 00000000000000000002000000000 76fab554 9e40:7835f998 76b89000 0000000 9 76fb018c 76fb018c 76fb018c 76fb018c 76fb018c 76fb018c 9e60:7815396000000000 78382c70 765746B300000000 00000000 00000000 00000000 9e80:00000000 00000000 00000000 76b894e8 7e8f3ae4 00000044 7e8f3ad0 00000028 9ea0:0000001a 783fac14 00000000 76afbe9d 00000000000000000040 7e8f3ae4 9ec0:780d6228 766ce63c a8d39ef4 a82f4780 a82f4780 00007530 7e8f38f8 a8104338 9ee0:a8d38000 7e8f38f8 a8d39f7c a8d39ef8 800f26fc 8046d728 8004e090 8004dcb8 9f00: a8d39f1c a8d39f10 7e8f3a10 7e8f39f4 00000000 00000129 8000eae4 a63ed680 9f20:7e8f39f4 00000000 00000129 8000eae4 a8d38000 00000000 a8d39f94 a8d39f48 9f40:80507e24 805067b4 00000000000000000001 7e8f3c48 a82f4780 a82f4780 00007530 9f60:7E8F38F80000000 9 a8d38000
for(i = reg_size_bkp; i < (i2c_reg->count + reg_size_bkp) ; i++,temp_buff++)