在映射内存空间中,保留了一部分内存,保留的大小就和window 以及 buffer数有关系:
大小是 800 x 480 x 2个window x 3个buffer x RGBA的4字节,这是给通常显示数据的,
除此之外,还预留了 YUV 的数据区域,1280 x 720 x 3个buffer x Y的一个字节数据 + 1280 x 720 x 3个buffer x UV的一个字节数据。
另外还有一个 4096 字节大小的 数据。
static void __init mini210_map_io(void)
{
......
frame_size = lcd->width * lcd->height * BYTES_PER_PIXEL;
fimd_size = ALIGN(frame_size, PAGE_SIZE) * NUM_BUFFER;
if (frame_size > 0x200000) {
fimd_size += ALIGN(frame_size, PAGE_SIZE) * 2; // Not used
}
/* Reserve 0x003f6000 bytes for PVR YUV video, and 1 page */
fimd_size += ALIGN(1280*720, PAGE_SIZE) * 3;
fimd_size += ALIGN(1280*360, PAGE_SIZE) * 3 + PAGE_SIZE;
if (fimd_size != S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMD) {
mini210_fixup_bootmem(S5P_MDEV_FIMD, fimd_size);
}
楼主的代码,跟我的kernel不一样啊,我用的是友善之臂linux-2.6.35.7-20121027,在这里预留ram的时候没有加YUV部分。
请问楼主的代码是什么版本的?
static void __init mini210_map_io(void)
{
struct s3cfb_lcd *lcd = mini210_get_lcd();
int frame_size, fimd_size;
s5p_init_io(NULL, 0, S5P_VA_CHIPID);
s3c24xx_init_clocks(24000000);
s5pv210_gpiolib_init();
s3c24xx_init_uarts(mini210_uartcfgs, ARRAY_SIZE(mini210_uartcfgs));
frame_size = lcd->width * lcd->height * BYTES_PER_PIXEL;
fimd_size = ALIGN(frame_size, PAGE_SIZE) * CONFIG_FB_S3C_NR_BUFFERS;
if (fimd_size != S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMD) {
mini210_fixup_bootmem(S5P_MDEV_FIMD, fimd_size);
}