娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

Tiny210v2(S5PV210) 平臺下FIMD對應(yīng)的framebuffer驅(qū)動中,關(guān)于video buffer的理解

發(fā)布者:VelvetWhisper最新更新時間:2024-12-27 來源: cnblogs關(guān)鍵字:Tiny210v2  S5PV210  FIMD  framebuffer驅(qū)動  video  buffer 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

                /* set starting physical address & size of memory region for

                 * overlay window and default window */

                pmem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1);

                printk('fimd at 0x%08xn', pmem_start);

        

                for (i = 0; i < num_overlay_win; i++) {

                    *(npd->nr_buffers+i) = CONFIG_FB_S3C_NUM_BUF_OVLY_WIN;

                    *(npd->pmem_start+i) = pmem_start;

                    *(npd->pmem_size+i) = frame_size *   *(npd->nr_buffers+i);

                    pmem_start += *(npd->pmem_size+i);

                }

        

                npd->nr_buffers[default_win] = CONFIG_FB_S3C_NR_BUFFERS;

                npd->pmem_start[default_win] = pmem_start;

                npd->pmem_size[default_win] = frame_size * npd->nr_buffers[default_win];

        

        #if defined(CONFIG_MACH_MINI210)

                npd->pmem_size[default_win] += ALIGN(1280*720, PAGE_SIZE) * 3;

                npd->pmem_size[default_win] += ALIGN(1280*360, PAGE_SIZE) * 3 + PAGE_SIZE;

        

                if (frame_size > 0x200000) {                                        // Not Used : frame_size < 0x200000

                    pmem_start += npd->pmem_size[default_win];

                    for (; i < npd->nr_wins; i++) {

                        if (i != default_win) {

                            npd->nr_buffers[i] = 2;

                            npd->pmem_start[i] = pmem_start;

                            npd->pmem_size[i] = frame_size * npd->nr_buffers[i];

                            break;

                        }

                    }

                }

        #endif

        

                s3c_device_fb.dev.platform_data = npd;

            }

        }

    

    我們需要留意一下上面這段代碼,    

    因為 num_overlay_win 是 CONFIG_FB_S3C_NUM_OVLY_WIN=1,所以 for 循環(huán)只執(zhí)行了一次,那么 window 0 的物理內(nèi)存地址初始化了。

    然后又手工為 default_win 也就是 CONFIG_FB_S3C_DEFAULT_WINDOW=2 進(jìn)行了初始化。

    也就是說: window 0 和 window 2 在platform初始化中記錄了數(shù)據(jù)buffer的物理內(nèi)存地址。

    雖然是 for 循環(huán)做的,我認(rèn)為這個for循環(huán)寫得不好。


7. 在s3cfb初始化過程中,為window 關(guān)聯(lián)這些內(nèi)存


    在初始化過程中,會分配fb設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu),并注冊fb設(shè)備。


        drivers/video/samsung/s3cfb.c

        --------------------------------------------------


        static int __devinit s3cfb_probe(struct platform_device *pdev)

        {

            ......

            if (s3cfb_alloc_framebuffer(fbdev)) {

                ret = -ENOMEM;

                goto err_alloc;

            }

        

            if (s3cfb_register_framebuffer(fbdev)) {

                ret = -EINVAL;

                goto err_register;

            }

            ......

        }


    但是我們發(fā)現(xiàn),只有當(dāng) fb 設(shè)備對應(yīng)的 window 是 default window ,也就是 window 2 的時候,

    才會將 window 2 對應(yīng)的內(nèi)存映射到內(nèi)存空間。

    雖然預(yù)留的物理內(nèi)存是 window 0 和 window 2 的,但這個時候 window 0 的物理內(nèi)存是沒有被映射的。


        drivers/video/samsung/s3cfb.c

        --------------------------------------------------


        static int s3cfb_alloc_framebuffer(struct s3cfb_global *ctrl)

        {

            ......

            for (i = 0; i < pdata->nr_wins; i++) {

                ctrl->fb[i] = framebuffer_alloc(sizeof(*ctrl->fb), ctrl->dev);

                if (!ctrl->fb[i]) {

                    dev_err(ctrl->dev, 'not enough memoryn');

                    ret = -ENOMEM;

                    goto err_alloc_fb;

                }

                ......

                if (i == pdata->default_win) {

                    if (s3cfb_map_video_memory(ctrl->fb[i])) {

                        dev_err(ctrl->dev,

                            'failed to map video memory '

                            'for default window (%d)n', i);

                        ret = -ENOMEM;

                        goto err_map_video_mem;

                    }

                }

            }

            ......

        }


    這是注冊 fb 設(shè)備的地方,只要注冊成功,/dev 目錄下就會有一個 fb 文件。

    雖然只給 window 2 映射了顯示數(shù)據(jù)的內(nèi)存,但是 for 循環(huán)還是將所有的 window 都注冊設(shè)備文件了。

    這就是為什么 /dev 目錄下有 fb0 - fb4 5個fb設(shè)備。其實每一個 fb 設(shè)備對應(yīng)一個 window。

    

    另外需要注意的是,第一個注冊的 fb 是 fb0,然后依次 ++。

    下面的代碼在注冊的時候, 首先注冊的是 default window 2,然后是 3, 4, 0, 1。

    也就是說 :

    fb0 -> window 2

    fb1 -> window 3

    fb2 -> window 4

    fb3 -> window 0

    fb4 -> window 1


    另外還需要注意的是,如果你直接去 cat  /dev/fbX ,只有 fb0 是成功的,其他全部失敗,

    因為到目前位置,只有 fb0 也就是 default window 2,映射了顯示數(shù)據(jù)的內(nèi)存。

        

        drivers/video/samsung/s3cfb.c

        --------------------------------------------------


        static int s3cfb_register_framebuffer(struct s3cfb_global *ctrl)

        {

            ......

            k = 0;

            for (i = pdata->default_win;

                i < pdata->nr_wins + pdata->default_win; i++) {

                    j = i % pdata->nr_wins;

                    ret = register_framebuffer(ctrl->fb[j]);

                    if (ret) {

                        dev_err(ctrl->dev, 'failed to register '

                                'framebuffer devicen');

                        ret = -EINVAL;

                        goto err_register_fb;

                    }

                    pdata->fb_file_minor[ j ] = k;

                    k++;

                    

                    #ifndef CONFIG_FRAMEBUFFER_CONSOLE

                    if (j == pdata->default_win) {

                        s3cfb_check_var(&ctrl->fb[j]->var, ctrl->fb[j]);

                        s3cfb_set_par(ctrl->fb[j]);

                        s3cfb_draw_logo(ctrl->fb[j]);

                    }

                    #endif

[1] [2] [3] [4] [5] [6]
關(guān)鍵字:Tiny210v2  S5PV210  FIMD  framebuffer驅(qū)動  video  buffer 引用地址:Tiny210v2(S5PV210) 平臺下FIMD對應(yīng)的framebuffer驅(qū)動中,關(guān)于video buffer的理解

上一篇:應(yīng)用目錄S5PV210的BL1應(yīng)用
下一篇:S5PV210 | 根文件系統(tǒng)文件詳情

推薦閱讀最新更新時間:2025-04-24 12:25

基于framebuffer技術(shù)的DVI顯示驅(qū)動程序的開發(fā)
引言 DVI是Digital VisualInterface(數(shù)字視頻接口)的縮寫。在嵌入式電子領(lǐng)域,像DVI這樣的高清接口應(yīng)用越來越多,很多嵌入式產(chǎn)品采用H.264視頻編碼技術(shù),支持播放H.264格式的720P分辨率的視頻文件,這就需要至少1024 768分辨率的顯示輸出設(shè)備。 MX51是飛思卡爾半導(dǎo)體的基于ARM Cortex-A8內(nèi)核的高端ARM嵌入式多媒體處理器,支持720P視頻多種格式的硬解碼,可以用來開發(fā)高清機(jī)頂盒、上網(wǎng)本等產(chǎn)品,很多情況下需要集成DVI這樣的高清視頻端子。 在嵌入式電子產(chǎn)品中,Linux操作系統(tǒng)占有越來越多的市場份額。本文采用Linux2.6.28內(nèi)核和MX51作為系統(tǒng)的軟、硬件平臺,詳細(xì)論述了基
[單片機(jī)]
基于<font color='red'>framebuffer</font>技術(shù)的DVI顯示<font color='red'>驅(qū)動</font>程序的開發(fā)
S5PV210 Linux字符驅(qū)動之PWM蜂鳴器驅(qū)動
在SMDK210.C中添加如下beeper_device 結(jié)構(gòu)體 static struct platform_device beeper_device = { .name = pwm_buzzer , .id = 1, .dev = { .parent = &s3c_device_timer .dev, //PWM1是定時器1 .platform_data= 0, }, }; 然后在smdkv210_devices中添加該結(jié)構(gòu)體 static struct platform_device *smdkv210_devices __initdata = { &s3c_device_fb, &s3c_device_adc,
[單片機(jī)]
<font color='red'>S5PV210</font> Linux字符<font color='red'>驅(qū)動</font>之PWM蜂鳴器<font color='red'>驅(qū)動</font>
S5PV210啟動燒寫過程信息
記錄下S5PV210啟動燒寫過程信息,對分析系統(tǒng)啟動及燒寫流程大有幫助: 通過串口燒的信息: OEMInitLIb is Success +++InitializeInterrupt() ---InitializeInterrupt() +++OTGDEV_InitOtg OTGDEV_SetSoftDisconnect ---OTGDEV_InitOtg TSR START ADDRESS : 0x47700000 TSR IMAGE SIZE : 0x00080000 DOWNLOADING IS COMPLETED Microsoft Windows CE Bootloader Common Library Version
[單片機(jī)]
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 巴彦淖尔市| 江达县| 定日县| 沙河市| 宜兰市| 阿拉善右旗| 方正县| 台东市| 丹棱县| 莲花县| 靖州| 六盘水市| 永川市| 通城县| 多伦县| 乐亭县| 揭阳市| 寿阳县| 化州市| 安平县| 雅安市| 九台市| 江口县| 建平县| 铜梁县| 华池县| 宁海县| 德保县| 衡水市| 民权县| 昌平区| 禹城市| 加查县| 游戏| 东山县| 桑日县| 天津市| 怀仁县| 临桂县| 舟曲县| 日土县|