主题 : mini6410 Linux2.6.38移植jpeg硬解码 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 41214
精华: 0
发帖: 88
金钱: 450 两
威望: 90 点
贡献值: 0 点
综合积分: 176 分
注册时间: 2011-03-27
最后登录: 2018-05-24
楼主  发表于: 2013-04-15 09:11

 mini6410 Linux2.6.38移植jpeg硬解码

今天成功移植mini6410   Linux2.6.38内核的jpeg硬解码。 记录一下,这对我来说是像硬解码跨越的第一步,或许我不能做成mini6410那样的强大,但是我希望能对硬解码的部分有一个了解和认识。

移植我认为分为三部:
1:    平台设备的添加。
2:  平台驱动的添加,同时生成设备文件。
3:  测试程序。


1: 平台设备的添加
    mach-mini6410中添加s3c_device_jpeg平台设备。

2: 平台驱动的添加。
     拷贝三星原厂资料中 jpeg_drv文件夹下面的全部内容,编译
       1):  修改Makefile中的编译路径和内核所在的目录。编译
       2):  修正错误。
         总结下错误,错误大概为集中为以下几点:
                1: ioctl函数的原型不对,2.6.38的内核原型为static long s3c_jpeg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)。
                2: JPG_DATA_BASE_ADDR找不到定义的文件。
                3: S3C_VA_SYS没有找到定义。
        4: 一些头文件找不到。
                解决方法:
                1: 修改ioctl的原型,内在内容不需要修改。
                2: 在内核中增加以下两步
                   1):    添加media.h
                2):    添加bootmem.c,dev-video.c,并导出bootmem.c里面的接口函数。
        3:在Map-base.h中增加S3C_VA_SYS的定在。
                4:更换对应的头文件的路径。

    在此对底层驱动的各个文件进行以下说明,希望对移植的人有帮组,请参看备注1.


3:  拷贝jpeg_app文件下面的文件。
    1: 修改Makefile中的gcc的路径,然后进行编译。
        2: 注意以下驱动中ioctl中的命令是否和上层的命令一致。


    在此对底层驱动的各个文件进行以下说明,希望对移植的人有帮组,请参看备注2.

备注:
1:   以下是驱动文件的分析
    1):    S3c-jpeg.c文件。
        1:文件功能大致为注册平台驱动->调用Prob函数->注册混杂设备。
        2:上层通过混杂设备中的ioctl命令访问底层。操作之前必须先打开。
    
    2):    JPGMem.c文件。
        顾明思议,内存分配调用函数。
        1: 分配底层访问结构体。
        2: 拷贝数据给用户程序。拷贝用户数据到底层驱动。

    3):    JPGMisc.C
        1:  保证任何时候只有一个进程在操作底层API。 采用互斥来实现。

    4):    JPGOpr.c
        1:  主要完成编解码的所有的功能。
        2:  按照操作手册完成编解码。

    5):    LogMsg.c
        1:  打印信息。

2: 以下是对应用层文件夹的说明。
    1: fname_enc.txt        编码文件,表明需要编码的文件。
    2: fname_dec.txt        解码文件,表明需要解码的文件。
        3: JPGApi.c    提供上层API函数,也就是说明文档中的API函数,供上层test文件调用。也就友善之臂中JPEG解码中的硬解码的函数。
        4:   performance.c        计算FPS文件。
        5: test.c                测试函数

      最后言语:当然移植可能远没有我说这么简单,只要你能静下心来看官方手册,能静下心来研究源码,其实移植也挺快的。  本想直接上源码的,可是发现这次移植内部有一些改动,所以也就不发布源码了,祝大家成功。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2013-04-15 12:50
谢谢分享,支持!
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."