快乐虾
http://blog.csdn.net/lights_joy/
本文适用于
ADSP-BF561
Visual DSP++ 5.0(update 6)
Bfin-uclinux-2009r1.6
欢迎转载,但请保留作者信息
使用GCC开发驱动的一般过程:
编写代码 -> Make -> 下载 -> kgdb调试
应该说,现在使用gdb/kgdb调试已经比较方便了,再配上eclipse,足以很好地满足调试需求了。不过俺这人懒,不想动用如此多的工具,而且在俺的电脑上实在跑不起eclipse如此慢的工具,再加上讨厌JAVA,顺带讨厌使用JAVA的ECLIPSE,如此多的理由,使得我们想办法另辟蹊径。
设想:
使用vdsp编译并下载代码,内核自动检测到更新并运行驱动初始化的代码,可以使用VDSP的一切手段来调试驱动。总而言之,一切用VDSP搞定。为此我们将面临下面的问题:
这个似乎不应该有什么问题,前面几版内核的移植已经足以证明这一点,我们需要的只是对内核头文件进行极少量的改动。
假如我们要使用vdsp进行程序的链接并下载,那么必然要求有一块或者多块固定地址的空间,一种办法是在vmlinux.lds中分配一块固定的空间,并在vdsp中使用它。还好在通常情况下我们通常会先配置好内核再来开发我们的驱动,这样我们可以认为驱动所在的空间是固定的,从而可以在vdsp下使用它。
一个内核驱动,避免不了要调用内核的功能,有两种方法可以做到,一种当然是直接使用函数指针,这种办法基于内核的其它部分不再改动的假设,但是一但改动,我们就必须更改所有的函数指针。另外一种办法是让内核支持module,这样我们就可以通过函数名称查找到这个函数的地址从而调用它。
调试时免不了反复加载驱动,那么如何实现呢?设想通过一个内核线程,它访问一个固定的位置,当此位置上的数据发生变化时,此线程将调用设定的初始化函数。为了释放资源,在下载新程序时先通知此内核线程调用我们的回调函数以进行资源的释放。
驱动开发完成后,当然就需要发布了,可以使用objdump这样的工具将dxe文件中各个段的数据dump出来,然后在内核中使用.inc/bin这样的方式将这些二进制数据链接到内核中就可以了。
当然,这些都只是设想而已,想实现,还得经过实证才行。
让vdsp与uclinux共舞(5):加入dwarf调试信息(2009-11-2)
让vdsp与uclinux共舞(4):加载uclinux(2009-11-2)
让vdsp与uclinux共舞(3):boot kernel(2009-10-31)
让vdsp与uclinux共舞(2):vdsp的影响(2009-10-31)
让VDSP与uclinux共舞(1):开篇(2009-10-30)
关于uClinux-2.6(bf561) for VDSP的移植(2008/3/11)