免责声明:我有点在德州仪器论坛上交叉发布这个问题,但我已经五天没有得到任何回复。我对嵌入式编程很陌生,所以请指出您是否需要更多信息或者我的方法是否荒谬。
动机
我有一个带有德州仪器 ( Texas Instruments) 的 DM3730 处理器的嵌入式设备(与 Beagleboard -xm 上的处理器相同)该处理器通过其显示子系统 (DSS) 连接到 LCD 显示器。显示屏看起来很暗,必须进行伽马校正。幸运的是,DSS 有一个 Palette/gamma 查找表。不幸的是,我无法让它工作。
我发现了什么
我在德州仪器论坛上发现了类似处理器的类似问题,TI 员工给出了以下解释(强调我的):
我认为当前的 Linux 内核不支持彩色索引图形,但是通过直接寄存器配置从应用程序级别启用它相当容易。
[...]
接下来,声明一个由 256 个无符号整数组成的数组,并为每个颜色索引条目填充所需的 RGB 值。
将 DISPC_GFX_TABLE_BA 设置为先前配置的数组的物理地址(注意 1,这需要物理地址而不是虚拟地址,因此您可能需要将其映射回来。注意 2,这需要是 32 位对齐的地址,因此取决于数组是如何创建的,可能需要创建一个稍大的 char 数组并填充数组,以使起点位于 32 位边界上)
[...]
他后来提到mem_util来转换地址,我能够使用它直接从应用程序级别(用户空间)写入寄存器,但我无法弄清楚如何将虚拟地址“映射回”物理地址。
系统信息
~# uname -a
Linux dm37x-evm 2.6.32.1 #1 Fri Dec 2 11:19:53 EST 2011 armv7l unknown
我的问题
- 如何将虚拟地址映射回物理地址?
- 这可以在用户空间中完成吗?(我设想我提供一个用户可以调整伽玛曲线的界面)
- 一般来说,这是正确的方法吗?我应该把它移到内核空间吗(我不愿意这样做,因为我对 Linux 内核没有很多经验)
- 任何好的资源或例子!