让vdsp与uclinux共舞(11):方案改进

快乐虾

http://blog.csdn.net/lights_joy/

[email protected]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文适用于

ADSP-BF561

Visual DSP++ 5.0(update 6)

Bfin-uclinux-2009r1.6

 

 

欢迎转载,但请保留作者信息

 

在之前的方案中,我们需要知道几个地址,而且这几个地址在修改内核之后必须手工更改。现在我们改进这种方案,避免这种情况。

1.1.1   修改存储位置

我们知道内核要管理所有的系统资源,但是有一个地方是个例外,那就是从FIX_CODE之后到内核代码段开始之前的这段空间,当内核启动时,只是简单地将这段空间的内容清0。而FIX_CODE在默认情况下将占用0x4000x490这段空间,因此只要我们将内核代码段往后移,这就可以留一段空间给vdsp使用。

1.1.2   内核函数表

在之前的方案中,我们还需要知道symtab这个段的起始地址和结束地址,因而也导致了每次修改内核选项后必须重新修改这两个地址,现在我们向FIX_CODE学习,将之复制到一个固定位置,比如FIX_CODE之后。因为内核符号表不大,我们只要少量空间就可以了。

1.1.3   驱动发布

在之前的方案中,设想用objdump获取每个段的内容再链接到内核中,实际上只要把整个DXE文件链接到内核中,由内核启动时读取这个DXE文件的内容并放到适当的位置上就可以了,不需要手工进行操作。

1.1.4   下载时的自动检测

之前我们直接让内核检测固定位置的数据是否有变化,以此决定是否需要调用初始化函数,现在我们将之通过内核参数实现,只要在内核启动时传入一个或者多个需要监测的地址即可。

1.1.5   Uclibc移植

我们要在vdsp下开发uclinux应用程序,因而uclibc的移植就是必须的,幸运的是在vdsp下移植uclibc并不需要太大的改动:

1、  需要从vdspinclude目录下复制几个文件:stdarg.hstddef.hfloat.hstdbool.hlimits.hyvals.h

2、  需要自己建立uclibc_config.h的头文件,在此文件中定义一些宏对uclibc进行配置。

3、  修改syscall宏定义。

1.1.6   应用程序的自动检测

同样,我们让内核检测固定位置的空间,当检测到数据变化时,我们再调用一个stub应用程序,让这个用户程序跳转到指定的位置执行。

1.1.7   应用程序的发布

同样,在开发完成后,我们直接将这个dxe文件包含在stub程序中,由这个程序读取dxe文件的内容并复制到正确的位置(类似于corebld),再跳转到此位置执行。

 

近日,我家6岁的小姑娘参加了第六届POP全国少儿英语风采大赛,拉票进行中(2011-6-15前)。

请帮忙点击新东方网站的链接:

http://popdasai.xdf.cn/toupiao.php?do=space&uid=4237

投她一票,谢谢!

 

2       参考资料

vdspuclinux共舞(10):加载SMP内核(2009-11-4)

vdspuclinux共舞(9):查找内核函数(2009-11-3)

vdspuclinux共舞(8):vdsp驱动框架(2009-11-3)

vdspuclinux共舞(7):在内核为驱动预留空间(2009-11-2)

vdspuclinux共舞(6):用vdsp开发驱动的设想(2009-11-2)

vdspuclinux共舞(5):加入dwarf调试信息(2009-11-2)

vdspuclinux共舞(4):加载uclinux(2009-11-2)

vdspuclinux共舞(3):boot kernel(2009-10-31)

vdspuclinux共舞(2):vdsp的影响(2009-10-31)

VDSPuclinux共舞(1):开篇(2009-10-30)

关于uClinux-2.6(bf561) for VDSP的移植2008/3/11

 

 

 

 

 

 

你可能感兴趣的:(框架,存储,include)