最近在一个应用程序中想修改寄存器的值,也就是想在用户空间直接读写寄存器的值。我使用了mmap内存映射方法,发现可以修改VPSS_CLK_CTL和VPBE_CLK_CTLK的值,但是在修改诸如像OSD_MODE等有OSD_前缀的寄存器,以及像VENC_VMODE有VENC_前缀的寄存器时,会报出错误:segmentation default,然后程序就运行终止了。有哪位前辈能给我说一下这个问题怎么解决,或者说一下怎样在应用程序中修改诸如OSD_***和VENC_***这种类型的寄存器的值而不会报错。希望有人能给我指点一下,感激不尽!
qingsong liu:
补充一下,我知道在内核驱动文件中修改后再编译烧写可以实现,我是想知道在应用程序中怎样改变这些寄存器的值。期待有人能给我指导一下,谢谢。
kooking:
常用的也就是mmap()将寄存器物理地址映射为用户空间的虚拟地址,但可能有几点要注意下
一是要确认修改的值是否是合法的寄存器值;二是在修改的时候要确认程序中没有和其它地方有数据交换,如果这个时候修改,很有可能会段错误了
qingsong liu:
回复 kooking:
谢谢你的答复,我会照你说的方法试一试。