AM335X 分配大于4M的framebuffer

最近正在将800X480的设备修改成1024X600,算了一下,

1024X600X4X2需要4M的framebuffer空间,其中4代表一个像素32位色的Byte数,

2代表双framebuffer,LCD驱动程序中,使用dma_alloc_coherent来分配缓冲区

dma_alloc_coherent分配缓冲区收到MAX_ORDER的制约,MAX_ORDER默认值是11

所以,dma_alloc_coherent分配的最大DMA空间只能小于2M,为了支持

4M甚至更大的DMA空间,需要做以下修改:

1. 修改arch/arm/configs/am335x_evm_android_defconfig文件,将

 CONFIG_FORCE_MAX_ZONEORDER=11

修改为:

CONFIG_FORCE_MAX_ZONEORDER=12

也可以修改arch/arm/Kconfig中,将config FORCE_MAX_ZONEORDER的

default修改为12,我用的就是这种方法,因为发现修改am335x_evm_android_defconfig没起作用

2. 修改arch/arm/configs/am335x_evm_android_defconfig文件,将

CONFIG_FB_DA8XX_CONSISTENT_DMA_SIZE 4

修改为:

CONFIG_FB_DA8XX_CONSISTENT_DMA_SIZE 8

3.重新配置并编译内核

也可参考以下链接:

http://e2e.ti.com/support/arm/sitara_arm/f/791/t/189862.aspx

4.编译烧写到NandFLash后,系统启动不了,出现以下错误:

pvrsrvkm: disagrees about version of symbol contig_page_data

这是由于pvrsrvkm.ko等相关的内核模块没有在上述修改后重新编译造成的,

解决办法是:

使用以下命令清除sgx旧的编译数据:

cd hardware/ti/sgx

make OMAPES=4.x ANDROID_ROOT_DIR=/home/skwiki/AKHMI_201309/ak2_ics clean

其中,ANDROID_ROOT_DIR是Android源码所在目录,继续输入以下命令:

make OMAPES=4.x BUILD=release all_km ANDROID_ROOT_DIR=/home/skwiki/AKHMI_201309/ak2_ics

我在编译的时候遇到这个问题:

cp: cannot stat  .../binary2_omap4430_android_release/target/pvrsrvkm.ko

我发现编译后生成的pvrsrvkm.ko存在于out/target/product/am335xevm/target/kbuild目录中,

于是我修改目录hardware/ti/sgx中的Makefile.KM.Android文件,大概在35行,将:

else ifeq ($(OMAPES),4.x)

......
@echo "copying the sgx kernel modules to $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)"
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/pvrsrvkm.ko
 $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/.
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/omaplfb.ko
 $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/.
修改为:

else ifeq ($(OMAPES),4.x)
......
@echo "copying the sgx kernel modules from $(ANDROID_ROOT)/out/target/product/$(TARGET_PRODUCT)/target/kbuild"
@echo "copying the sgx kernel modules to   $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)"
@cp -rf $(ANDROID_ROOT)/out/target/product/$(TARGET_PRODUCT)/target/kbuild/pvrsrvkm.ko $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/
@cp -rf $(ANDROID_ROOT)/out/target/product/$(TARGET_PRODUCT)/target/kbuild/omaplfb.ko $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/
修改完毕以后,在使用以下命令进行重新编译:

make OMAPES=4.x BUILD=release all_km ANDROID_ROOT_DIR=/home/skwiki/AKHMI_201309/ak2_ics

严谨起见,我们在Android源码目录下面重新编译Android源码,并生成ubi文件系统。

你可能感兴趣的:(AM335X 分配大于4M的framebuffer)