Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Linux内核模块中,如何将文件读入该模块?静态常量结构fw_数据GSL1680_fw[]={filecontent}_Android_C++_C_Linux_Kernel Module - Fatal编程技术网

Android 在Linux内核模块中,如何将文件读入该模块?静态常量结构fw_数据GSL1680_fw[]={filecontent}

Android 在Linux内核模块中,如何将文件读入该模块?静态常量结构fw_数据GSL1680_fw[]={filecontent},android,c++,c,linux,kernel-module,Android,C++,C,Linux,Kernel Module,我试图修改现有的Linux内核模块以加载固件 文件系统上文件中的数据。我已经研究了很多方法 这在其他模块代码中都需要对现有模块进行重大修改 代码。我想使用一个.h文件来包含修改并保留 驱动程序文件本身保持原样,以便修改后的驱动程序更便于移植 驱动程序的编写方式已经调用了一个.h文件来获取所需的 但是,这些值是在.h文件中预先设置的,我想做的是 让.h文件从磁盘上的配置文件(闪存组件)获取数据 此驱动程序适用于android)。我已经广泛地搜索了一个类似的 一种从文件中读取数据的方法,但不以模块所

我试图修改现有的Linux内核模块以加载固件 文件系统上文件中的数据。我已经研究了很多方法 这在其他模块代码中都需要对现有模块进行重大修改 代码。我想使用一个.h文件来包含修改并保留 驱动程序文件本身保持原样,以便修改后的驱动程序更便于移植

驱动程序的编写方式已经调用了一个.h文件来获取所需的 但是,这些值是在.h文件中预先设置的,我想做的是 让.h文件从磁盘上的配置文件(闪存组件)获取数据 此驱动程序适用于android)。我已经广泛地搜索了一个类似的 一种从文件中读取数据的方法,但不以模块所需的形式存储数据。以下是保存数据的方法:

struct fw_data
{
u32 offset : 8;
u32 : 0;
u32 val;
};

static const struct fw_data GSL1680_FW[] = {
{0xf0,0x3},
{0x00,0xa5a5ffc0},
{0x04,0x00000000},
{0x08,0xe810c4e1},
{0x0c,0xd3dd7f4d},
{0x10,0xd7c56634},
{0x14,0xe3505a2a},
{0x18,0x514d494f},
{0x1c,0xb83a7121},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00001000},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000001},
{0x44,0x00000000},
{0x48,0x00000000},
{0x4c,0x00000000},
{0x50,0x00000000},
{0x54,0x01020304},
{0x58,0x05060708},
{0x5c,0x090a0b0c},
{0x60,0x0d0e0e0f},
{0x64,0x10111213},
{0x68,0x14151617},
{0x6c,0x18191a1b},
{0x70,0x1b1c1e1f},
{0x74,0x00000000},
{0x78,0x00010000},
{0x7c,0x8c846af3},
{0xf0,0x4},
{0x00,0x00000000},
{0x04,0x00000000},
{0x08,0x00000000},
{0x0c,0x00000000},
{0x10,0xffffff38},
{0x14,0x00000000},
{0x18,0x00000000},
{0x1c,0x00000000},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00002400},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000000},
{0x44,0x00000002},
{0x48,0x00000001},
{0x4c,0x00004000},
{0x50,0x00000000},
{0x54,0x00010202},
{0x58,0x02030304},
{0x5c,0x05050606},
{0x60,0x07080909},
{0x64,0x0a0b0c0c},
{0x68,0x0d0e0f10},
{0x6c,0x11121416},
{0x70,0x16191c1e},
{0x74,0x00000000},
{0x78,0x80808080},
{0x7c,0x8c846af3},
{0xf0,0xb3},
{0x00,0x00001682},
{0x04,0x00000000},
{0x08,0x46656220},
{0x0c,0x20352032},
{0x10,0x30313300},
{0x14,0x00000000},
{0x18,0x31353a34},
{0x1c,0x383a3334},
{0x20,0x00000000},
{0x24,0x00000000},
{0x28,0x00000000},
{0x2c,0x00000000},
{0x30,0x00000000},
{0x34,0x00000000},
{0x38,0x00000000},
{0x3c,0x00000000},
{0x40,0x00000000},
{0x44,0x00000000},
{0x48,0x00000000},
{0x4c,0x00000000},
{0x50,0x00000000},
{0x54,0x00000000},
{0x58,0x00000000},
{0x5c,0x00000000},
{0x60,0x00000000},
{0x64,0x00000000},
{0x68,0x00000000},
{0x6c,0x00000000},
{0x70,0x00000000},
{0x74,0x00000000},
{0x78,0x00000000},
{0x7c,0x00000000},
};
我删除了大部分包含的数据,因为它们本质上是相同的,只是在addr和data方面有所不同。。我认为上面应该给出一些关于里面是什么的想法

这些值是一个寄存器位置和该位置的十六进制数据

我发现有一些模块可以将数据直接从文件加载到芯片中,实现类似的功能,但是我发现这些模块对主模块进行了一些广泛的更改,以实现这一点,正如我所说的,我希望主模块尽可能接近其现有形式,以便功能可以在不同版本的模块中实现,并且在不同的SOC模型之间更具可移植性,同时对它们之间的主模块进行最小的修改

我曾尝试使用filp_read以多种方式将数据读入GSLX680[]中,但没有太大成功

我远非C编程专家,也从未尝试过对模块进行如此大的修改,也从未处理过从内核空间的文件中读取数据的问题。我只是一个爱好者,试图为驱动程序添加功能,以便让它解决在使用相同SOC的中国制造的Android设备上的许多配置差异问题。非常感谢您的帮助

编辑:我在上面添加了fw_数据的结构,在查看与此驱动程序相关的所有代码之前,我不知道它的存在。这就是我无法将文件中的数据导入GSLX680[]的原因。我现在重新开始,任何建议都将不胜感激

谢谢
fsebentley

您不能直接翻转读取(文件,GSL1680\u FW,大小f(FW\u数据),0)吗?或者你能告诉我们你尝试了什么以及失败的原因吗?我已经尝试了几种不同的方法来进行filp_-read,但是最后一种方法我不能搞错。我使用类似的filp_读取设置尝试了这一点,我的问题是我似乎无法初始化这个静态const struct fw_data GSL1680_fw[]={File Contents}并让它使用filp_读取的数据。它给出了编译错误,例如接近初始化、GSL1680_FW大小未知等。我相当确定这就是我试图将数据放入此语句的方式。我不确定使用文件读取的输出确切地说是正确的方法。所有的例子我都把数据放在{}里面,这不适用于文件读取。啊,现在我知道了。假设结构的第一部分是字节,另一部分是4字节,那么结构将由一个无符号字符和一个usigned int组成。还要确保编译器不会向该结构添加填充。您必须将其打包为一个字节。然后你需要文件大小除以6,我们称之为x。然后用新的fw_数据[x]初始化结构,并使用我在上面发布的read函数