DSP

关于uClinux-2.6(bf561) for VDSP的移植

2019-07-13 19:32发布

      1   开发环境 仅针对Visual DSP 4.5进行了调试,5.0则没有。 2   目录结构 1、在移植过程中,基本保留了原有的目录结构不动。 2、在其根目录下新建了一个vdsp的子目录,用以保存VDSP的工程文件和生成的临时文件。最终生成的DXE文件也保存在这里。 3、将include目录下的asm-blackfin名称改为asm,因为在windows下无法使用alias。 4、为每个子目录下的文件建立一个以目录名称为名的工程文件。     3   代码修改 1、因为在移植过程中,首先用工具将所有的代码注释掉了,然后根据需要去除相应的注释。所以如果你发现在别处可以用的函数或者结构体在这里用不了,或者有链接错误等等,请不要惊讶,请在源文件中查找其声明或者实现,再去除其注释即可,当然有时可能有错,需要进行调试。 2、使用工具在每个.c文件的第一行插入了一条语句: #include 这是新增的一个文件,在原系统中没有。这个文件的用意在于影响编译器的一些行为。系统的配置也是放在这个地方。 3、对于自行添加的driver,请添加一个dummy function,然后在main函数中引用它,否则可能无法正确的链接(不知道算不算VDSP的一个BUG,还是我孤漏寡闻了)。 4、对于make或者configure时自动生成的文件,采用的办法是首先在linux下生成,然后COPY过来,如果你发现缺少什么自动生成的文件,可参考此办法。 5、在原系统中,head.s直接跳转到start_kernel函数开始执行,在移植时将之改为跳转到main函数,然后在main函数中调用start_kernel。 4   crt bf561中a,b两个核使用的CRT文件是不同的,a核的crt文件使用的是uClinux中的head.s(arch/blackfin/mach-bf561),而b核仍然使用VDSP向导生成的uclinux_basiccrt.s。如果希望在a核中使用VDS库中多核相关的函数,如testset等,请在head.s中加上:        // Initialise the multi-core data tables.        CALL.X __mc_data_initialise; .extern __mc_data_initialise; .type __mc_data_initialise,STT_FUNC; 如果希望在a核中使用C++代码,请加上: ///////////////////////////////////////////////////////////////// // cplusplus        CALL.X ___ctorloop; // run global scope C++ constructors .extern ___ctorloop; .type ___ctorloop,STT_FUNC; 5   rootfs rootfs的生成是在linux下用交叉编译完成的,使用的是ext2的文件系统,使用时请先在head.s或者main函数中中断下来,打开memory窗口,查找_end这一符号,然后使用memory fill将root_fs插入到_end这个地址就OK了。注意fill的数据类型请选择hex32。Rootfs可在CSDN资源中下载。 6   链接文件 u-boot原有的链接文件是arch/blackfin/kernel/vmlinux.lds.s,在移植中没有使用它,而是使用了VDSP向导生成的ldf文件,但是参照vmlinux.lds.s的内容做了部分修改。