在uclinux for bf561中使用B核(1):示例实践

来源:互联网 发布:手机悬浮拍照软件 编辑:程序博客网 时间:2024/06/09 15:52
 
我们知道,BF561是由两个相同的内核组成的,而ucLinux只使用了其中的A核,在正常情况下B核是不工作的。但是在uclinux for bf561以驱动的方式提供了对B核操作的可能,而且还提供了一个corebld的应用程序,它可以将指定的程序加载到B核中运行。
下面我们就按照user/blkfin_apps/corebld/README中所说的步骤尝试一下吧:
1、在User Settings -> Blackfin app programs中选上BF561 Core B support tools,这样uclinux就会在bin下编译生成corebld这个应用程序和coreb_get_testarg这个程序。此外在test_module目录下还后生成一个dualcore_test.ko的模块,但是在默认情况下这个模块是不会复制到romfs中去的,因此我们需要手工将它复制到romfs目录中去,这样下次make的时候就能打包到uImage中去了。
2、下载uclinux,运行
root:/bin> insmod ./dualcore_test.ko
dualcore_test: module license 'unspecified' taints kernel.
Dual core test module inserted: set testarg = [1]
 @ [feb00000]
这个模块是在A核中运行的,在初始化的时候,它在0xfeb0 0000这个地址写入一个整数1,然后等待B核中运行的程序修改此位置的值,在卸载此模块的时候它将再一次输出0xfeb0 0000这个地址处的值,以此证明B核中的程序修改了这个值。
3、运行
root:/bin> corebld coreb_get_testarg
ffite 2Starting Core B
 00000
wrote 208 bytes to 0x0xff600000
Write 4096 bytes to 0x0xff500000
wrote 4096 bytes to 0x0xff500000
此时B核中的程序coreb_get_test_arg应该修改了0xfeb0 0000的值。
从corebld.c中的代码可知,它其实是将coreb_get_test_arg作为一个普通文件读出来,再提取出相应的可执行代码,调用/dev/coreb提供的功能将这些可执行代码写入到B核的L1 Instruction Memory中,再调用驱动程序的功能开始执行这些代码。从这个过程可以看出,corebld能调用的可执行文件格式是有限的,目前corebld只能分析elf格式的文件。
4、运行
root:/bin> rmmod dualcore_test.ko
Dual core test module removed: testarg = [2]
由此可见,coreb_get_testarg已经将值修改为2了。