bf561-uclinux
文章平均质量分 52
嵌云阁主
参与从系统设计到硬件调试和软件编码每一过程的工作
展开
-
哈哈,u-boot终于在bf561的板子上工作了
今天,u-boot终于在我的bf561的板子上跑起来了,特此记录下来以供参考。1、在FC6 i386 Linux平台上装交叉编译器,主要为以下两个RPM包。blackfin-toolchain-07r1.1-3.i386.rpmblackfin-toolchain-elf-gcc-4.1-07r1.1-3.i386.rpm2、在u-boot的根目录下运行make bf561-ezk原创 2007-09-12 18:06:00 · 2450 阅读 · 2 评论 -
在uclinux for bf561中使用B核(4):B核代码的编写
从corebld的实现可以看出,corebld本身是不会对ELF文件中的代码进行重新定位的,这点与在A核中运行的程序不同。这就要求在编译生成要在B核中运行的程序的时候,链接器就必须设置好每个Section的代码在绝对地址空间中的位置。要达到这个目的,要求在编写B核程序的时候要同时通过lds文件指定目标代码的位置。以下代码就是user/blkfin-apps/corebld/coreb.l原创 2007-09-29 06:56:00 · 1563 阅读 · 0 评论 -
在uclinux for bf561中使用B核(2): /dev/coreb提供的功能
由于uClinux只能在A核运行,因此它以驱动的形式提供了对B核的支持。默认配置下此支持是打开的,可以通过Kernel Settings -> Blackfin Processor Options -> BF561 Specific Configurations -> Core B support进行关闭。估计没人会做这种事吧?呵呵!。以下的所有代码来自于:linux-2.6.x/a原创 2007-09-29 06:48:00 · 1767 阅读 · 0 评论 -
在uclinux for bf561中使用B核(3):corebld的实现
在有了/dev/coreb之后,uclinux还提供了一个工具corebld。它用于将elf格式的文件作为一个普通文件读出来,提取出相应的可执行代码,再调用/dev/coreb提供的功能将这些可执行代码写入到B核的L1 Instruction Memory或者SDRAM中,最后再调用驱动程序的功能开始执行这些代码。它的实现在user/blkfin-apps/corebld/corebld.c原创 2007-09-29 06:54:00 · 1610 阅读 · 0 评论 -
用u-boot引导uclinux
前段时间准备让u-boot支持NAND Flash,最终无果而终,于是决定先放一放,先让uclinux跑起来,给自己点信心再说。参考了网上一些文章后,终于看到了可爱的提示符!当前配置:CPU为BF561,软件为uClinux-dist-2007R1.1-RC3,u-boot已写到Nor Flash且可正常启动。1、解压uClinux-dist-2007R1.1-RC3,原创 2007-09-25 18:07:00 · 3921 阅读 · 3 评论 -
在uclinux for bf561中使用B核(1):示例实践
我们知道,BF561是由两个相同的内核组成的,而ucLinux只使用了其中的A核,在正常情况下B核是不工作的。但是在uclinux for bf561以驱动的方式提供了对B核操作的可能,而且还提供了一个corebld的应用程序,它可以将指定的程序加载到B核中运行。下面我们就按照user/blkfin_apps/corebld/README中所说的步骤尝试一下吧:1、在User S原创 2007-09-27 17:53:00 · 1828 阅读 · 1 评论 -
u-boot for vdsp:“裸奔”助手
前阵子研究u-boot,突发奇想,不知道u-boot 是否可以在VDSP下编译,如果可以,那岂不是大大方便调试工作。正好也可以借此熟悉u-boot的结构(猜想应该不是很复杂),也可以进一步熟悉BF561这块CPU。说做就做,经过两个多星期的努力,终于大功告成! 此外还发现u-boot其实可以当一个开发模板来使用,如果在程序中不需要复杂的任务管理、网络栈等,完全可以以u-boot为基础进行开发!原创 2007-11-03 22:01:00 · 1825 阅读 · 3 评论 -
u-boot for bf561中的命令实现
硬件平台:bf561软件平台:u-boot-1.1.6,gcc for blackfin,visual dsp 5.0我们知道,u-boot的运行过程是首先进行一些初始化化工作,然后在一个死循环中不断接收串口的命令并进行解释执行,下面我们就看看执行部分代码的实现,见common/main.c中的run_command:int run_command (const char *cm原创 2007-11-03 23:15:00 · 2471 阅读 · 0 评论 -
在vdsp(bf561)中自定义Stack和Heap
1 自定义StackAB两个核有不同的Stack,以下定义仅针对A核。1、 在ldf中定义要使用的内存块 MEM_L2_STACK { TYPE(RAM) START(0xFEB10000) END(0xFEB17FFF) WIDTH(8) }2、 删除原有关于ldf_stack_start和ldf_stack_end的定义。3、 添加关于ldf_stack_star原创 2007-11-09 13:23:00 · 2150 阅读 · 1 评论 -
u-boot在vdsp 4.5下的移植
1 基本思想1、 软件版本为u-boot 1.1.6。2、 尽可能使用VDSP的库函数,而不使用u-boot中的实现,如malloc,memcpy等。3、 仍然使用A核运行u-boot,B核空闲,但可方便加入代码。4、 使用vdsp进行存储管理,即用LDF文件和malloc等完成内存管理,将u-boot的代码放在SDRAM最高的1M,Stack与Heap默认使用L1 SRAM原创 2007-11-12 11:08:00 · 2498 阅读 · 2 评论 -
在u-boot for bf561中使用nand flash
在u-boot_1.1.6中支持大量的NandFlash芯片,但是由于各种NandFlash在各个不同系统中可以有不同的实现方式,因此在u-boot_1.1.6中必须自已实现对NandFlash的一些低级操作,需要修改的代码较多。下面以目标板上使用的Samsung K9WAG08U1A为例进行移植说明。K9WAG08U1A是一片2G的Nand Flash,其内部由2片1G的nand ch原创 2007-11-15 21:36:00 · 2149 阅读 · 0 评论 -
在VDSP中编译uclinux(1):不可能的任务?
搜了几天的网上资料,就没见过在VDSP下编译uclinux的。估计一方面是由于编译器技术的差异,另一方面也由于没有这样的需求。但是假如uclinux内核能够在VDSP下编译,那么也就意味着可以通过仿真器单步执行调试,对于内核技术的学习和研究将可达到事半功倍的效果!从VDSP的文档中发现,VDSP的C编译器和gcc 3.2有很好的兼容性,且前些天刚刚把u-boot移植到VDSP下,至今一切OK原创 2007-11-18 22:49:00 · 1674 阅读 · 0 评论 -
在vs2005下编译gcc:工程文件
日前将gcc在vs2005下编译了一道,发布其工程文件以为抛砖引玉,希望大家共同讨论。1、本工程用于将gcc中的C编译器移植到vs2005下,这是一个交叉编译器,用于生成blackfin 561的汇编代码。2、移植的目的并不是用于工程目的,仅仅是为了研究gcc的实现。如果用于工程,请使用Linux平台。3、这个移植还没有经过正确性验证,请慎用!!4、在使用前请先下载blackfin-toolc原创 2008-01-30 17:23:00 · 2830 阅读 · 0 评论 -
gcc4.1中的machine_mode
1 定义对于machine_mode,gcc internals是这样解释的:A machine mode describes a size of data object and the representation used for it. In the C code, machine modes are represented by an enumeration原创 2008-02-01 20:23:00 · 2739 阅读 · 0 评论 -
在VDSP中编译uclinux(3):编译器的差异
虽然VDSP和GCC3.2有很好的兼容性,但是还是有一些差异的,以下列出已经碰到的一些差异及处理办法:1、__builtin_expect(exp, val):这是GCC的一个内建函数,而VDSP无此函数,它用于为编译器提供分支预测信息,其返回值是整数表达式exp的值,val的值必须是编译时常数。这个内建函数的语义是 exp 的预期值是 val,编译器可以根据这个信息适当地重排语句块的顺序,使原创 2007-11-21 22:29:00 · 1664 阅读 · 5 评论 -
在VDSP中编译uclinux(4):console实现
我们知道,在uclinux初始化过程中,直到console_init调用之前是没有任何输出的,它们的输出都放在__log_buf这个缓冲内的,在console_init调用时再将这个缓冲区内的数据一次性输出。那么console_init又做了什么工作呢? /* * Initialize the console device. This is called *early*, s原创 2007-11-21 23:35:00 · 1773 阅读 · 0 评论 -
在VDSP中编译uclinux(2):内存布局
1 uclinux的内存布局在uclinux启动时,有一段空间利用的提示:Memory map: text = 0x00001000-0x000b0db0 init = 0x000b1000-0x000bd23c data = 0x000bf1b8-0x000e5588 stack = 0x000c0000-0x000c200原创 2007-11-20 22:06:00 · 1897 阅读 · 0 评论 -
vdsp4.5(bf561)中的CPLB
在BF561中,每个核都提供了16K的指令缓存和32K的数据缓存,在程序生成时可以使用生成向导很方便地进行配置,那么向导到底做了什么?1 ldf配置如果没有使用CPLB,那么生成的LDF文件将把这些空间分配为指令存储器或者数据存储器,在使用了CPLB之后,LDF文件就变成了: MEMORY {… MEM_A_L1_CODE_CAC原创 2008-02-18 20:23:00 · 3121 阅读 · 0 评论 -
在VDSP中编译uclinux(5):Milestone-内核启动基本完成
经过几天的连续奋战,uclinux for bf561内核基本上启动完成,终于可以休息一下了!看看:Linux version 2.6.19.3-ADI-2007R1.1-svn (wmz@gtw.com) (vdsp 4.5) #2 Tue Sep 25 11:24:43 CST 2007Blackfin support (C) 2004-2007 Analog Devices,原创 2007-11-25 23:57:00 · 1608 阅读 · 0 评论 -
在VDSP中编译uclinux(6):VFS: Unable to mount root fs on unknown-block(31,0)
这两天在Linux下做了一个ext2的映像文件,将之插入到uClinux代码的末尾。原以为文件系统的问题应该很容易搞定,谁知忙碌了三四个晚上竟然毫无进展:Linux version 2.6.19.3-ADI-2007R1.1-svn (wmz@gtw.com) (vdsp 4.5) #2 Tue Sep 25 11:24:43 CST 2007Warning: limiting memory to原创 2007-11-29 21:26:00 · 3349 阅读 · 0 评论 -
在VDSP中编译uclinux(7):令人困惑的成功
哈哈,uClinux-2.6.x终于在VDSP下跑起来了,除了高兴还是高兴!经过整整两个星期的挑灯夜战,总算可以舒舒服服地睡上一觉了,庆祝一下:Linux version 2.6.19.3-ADI-2007R1.1-svn (wmz@gtw.com) (vdsp 4.5) #2 Tue Sep 25 11:24:43 CST 2007Warning: limiting memory to 53原创 2007-11-30 15:57:00 · 2198 阅读 · 2 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(5) : 驱动加载
norflash驱动模块的初始化代码为:int __init init_ezkit561_flash(void){ printk(KERN_NOTICE "ezkit561 map: mapping %ld MiB flash at 0x%x/n", EZKIT561_FLASH_SIZE / 0x100000, EZKIT561_FL原创 2008-02-21 18:37:00 · 1587 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(9): 驱动的使用
在norflash驱动加载的最后有几行语句: if (ezkit561_mtd) { ezkit561_mtd->owner = THIS_MODULE; return add_mtd_partitions(ezkit561_mtd, ezkit561_parts, EZKIT56原创 2008-02-21 18:44:00 · 1309 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(2): chips和maps
现在的NorFlash大多支持CFI或者JEDEC这样的规范,根据这些规范可以自动检测出芯片的一些参数并进行读写,所以uClinux将这些规范的驱动实现单独放在mtd/chips目录下。也就是说这个目录下放的是芯片的通用驱动代码,这些代码本身是不会主动去检测芯片的存在的,它仅仅是注册了一个驱动供其它模块调用。在通用规范的基础上,每个不同的厂商有不同的实现,且芯片在不同的系统中可能有不同原创 2008-02-21 18:05:00 · 1361 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(4) : maps定义
maps用于定义norflash芯片的具体参数及其读写回调函数。在driver/mtd/maps/ezkit561.c中实现了一个CFI Flash的示例,因为AM29lv320支持CFI接口,所以就直接在此文件的基础上修改。下面就是map_info这个结构体的定义(include/linux/mtd/map.h):struct map_info { char原创 2008-02-21 18:35:00 · 1644 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(8): check_cmd_set
这个函数位于driver/mtd/chips/gen_probe.c,它直接转向cfi_cmdset_0002(此函数位于driver/mtd/chips/cfi_cmdset_0002.c)继续运行,正是在这个函数中,分配了一个mtd struct并在其中填上相应的值或者回调函数。struct mtd_info *cfi_cmdset_0002(struct map_info原创 2008-02-21 18:43:00 · 1490 阅读 · 1 评论 -
u-boot向uClinux的参数传递
本文的开发环境为:u-boot-1.1.6, uClinux-2.6.x, bf561 DSP1 u-boot调用内核的方法我们知道,利用u-boot可以加载uClinux。它可以将压缩后的uClinux映象在SDRAM中解压并调用,从而将系统控制权交给uClinux。那么它是如何做到这一点的呢?下面的代码来自u-boot/lib_blackfin/bf533_linux.c,从中原创 2007-12-01 22:31:00 · 2633 阅读 · 0 评论 -
uClinux2.6(bf561)中的CPLB
bf561中提供了16K的指令Cache和32K的数据Cache,在uClinux中可以配置为使用Cache也可以不使用。1 CPLB初始化cplb的初始化代码在arch/blackfin/kenel/setup.c中,在uClinux初始化的时候将调用setup_arch,在此函数中又调用了bf53x_cache_init();进行初始化,下面就是这个函数的内容:原创 2008-02-19 17:40:00 · 4264 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(6): do_map_probe
这个函数位于drivers/mtd/chips/chipreg.c,用于查找指定名称的chip_driver,并调用它完成芯片的检测。 /* Hide all the horrid details, like some silly person taking get_module_symbol() away from us, from the call原创 2008-02-21 18:39:00 · 2385 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(7): cfi_probe
struct mtd_info *cfi_probe(struct map_info *map){ /* * Just use the generic probe stuff to call our CFI-specific * chip_probe routine in all the possible permutations,原创 2008-02-21 18:41:00 · 1946 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(1): 基本参数
下文开发环境为:AM29LV320MT(4M,16位),uclinux-2.6,VDSP4.5,bf561在uClinux启动时可以看到类似的提示:BF561 EZKIT Map: Found 1 x16 devices at 0x0 in 16-bit bank它的输出是由: printk(KERN_INFO "%s: Found %d x%d原创 2008-02-21 18:00:00 · 1832 阅读 · 0 评论 -
uClinux2.6(bf561)的NorFlash驱动实现分析(3) : chip_driver注册
uClinux将CFI和JEDEC的实现都放在mtd/chips目录下,并将之称为chip_driver,供上层的maps调用。chip_driver都要求填充一个叫做mtd_chip_driver的结构体(include/linux/mtd/map.h):struct mtd_chip_driver { struct mtd_info *(*probe)(st原创 2008-02-21 18:06:00 · 1747 阅读 · 0 评论 -
uClinux 2.6(bf561)中的NorFlash驱动实现分析:全文
下文开发环境为:AM29LV320MT(4M,16位),uclinux-2.6,VDSP4.5,bf5611 NorFlash基本参数在uClinux启动时可以看到类似的提示:BF561 EZKIT Map: Found 1 x16 devices at 0x0 in 16-bit bank它的输出是由: printk(KERN_INFO "%原创 2008-02-24 18:47:00 · 2739 阅读 · 0 评论 -
在VDSP中编译uClinux:工程文件发布
这是将uclinux-2.6 for bf561的内核移植到Visual DSP 4.5下的工程文件。可以在CSDN下载(http://download.csdn.net/source/361569),但由于csdn空间限制,本文件删除了Documentation及doj,dlb等中间文件或者无关的内容,请先在http://blackfin.uclinux.org/下载2.6.19.3-ADI原创 2008-02-27 17:34:00 · 1545 阅读 · 3 评论 -
uClinux下的MTD技术(1):Flash驱动实现
本文开发环境为:uClinux-2.6,BF561,编译器为VDSP4.51 norflash: Am29LV320MTAM29LV320MT是一个4M,16位的NorFlash,支持CFI接口,其地址空间为0x2000 0000 ~ 0x2040 0000。1、配置异步存储器,以下是几个相关的宏:#define CONFIG_C_AMBEN_ALL原创 2007-12-05 22:43:00 · 2413 阅读 · 0 评论 -
uClinux中的MTD技术(2):一些基本概念
本文开发环境:uClinux-2.6, bf561, VDSP-4.51 MTD技术MTD的全称是Memory Technology Device,用以实现对内存设备支持的统一接口,尤其是Flash,它可以提供Flash设备到字符设备驱动和块设备驱动的转换。在uClinux下包含对许多不同类型NOR Flash、NAND Flash的支持,其所有的代码均放在drivers/mtd原创 2007-12-06 10:12:00 · 2186 阅读 · 0 评论 -
VDSP下.doj文件到uClinx下.O文件的转换
1 目标本文开发环境:uclinux-2.6、vdsp-5.0、bfin-uclinux-gcc、bf561 dsp本文致力于从二进制层面上研究VDSP和GCC两种编译器生成代码的异同。目标是将两种不同编译器产生的obj文件进行链接,使之产生一个可以在uclinux下执行的程序。之所以选择从doj文件入手,主要原因有以下几点:1、因为程序最终需要在uclinux下运行,所原创 2007-12-17 20:46:00 · 3833 阅读 · 15 评论 -
Bf533 Ldr文件到DXE文件的转换-答jack
Blackfin系列DSP内置了BOOTROM,当设置好相应的BOOT MODE后,BOOTROM即可发挥作用,将用户程序读取到片内Cache或者SDRAM的指定位置,然后程序从预设好的地址开始执行。在这种方式下,要求用户的程序按照一定的格式存放,这就是ldr的文件格式。在Visual DSP中提供了elfloader.exe工具,用以将DXE文件转换为ldr文件。不过遗憾的原创 2008-03-10 10:17:00 · 3861 阅读 · 0 评论 -
关于u-boot-1.1.6(bf561) for VDSP的移植
1 开发环境仅针对Visual DSP 4.5进行了调试,5.0则没有。2 目录结构1、在移植过程中,基本保留了原有的目录结构不动。2、在其根目录下新建了一个vdsp的子目录,用以保存VDSP的工程文件和生成的临时文件。最终生成的DXE文件也保存在这里。3、将include目录下的asm-blackfin名称改为asm,因为在windows下无法使用a原创 2008-03-10 10:20:00 · 1415 阅读 · 1 评论 -
关于uClinux-2.6(bf561) for VDSP的移植
1 开发环境仅针对Visual DSP 4.5进行了调试,5.0则没有。2 目录结构1、在移植过程中,基本保留了原有的目录结构不动。2、在其根目录下新建了一个vdsp的子目录,用以保存VDSP的工程文件和生成的临时文件。最终生成的DXE文件也保存在这里。3、将include目录下的asm-blackfin名称改为asm,因为在windows下无法使用a原创 2008-03-11 17:53:00 · 1910 阅读 · 3 评论