配置参数的可变大小 ioctl

问题描述

我需要将可变大小的配置传递给字符设备/驱动程序,我想知道处理它的最佳方法是什么。目前,我使用与此类似的固定数组大小的结构:

#define ARRAY_SIZE1    4
#define ARRAY_SIZE2    4
#define ARRAY_SIZE3    32
#define ARRAY_SIZE4    8
#define ARRAY_SIZE5    8
    
typedef struct
{
    union
    {
        struct
        {
            uint64_t item1        :   4;
            uint64_t item2        :   4;
            uint64_t item3        :   8;
            uint64_t item4        :   48;
        };
        
        uint64_t combined;
    };
        
    union
    {
        uint64 array1[ARRAY_SIZE4];
        uint64 array2[ARRAY_SIZE5];
        uint64 array3[ARRAY_SIZE4];
    };
} B;
    
typedef struct
{
    uint64 element1;
    uint64 element2[ARRAY_SIZE1];        
    B element3[ARRAY_SIZE2];
    uint64 element4[ARRAY_SIZE3];
    
} A;

#define IOCTL_XYZ _IOWR(MAJOR_NUMBER,10,A)

但我不想受到数组大小的限制(特别是对于元素 3)。 我应该为结构 A 的每个元素将其分解为多个 ioctl 吗?但这会导致多次 ioctl 调用。或者用大小和指针替换固定数组?我已经读过在结构元素中包含指针不是一个好习惯(如果有人能详细说明原因),那么这种情况的最佳实践是什么?

请记住,我需要此结构对 windows 和 linux 驱动程序通用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)