PEEDI 3 调试uClinux核和应用程序带GNU gdb 案例

合集下载

使用GDB调试多线程实例详解

使用GDB调试多线程实例详解

使⽤GDB调试多线程实例详解
先写⼀段多线程程序。

makefile
加上 -g参数⽣成可调式信息,可以进⾏调试。

pthread不是Linux下的默认的库,也就是在链接的时候,⽆法找到phread库中哥函数的⼊⼝地址,于是链接会失败。

在gcc编译的时候,附加要加 -lpthread参数即可解决。

gdb test 进⼊调试
需要调试的地⽅打下断点,run运⾏到断点处。

r 运⾏到断点处,info thread可以查看被调试的线程。

thread apply all bt 让所有线程打印堆栈信息
set scheduler-locking off|on|step
在使⽤step或continue命令调试当前被调试线程的时候,其他线程也是同时执⾏的,如果我们只想要被调试的线程执⾏,⽽其他线程停⽌等待,那就要锁定要调试的线程,只让它运⾏。

off:不锁定任何线程,所有线程都执⾏。

on:只有当前被调试的线程会执⾏。

step:阻⽌其他线程在当前线程单步调试的时候抢占当前线程。

只有当next、continue、util以及finish的时候,其他线程才会获得重新运⾏的。

show scheduler-locking:
这条命令是为了查看当前锁定线程的模式。

感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。

gdb交叉编译调试教程

gdb交叉编译调试教程

gdb交叉编译调试教程1.引言1.1 概述引言是一篇长文的开头部分,用于向读者介绍文章的背景、内容和目的。

在本篇长文中,我们介绍了gdb交叉编译调试的教程。

在本文的概述部分,我们将对文章的主要内容进行简要介绍。

本文主要分为引言、正文和结论三个部分。

在引言部分,我们首先介绍了本文的概述。

随后,我们会详细说明文章的结构和目的。

本文的主要目的是教会读者如何使用gdb进行交叉编译调试。

我们将从gdb的简介开始,介绍gdb的基本功能和用途。

然后,我们会对交叉编译进行概述,详细说明交叉编译的原理和常见的应用场景。

在结论部分,我们将对本文进行总结,并提供一些建议,帮助读者更好地进行实践。

通过本文的学习,读者将能够掌握gdb交叉编译调试的基本技巧,为软件开发和调试提供便利。

同时,读者也能够理解交叉编译的原理和应用,进一步提高自己的编程能力。

接下来,让我们开始正文的内容,详细介绍gdb的相关知识和交叉编译的实践操作。

文章结构部分的内容可以包括以下内容:文章结构指导读者对整篇文章的组织和内容有一个清晰的了解。

通过明确的结构,读者可以更好地理解和学习文章中的知识点。

下面是文章结构的主要部分:1.2 文章结构本文分为引言、正文和结论三个部分。

引言部分(Introduction)主要介绍了本文的背景和目的。

其中,概述部分介绍了本文要讲解的主题:gdb交叉编译调试。

通过引言部分,读者可以了解到本文所涉及的领域和问题,并对后续内容有一个整体的了解。

正文部分(Main Body)是本文的主要内容,分为多个小节。

第一个小节(2.1 GDB简介)介绍了GDB的基本概念和功能,包括它是什么、为什么要使用它以及如何使用它进行调试等。

通过这一小节,读者可以快速了解GDB的基本知识。

第二个小节(2.2 交叉编译概述)介绍了交叉编译的基本概念和原理。

解释了为什么需要进行交叉编译以及如何进行交叉编译。

此小节还可以涵盖一些常见的交叉编译工具和方法,以帮助读者更好地理解交叉编译的过程和技术。

PEEDI案例DaVinciDM355Linux核调试和NAND闪存编程

PEEDI案例DaVinciDM355Linux核调试和NAND闪存编程

关键词:DM355 Linux核调试,PEEDI,FTP服务器,CFG文件;1、概述这个案例向你演示Linux核调试和用PEEDI来对DM365 EVM板的编程。

这种方法可以重建板上的程序,同时终止了继续对它编程,首先演示如何手动操作,然后看如何通过简单的设置PEEDI达到这个效果。

2、硬件要求-一块PEEDI-一块DM365板-UBL, U-BOOT, KERNEL and 数据输入系统-一个运行FTP服务器的主机3、设置PEEDI和放弃YAFFS首先你需要准备一个CFG的文件,如果你以前的CFG文件比较复杂,可以从这里下载一个/cfg_examples/arm9/tms320dm355-DM355EVM.cfg 下面的都是关于FLASH设置的描述。

如果你想编写四个不同的模块(UBL, U-BOOT, Linux核和根文件系统),你需要在CFG里面定义四个FLASH图。

你要设定CORE0_PATH参数指向文件的所在目录。

这种FLASH的概述或者你需要的指令仅仅是文件的名字,不是整个路径。

然后,你想用PEEDI 单机模式的时候,你可以拷贝这个文件到MMC/SD卡里,你仅需要该改变CORE0_PATH。

现在我设置这个参数直接指向你的TFTP服务器根目录。

[PLATFORM_ARM]…CORE0_FLASH0 = NAND_UBLCORE0_FLASH1 = NAND_UBOOTCORE0_FLASH2 = NAND_KERNELCORE0_FLASH3 = NAND_ROOTFS…CORE0_PATH = ""[NAND_UBL]CPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ; addresses (ALE)FILE = ubl.bin, BIN, 64*2048OOB_INFO = DAVINCI_ECC_HW10_512BURST_MODE = YESDAVINCI_UBL_DESC_TYPE = 0DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xA1ACED00DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0x20DAVINCI_UBL_DESCRIPTOR_LOAD_ADDR = 0DAVINCI_UBL_MAX_IMAGE_SIZE = 28*1024[NAND_UBOOT]CPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ; addresses (ALE)FILE = u-boot-DM355.bin, BIN, 8*64*2048 ; 64 pages per block;FILE = u-boot-DM355.bin, BIN, 8*128*2048; 128 pages per blockOOB_INFO = DAVINCI_ECC_HW10_512BURST_MODE = YESDAVINCI_UBL_DESC_TYPE = 1DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xB1ACED22DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0xDAVINCI_UBL_DESCRIPTOR_LOAD_ADDR = 0xDAVINCI_UBL_MAX_IMAGE_SIZE = 1024*1024[NAND_KERNEL]CPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ; addresses (ALE)FILE = uImage, BIN, 0x00400000OOB_INFO = DAVINCI_ECC_HW10_512BURST_MODE = YES[NAND_ROOTFS]CPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02004000 ; dataCMD_BASE = 0x02004010 ; commands (CLE)ADDR_BASE = 0x0200400A ; addresses (ALE)FILE = rootfs.bin, BIN, 0xOOB_INFO = YAFFSBURST_MODE = YES如果你能够看到前两行的概述——PEEDI可以根据用户给定的信息自动编写程序指令符。

uClinux 的编译和运行

uClinux 的编译和运行

uClinux 的编译和运行说明:这个编译过程是基于uClinux-dist-51EDA.tar.bz2这个文件可以在51EDA论坛的客服中心找到。

1.创建开发环境首先需要编译的环境。

我们最好使用Linux作为开发平台,因为Linux以及uClinux的开发者们基本都是在Linux下完成的开发。

为了能够编译uClinux,我们需要下载uClinux的编译器。

这个文件可以在uClinux的官方网站得到,也可以在论坛的客服中心下载。

官方的下载地址是:/pub/uClinux/arm-elf-tools/arm-elf-tools-20030314.sh但是这个网站的速度比较慢,因此您也可以在论坛的客服中心下载。

是一样的文件。

在这里需要注意的是,虽然同为gcc和binutils工具,但是必须使用uClinux发布的版本,因为这个gcc和binutils都是为了能够编译FLAT格式的文件而订制的,另外也加入了ARM对PIC(Position Independent Code,位置无关代码)的支持。

PIC的支持是用来编译动态库或者XIP模式的可执行文件。

关于XIP的介绍有一篇文章:/article.pl?sid=02/08/28/0434210大家可以了解一下XIP。

但是由于XIP并不是很稳定,所以在我们发布的uClinux版本中并没有使用这个技术。

然后,将下载得到的文件,是一个sh文件。

这是一个自解压的文件(就好比Windows 下面的自解压zip或者rar一样)。

为了能够运行,我们需要:./arm-elf-tools-20030314.sh这样如果不能运行的话,那应该使用下面的命令:chmod 755 arm-elf-tools-20030314.sh得到了编译环境,就可以编译源代码了。

当然,首先要把代码解压缩到你的目录下面:tar xjvf uClinux-dist-51EDA.tar.bz2它会把全部的文件解压缩到uClinux-dist的目录下。

使用GDB进行程序调试

使用GDB进行程序调试

使用GDB进行程序调试GDB(GNU Debugger)是一个功能强大的调试工具,可以帮助程序员找到和解决程序中的错误。

它支持多种编程语言,包括C,C++,Fortran 等,并且可以在多种操作系统上运行,如Linux,MacOS和Windows。

下面是使用GDB进行程序调试的一般步骤:1. 编译程序时添加调试信息:在使用GDB进行程序调试之前,我们需要在编译程序时添加调试信息。

在GCC编译器中,可以通过使用`-g`选项来实现。

例如,`gcc -g my_program.c -o my_program`。

2. 启动GDB:以调试模式启动GDB,可以通过在终端中输入`gdb`命令来启动GDB。

然后,使用`file`命令加载要调试的可执行文件。

例如,`file my_program`。

3. 设置断点:在代码中设置断点,GDB会在断点处停止执行程序。

可以使用`break`命令来设置断点。

例如,`break main`会在程序开始执行时停止在`main`函数的第一行。

4. 运行程序:使用`run`命令来运行程序。

GDB会启动程序,并在遇到断点时停止。

可以使用`continue`命令继续执行程序。

5. 调试程序:一旦程序停止在断点处,可以使用一些GDB命令来检查变量的值,跟踪程序执行流程等。

例如,使用`print`命令来打印变量的值,使用`step`命令来单步执行程序,使用`next`命令将执行一行代码,而不会深入到函数内部。

6. 回顾栈帧:GDB允许回顾程序调用栈上的栈帧信息。

可以使用`backtrace`命令来打印当前调用栈上所有活动栈帧的信息。

使用`frame`命令可以切换到任一栈帧。

7. 调试崩溃:如果程序崩溃了,GDB将会在崩溃发生时停止程序并提供一些有关崩溃原因的信息。

通过使用`bt`命令可以获得崩溃时的调用栈信息。

8. 再次运行:如果在调试过程中发现问题已经解决,可以使用`kill`命令停止程序的执行,并使用`run`命令重新运行程序。

Linux下GNU调试器gdb详细说明

Linux下GNU调试器gdb详细说明

Linux下GNU调试器gdb详细说明1.简介Linux下GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。

在 X Window 系统中,有一个 gdb 的前端图形工具,称为 xxgdb。

gdb 是功能强大的调试程序,可完成如下的调试任务:* 设置断点;* 监视程序变量的值;* 程序的单步执行;* 修改变量的值。

在可以使用gdb 调试程序之前,必须使用-g 选项编译源文件。

可在 makefile 中如下定义CFLAGS 变量:CFLAGS = -g运行 gdb 调试程序时通常使用如下的命令:gdb progname在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:* aliases:命令别名* breakpoints:断点定义;* data:数据查看;* files:指定并查看文件;* internals:维护命令;* running:程序执行;* stack:调用栈查看;* statu:状态查看;* tracepoints:跟踪程序执行。

键入 help 后跟命令的分类名,可获得该类命令的详细清单。

2.gdb 的常用命令表 1-4 常用的 gdb 命令命令解释break NUM 在指定的行上设置断点。

bt 显示所有的调用栈帧。

该命令可用来显示函数的调用顺序。

clear 删除设置在特定源文件、特定行上的断点。

其用法为:clear FILENAME:NUM。

continue 继续执行正在调试的程序。

该命令用在程序由于处理信号或断点而导致停止运行时。

display EXPR 每次程序停止后显示表达式的值。

表达式由程序定义的变量组成。

file FILE 装载指定的可执行文件进行调试。

help NAME 显示指定命令的帮助信息。

info break 显示当前断点清单,包括到达断点处的次数等。

info files 显示被调试文件的详细信息。

info func 显示所有的函数名称。

gdb调试案例

gdb调试案例

gdb调试案例以GDB调试案例为题,我将列举以下10个案例,每个案例将描述GDB的使用场景、调试目标、具体步骤和调试结果,以帮助读者更好地理解和掌握GDB调试工具。

案例一:查看程序崩溃的原因场景:当程序崩溃时,我们需要找出崩溃的原因,以便修复程序中的bug。

目标:在程序崩溃时,使用GDB查看崩溃的原因。

步骤:1. 使用-g选项编译程序,以包含调试信息。

2. 执行gdb命令,加载可执行文件。

3. 在GDB中运行程序,当程序崩溃时,GDB会自动停止程序的执行。

4. 使用backtrace命令查看调用栈,找出导致崩溃的函数和行号。

5. 使用print命令查看变量的值,以便进一步分析崩溃原因。

结果:通过查看调用栈和变量的值,我们可以定位到导致程序崩溃的具体代码行,并进行修复。

案例二:设置断点并跟踪程序执行场景:当程序运行过程中出现问题,我们需要跟踪程序的执行过程,以便找出问题所在。

目标:使用GDB设置断点并跟踪程序执行。

步骤:1. 使用-g选项编译程序,以包含调试信息。

2. 执行gdb命令,加载可执行文件。

3. 使用break命令设置断点,可以选择在特定函数或行号上设置断点。

4. 运行程序,GDB会在断点处停止程序的执行。

5. 使用step命令逐行执行程序,并查看变量的值。

6. 使用continue命令继续程序的执行,直到下一个断点或程序结束。

结果:通过设置断点和逐行执行程序,我们可以跟踪程序的执行过程,找出问题所在。

案例三:查看内存信息场景:当程序出现内存相关的问题时,我们需要查看程序的内存使用情况,以便分析问题所在。

目标:使用GDB查看程序的内存信息。

步骤:1. 使用-g选项编译程序,以包含调试信息。

2. 执行gdb命令,加载可执行文件。

3. 运行程序,GDB会自动停止程序的执行。

4. 使用info breakpoints命令查看已设置的断点。

5. 使用info registers命令查看寄存器的值。

使用GDB命令行调试器调试C-C++程序

使用GDB命令行调试器调试C-C++程序

使用GDB命令行调试器调试C/C++程序
没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的。

幸好,linux下调试还是很方便的。

大多数人使用的IDE都集成了调试器,但linux 最著名的调试器是命令行形式的C/C++调试器GDB。

然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握。

这里,我会告诉你GDB的基本情况及使用方法。

安装GDB
大多数的发行版仓库中都有GDB
Debian 或Ubuntu
$ sudo apt-get install gdb
Arch Linux
$ sudo pacman -S gdb
Fedora,CentOS 或RHEL:
$sudo yum install gdb
如果在仓库中找不到的话,可以从官网中下载。

示例代码
当学习GDB时,最好有一份代码,动手试验。

下列代码是我编写的简单例子,它可以很好的体现GDB的特性。

将它拷贝下来并且进行实验——这是最好的方法。

#include
#include
int main(int argc,char**argv)
{
int i;
int a=0, b=0, c=0;
double d;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PEEDI JTAG仿真器调试uClinux核和应用程序带GNU gdb/insight关键词:PEEDI JTAG,调试uClinux核,目标设置,中断点;介绍:这是一篇关于用PEEDI JTAG仿真器调试uClinux核和应用程序带GNU gdb/insight的应用介绍。

现在最流行的32位的高速ARM是基于允许Linux进入嵌入式装置的微控装置。

这就是需要调试核以及应用变得重要的原因。

尽管Linux是一个真正多进程的操作系统,它利用一个存储管理单元(MMU)来给每个过程一个单独的存储空间。

但是低端的ARM核(ARM7)不具有存储管理单元,因此Linux的常规性性没有被应用。

这里讲述的是uClinux,一种定向于微存储管理单元的CPU的Linux系统。

尽管没有存储管理单元被应用,没有实际的存储空间是可利用的。

这就意味着所有的过程都共享同样的存储空间,因而每个处理过程,每次都是下载到不同基地址,而这在被应用的时候都不知道。

为什么通过JTAG调试?通过JTAG界面进行调试不需要监测器,像程序在目标上运行,因此是这是免打扰的,而且不占用目标资源。

平台和工具:为了达到这篇应用介绍的目的,我会运用到:uClinux 核v2.4GNU工具链——gcc v2.95,gdb/insight v6.5.50目标CPU——Atmel AT91C140JTAG仿真器——PEEDI备注:不要在v6.3前使用GNU gdb/Insight,这会破坏工作支持。

设置PEEDI除了所有在目标配置文件中共同的设置之外,有另一个参数需要被设置——在uClinux 核中init_task_union结构的基地址。

这个结构包含所有当前在目标文件内运行的程序的列表。

因此PEEDI可以显示它们。

这个地址在运行uClinux核被得知,因为每次这个核被装载时都用同样的地址。

它可能会从用nm gcc工具中获得,比如:这里linux是uClinux elf格式的程序。

现在我们可以在目标配置文件中设置地址了:目标设置三幅不同的程序已经在目标中程式化——uboot——这是引导载入器——linux核——ROM文件系统程序在简单的程序执行中,配置文件中的每段程序被描述成不同的FLASH部分,这种PEEDI 闪存设置命令方式可被用作它们之间的转换。

在我们选择好所用的核之后我们可以执行程序了,然后选择和执行另外两段程序:我们已经完成目标的执行,现在我们可以设置其它起始部分,这不需要初始化目标,因为这是引导载入器完成的,只有设置Embeddedlce存储器在软件断点模式下断开:调试核在调试核时你需要用调试信息编辑它:1、运行make config 或者make menuconfig2、确保Custtomize kernel Setting3、确保Customize Vendor/User Settings4、在核设置时,开启Full Symbolic/Source debugging support5、在用户设置时,开启build debugable libraries 和build debugable applications.6、保持整洁,保持数据执行保护。

备注:如果你只想调试uClinux应用程序而不包括核,那么不需要在调试信息时编译核。

我们用以下.gdbinit文件来更简便的调试:在核已经建立之后你可以开始载入gdb/insight。

在.gdbinit文件之后,gdb会自动地连接PEEDI,然后我们可以载入程序。

开始uClinux核只需键入:这时你已经进入了核,而且已经备份了。

现在你可以断开调试,增加断点来调试你的编程。

调试应用调试uClinux应用时,你需要首先准备这些应用:在应用的开始加入一个软件断点模式,这将会让程序在它开启时停在那儿。

再次编译应用,让ROMFS并编译它使得符合目标。

从闪存或者RAM中引导uClinux核。

你可以从你的系列控制台或者远程登录开始应用。

目标会在运行到(”.long 0xDFFFDFFF)行时停止。

gdb命令”info threads”给你.text,.data和.bss系列开始的信息,这对载入符号信息时是必要的。

Spar是我们关注的。

现在我们知道程序的地址,我们需要而且我们可以载入需要被执行的带有正确的信息地址的文件:(peedi)add-symbol-file spar.gdb 0xF64040-s.data 0xF4A004-s.bss 0xF53104add symbol table from file”spar.gdb”at.text_addr=0x64040.data_addr=0xf4a004.bss_addr=0xf53104(y or n)yReading symbols from /home/spar/spar.gdb…done从这点起你可以正常的在你需要的和调试的应用程序中设置断点。

记住目标执行时在其中的目标思路转换,因此如果你强制的停下它时,保证它会在执行调试时停止运行。

由于这个原因,推荐在调试时在期望停止的点处设置断点来停止运行目标程序。

附录这是本文中用到的完整的PEEDI的目标配置文件。

;-------------------------------------------------------------------------- ;; peedi.cfg; ---------;; PEEDI target configuration file for AT91C140 microcontroller;;; Ronetix;; Supported devices : Atmel AT91C140;; Revision : 1.0;; Date : Mai 28, 2006;;--------------------------------------------------------------------------;-------------------------------------------------------------------------- ; The following section contains licenses that are required for PEEDI; to operate.;; These licenses must be filled before using this file.;; Example:; [LICENSE]; KEY = UPDATE_24MAY2007, 1111-1111-1111-1; KEY = ARM7, 2222-2222-2222-2;; The minimum required licenses are provided when PEEDI is purchased; and are printed on the bottom side of PEEDI.;[LICENSE]KEY = UPDATE_13SEP2006, 1111-1111-1111-1KEY = ARM7_ARM9, 2222-2222-2222-2KEY = GDB_REMOTE, 3333-3333-3333-3[DEBUGGER]PROTOCOL = gdb_remote ; gdb remoteREMOTE_PORT = 2000 ; TCP/IP portGDB_READ_INGNORE_TIME = 3000 ; time in ms[TARGET]PLATFORM = ARM[PLATFORM_ARM]JTAG_CHAIN = 4 ; list of IR lengths of all TAP in the JTAG chainJTAG_CLOCK = 10, 16000 ; JTAG Clock in [kHz] - 10kHz init; 16MHz normal workTRST_TYPE = PUSHPULL ; type of TRST output: OPENDRAIN or PUSHPULLRESET_TIME = 5 ; length of RESET pulse in msCORE_STARTUP_MODE=RESET ; if RESET than no code is executed after resetCORE = ARM7TDMI ; TAP 0 is an ARM7TDMICORE_BREAK_PATTERN = 0xDFFFDFFF ; software breakpoint patternCORE_BREAKMODE = soft ; breakpoint mode:; soft - software breakpiont; hard - use hardware breakpoints instead of softwareCORE_INIT=INIT_RUN ; use this section to debug kernel/allpication; CORE_INIT=INIT_FLASH_PROGRAM ; use this init section to initialize the chip select CORE_FLASH0=FLASH_UBOOTCORE_FLASH1=FLASH_KERNELCORE_FLASH2=FLASH_ROMFSCORE_ENDIAN=littleCORE_WORKSPACE_ADDR=0xFC000000 ; PEEDI: start address of workspace for flash programm CORE0_WORKSPACE_LEN=0x2600 ; length of workspace in bytesCORE_OS = ucLinux24, 0x10c000 ; init_task_union is at addr 0x10c000[INIT_RUN]break add 0xFFFFFFFFgo;wait 6000;halt[INIT_FLASH_PROGRAM]memory write 0xff004000 0x4000207dmemory write 0xff004004 0x404020bdmemory write 0xff004008 0x80000001memory write 0xff00400C 0x80000001memory write 0xff000000 0x000000 ; CPU_CLOCK=240MHz/6[FLASH_UBOOT]CHIP=AT49BV6416ACCESS_METHOD=AGENTCHECK_ID=YESCHIP_WIDTH=16CHIP_COUNT=1BASE_ADDR=0x40000000FILE_NAME="tftp://192.168.3.1/uboot.bin"FILE_ADDR=0x40000000FILE_FORMAT=BINAUTO_ERASE=YES[FLASH_KERNEL]CHIP=AT49BV6416ACCESS_METHOD=AGENTCHECK_ID=YESCHIP_WIDTH=16CHIP_COUNT=1BASE_ADDR=0x40000000FILE_NAME="tftp://192.168.3.1/linux.bin"FILE_ADDR=0x40010000FILE_FORMAT=BINAUTO_ERASE=YES[FLASH_ROMFS]CHIP=AT49BV6416ACCESS_METHOD=AGENTCHECK_ID=YESCHIP_WIDTH=16CHIP_COUNT=1BASE_ADDR=0x40000000FILE_NAME="tftp://192.168.3.1/romdisk.bin" FILE_ADDR=0x401F0000FILE_FORMAT=BINAUTO_ERASE=YES。

相关文档
最新文档