2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)
Mini2440 Uboot移植
第一部分根据uboot-2008.10,移植出能在mini2440 nor flash上运行的uboot1 修改Makefile:在uboot-2008.10顶层目录中的Makefile中,参考smdk2410_config,添加新的配置选项。
# add,flyrizmini2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x02 修改cpu/arm920t/start.S:2.1添加支持S3C2440的编译条件/* #if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) 2.2添加S3C2440寄存器的定义#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */# endif/*add,flyriz,for 2440,register define*/#define CLK_CTL_BASE 0x4C000000#define MDIV_405 0x7f<<12#define PSDIV_405 0x21#define UPLL_MDIV_48 0x38<<12#define UPLL_PSDIV_48 0x22#define MDIV_200 0xa1<<12#define PSDIV_200 0x31/****************************/2.3修改中断禁止代码# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0]# endif/*add,flyriz*/# if defined(CONFIG_S3C2440)ldr r1, =0x7fff /* S3C2440有15个子中断[0...14] */ldr r0, =INTSUBMSKstr r1, [r0]# endif2.4 修改时钟设置/********************* FCLK:HCLK:PCLK = 1:2:4 ** default FCLK is 120 MHz ! *ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#endif * CONFIG_S3C2400 || CONFIG_S3C2410 *********************//*modify,flyriz*/#if defined(CONFIG_S3C2440)/*FCLK:HCLK:PCLK=1:4:8*/ldr r0,=CLKDIVNmov r1,#5str r1,[r0]mrc p15,0,r1,c1,c0,0 /* CP15中的寄存器C1是一个控制寄存器,用于配置MMU中的一些操作 */orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASE /* 0x4C000000 LOCKTIME:PLL lock time counter */mov r2,#UPLL_MDIV_48add r2,r2,#UPLL_PSDIV_48str r2,[r1,#0x08] /* 0x4C000008 UPLLCON=0x38<<12||0x22,output 48MHz */mov r2,#MDIV_405add r2,r2,#PSDIV_405str r2,[r1,#0x04] /* 0x4C000004 MPLLCON=0x7f<<12||0x21,output 405MHz */ #elseldr r0,=CLKDIVNmov r1,#3str r1,[r0]mrc p15,0,r1,c1,c0,0orr r1,r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASEmov r2,#MDIV_200add r2,r2,#PSDIV_200str r2,[r1,#0x04]#endif#endif /*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*//**********************************************************/3 修改cpu/arm920t/s3c24x0/interrupts.c3.1 在条件编译的宏定义里加入对s3c2440的支持:/* #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) *//*modify,flyriz*/#if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)||defined(CONFIG_TRAB)/* #elif defined(CONFIG_S3C2410) *//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)3.2 在get_tbclk函数中,添加对mini2440的支持:#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)tbclk = timer_load_val * 100;#elif defined(CONFIG_SBC2410X) || \defined(CONFIG_SMDK2410) || \defined(CONFIG_MINI2440) || \defined(CONFIG_VCMA9) /*modify,flyriz,add:CONFIG_MINI2440*/tbclk = CFG_HZ; /*get_tbclk函数的作用?CFG_HZ又是什么?*/4 修改cpu/arm920t/s3c24x0/speed.c4.1 在条件编译的宏定义里加入对s3c2440的支持:/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410)|| defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)4.2 修改get_PLLCLK函数:m = ((r & 0xFF000) >> 12) + 8;p = ((r & 0x003F0) >> 4) + 2;s = r & 0x3;/*add,flyriz*/#if defined(CONFIG_S3C2440)if(pllreg==MPLL)return ((CONFIG_SYS_CLK_FREQ*m*2)/(p<<s)); /*S3C2440中,UPLL与MPLL的计算公式不同*/ else if(pllreg==UPLL)#endif4.3 修改get_HCLK函数:ulong get_HCLK(void){S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();/*return ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK()); delete,flyriz*//*add,flyriz*/#if defined(CONFIG_S3C2440)if(clk_power->CLKDIVN & 0x6){if((clk_power->CLKDIVN & 0x6)==2)return (get_FCLK()/2);if((clk_power->CLKDIVN & 0x6)==6)return ((clk_power->CAMDIVN&0x100)?get_FCLK()/6:get_FCLK()/3);if((clk_power->CLKDIVN & 0x6)==4)return ((clk_power->CAMDIVN&0x200)?get_FCLK()/8:get_FCLK()/4);return (get_FCLK());}else return (get_FCLK());#elsereturn ((clk_power->CLKDIVN&0x2)?get_FCLK()/2:get_FCLK());#endif}5 修改include/asm-arm/mach-types.h,添加mini2440的机器ID(必须与内核提供的ID保持一致):#define MACH_TYPE_GENEVA 1873#define MACH_TYPE_MINI2440 1999 /*add,flyriz,mini2440机器ID,必须与内核提供的ID相同*/6 修改cpu/arm920t/s3c24x0/serial.c/*#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)*//*modify,flyriz*/#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB) /*#elif defined(CONFIG_S3C2410)*//*modify,flyriz*/#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)7 修改drivers/rtc/s3c24x0_rtc.c/* #elif defined(CONFIG_S3C2410) */#elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/8 修改include/s3c24x0.h/*#ifdef CONFIG_S3C2410*/#if defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440) /*modify,flyriz*/(所有ifdef CONFIG_S3C2410全部替换)/* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) *//* (see S3C2410 manual chapter 7) */typedef struct {S3C24X0_REG32 LOCKTIME;S3C24X0_REG32 MPLLCON;S3C24X0_REG32 UPLLCON;S3C24X0_REG32 CLKCON;S3C24X0_REG32 CLKSLOW;S3C24X0_REG32 CLKDIVN;/*add,flyriz*/#if defined(CONFIG_S3C2440)S3C24X0_REG32 CAMDIVN; /*增加CAMDIVN的定义*/#endif} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;9 为开发板新建一个目录在board目录中新建一个目录mini2440,将board/smdk2410下的所有文件拷贝到board/mini2440中,然后对mini2440中的文件做修改:将smdk2410.c改为mini2440.c;将Makefile中的代码COBJS :=smdk2410.o flash.o 改为COBJS :=mini2440.o flash.o10 修改board/mini2440/mini2440.c10.1 修改PLL的配置/*****************#elif FCLK_SPEED==1 // Fout = 202.8MHz#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#define USB_CLOCK 1*//*modify,flyriz*/#elif FCLK_SPEED==1#if defined(CONFIG_S3C2410)/*Fout=202.8MHz*/#define M_MDIV 0xA1#define M_PDIV 0x3#define M_SDIV 0x1#endif#if defined(CONFIG_S3C2440)/*Fout=405MHz*/#define M_MDIV 0x7f#define M_PDIV 0x2#define M_SDIV 0x1#endif#endif#define USB_CLOCK 1/*****************/10.2 修改UPLL的配置/***************#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#define U_M_MDIV 0x48#define U_M_PDIV 0x3#define U_M_SDIV 0x2#endif*//*modify,flyriz*/#if USB_CLOCK==0#define U_M_MDIV 0xA1#define U_M_PDIV 0x3#define U_M_SDIV 0x1#elif USB_CLOCK==1#if defined(CONFIG_S3C2410) #define U_M_MDIV 0x48#define U_M_PDIV 0x3#endif#if defined(CONFIG_S3C2440) #define U_M_MDIV 0x38#define U_M_PDIV 0x2#endif#define U_M_SDIV 0x2#endif/*****************/10.3 修改board_init函数,以引导内核/* arch number of SMDK2410-Board *//* gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; *//*modify,flyriz*/gd->bd->bi_arch_number = MACH_TYPE_MINI2440;11 修改board/mini2440/lowlevel_init.S中REFRESH的刷新周期/* REFRESH parameter */#define REFEN 0x1 /* Refresh enable */#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh *//* #define Trp 0x0 2clk *//*modify,flyriz*/#define Trp 0x2 /* 4clk */#define Trc 0x3 /* 7clk */#define Tchr 0x2 /* 3clk *//* #define REFCNT 1113 period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) *//*modify,flyriz*/#define REFCNT 1012/**************************************/12 添加并修改配置文件为开发板添加新的配置文件,复制include/configs/smdk2410.h,另存为include/configs/mini2440.h,并对其进行修改12.1 添加s3c2440的宏定义#define CONFIG_ARM920T 1 /* This is an ARM920T Core *//* #define CONFIG_S3C2410 1 in a SAMSUNG S3C2410 SoC *//* #define CONFIG_SMDK2410 1 on a SAMSUNG SMDK2410 Board *//*modify,flyriz*/#define CONFIG_S3C2440 1#define CONFIG_MINI2440 112.2 修改命令提示符#defineCFG_LONGHELP /* undef to save memory *//* #define CFG_PROMPT "SMDK2410 # " Monitor Command Prompt *//*modify,flyriz*/#define CFG_PROMPT "Mini2440 # "一个具备基本功能的UBOOT代码修改部分已经完成。
uboot 调式方法
uboot 调式方法U-Boot调试方法U-Boot是一个开源的嵌入式系统引导加载程序,广泛应用于各种嵌入式设备中。
在开发嵌入式系统时,经常需要对U-Boot进行调试来解决问题或改进功能。
本文将介绍一些常用的U-Boot调试方法,帮助开发人员有效地进行调试工作。
一、串口调试串口调试是最常用的U-Boot调试方法之一。
通过串口调试,可以在开发板和主机之间建立一个串口通信通道,实时显示和获取U-Boot的调试信息。
1. 连接串口需要将开发板的串口和主机的串口进行连接。
一般来说,开发板会提供一个或多个串口接口,可以通过连接线将其与主机的串口接口相连。
2. 配置串口参数在主机上,需要打开一个串口终端程序,如minicom或PuTTY。
然后,设置串口参数,包括波特率、数据位、停止位等。
这些参数需要与U-Boot的配置相匹配,一般来说,U-Boot的默认串口配置为115200 bps、8数据位、1停止位、无校验位。
3. 启动开发板将开发板连接到主机后,可以通过重启或上电的方式启动开发板。
在开发板上电后,U-Boot会自动输出调试信息到串口终端程序。
4. 查看调试信息在串口终端程序中,可以实时查看U-Boot的调试信息。
这些信息包括启动过程中的各种状态、引导加载程序的执行过程以及命令行的输入输出等。
二、JTAG调试JTAG调试是另一种常用的U-Boot调试方法。
通过JTAG调试,可以在硬件级别上对U-Boot进行调试,实时监控和修改寄存器的值、查看内存数据等。
1. 连接JTAG调试器需要将JTAG调试器连接到开发板上的JTAG接口。
JTAG调试器一般会提供相应的连接线和插头,可以将其与开发板的JTAG接口相连。
2. 配置调试环境在主机上,需要安装相应的JTAG调试工具,如OpenOCD或J-Link等。
然后,配置调试环境,包括连接调试器、选择目标设备等。
3. 启动调试会话配置好调试环境后,可以启动一个JTAG调试会话。
mini2440使用uboot(详细)
mini2440使用uboot(详细)文章出处:/swgshj/archive/2010/04/20/5502121.aspx文章写于2010.4.17,总结了友善之臂的mini2440开发板使用自带uboot的具体方法,希望能对正在使用mini2440开发板,而且又想使用uboot引导系统的朋友们有所帮助。
Google一下会发现网上类似的帖子不少,但是对mini2440开发板是哪一个版本都没有具体的说明,个人感觉mini2440开发板的版本是经常更新的,可能不同的版本的开发板在移植uboot时会稍有不同,因此这里我把自己使用的开发板的详细信息都罗列一下,希望网友少走弯路。
另外,要感谢illidan和Martin两位的文章:/2009/05/mini2440使用u-boot//bbs/viewthread.php?tid=14使用的mini2440开发板的详细信息:kernel:linux-2.6.29-mini2440-20090708.tgzgcc:arm-linux-gcc-4.3.2.tgzuboot:bootloader.tgz(该压缩包内含有u-boot-1.1.6)roots:root_qtopia-64M.img问题源于:(1)使用128M NAND Flash mini2440开发板的用户都知道,此时开发板附带的supervivi-64M和supervivi-128M都不再支持“空格”进入supervivi的menu菜单,而是改成了使用开发板上的k1~k6任何一个按键触发进入menu(而我需要空格键触发menu的方式);(2)开发板附带的supervivi不支持网络下载kernel和root(文件系统)。
具体的修改步骤如下:注1:arm-linux-gcc的安装方法见《mini2440-um-20090817.pdf》第5.3小节。
注2:mini2440开发板附带的uboot源码已经是经过移植的,适用s3c2440处理器,我们只需要修改一些uboot参数即可。
uboot中烧录方法
uboot中烧录方法
在嵌入式系统开发中,U-Boot是一个常用的引导加载程序,用
于引导嵌入式设备的操作系统。
烧录U-Boot到嵌入式设备通常涉及
以下几种方法:
1. 串口烧录,通过串口连接嵌入式设备和主机,使用串口通信
工具(如minicom、putty等)将U-Boot固件通过串口传输到设备
的存储器中。
这种方法需要设备具备串口接口,并且需要主机具备
串口通信工具和相应的串口线缆。
2. TFTP烧录,使用TFTP(Trivial File Transfer Protocol)通过网络将U-Boot固件传输到嵌入式设备的存储器中。
在设备启动时,U-Boot会尝试从网络上的TFTP服务器下载固件。
这种方法需
要设备处于能够访问网络的环境中,并且需要在网络中设置好TFTP
服务器。
3. SD卡烧录,将U-Boot固件写入SD卡,然后将SD卡插入嵌
入式设备,设备在启动时会读取SD卡中的U-Boot固件。
这种方法
需要主机具备SD卡写入工具,如dd命令或Win32 Disk Imager等。
4. JTAG烧录,使用JTAG(Joint Test Action Group)接口连接嵌入式设备和主机,通过专用的JTAG调试器将U-Boot固件烧录到设备的存储器中。
这种方法通常需要专门的硬件设备和相应的调试软件。
在选择烧录方法时,需要根据具体的嵌入式设备和开发环境来决定,确保选择的方法能够有效、安全地将U-Boot固件烧录到设备中,并且需要注意备份设备中原有的U-Boot固件以防止意外情况发生。
希望这些信息能够帮助你更好地理解在U-Boot中的烧录方法。
uboot命令使用教程(uboot参数设置)
uboot命令使⽤教程(uboot参数设置)1. Printenv 打印环境变量。
uboot> printenvbaudrate=115200ipaddr=192.168.0.111ethaddr=32:34:46:78:9A:DCserverip=192.168.0.100Environment size: 80/8188 bytes2. Setenv 设置新的变量如:uboot> setenv myboard AT91RM9200DKuboot> saveenvuboot> printenvbaudrate=115200ipaddr=192.168.0.111ethaddr=32:34:46:78:9A:DCserverip=192.168.0.100myboard=AT91RM9200DKEnvironment size: 102/8188 bytes⼜如想重置启动参数bootargs:uboot> setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'uboot> saveenv3. saveenv 保存变量命令将当前定义的所有的变量及其值存⼊ flash 中。
⽤来存储变量及其值的空间只有 8k 字节,应不要超过。
(如上例,每次与setenv配合使⽤)4. loadb 通过串⼝ Kermit 协议下载⼆进制数据。
5. tftp 通过⽹络下载程序,需要先设置好⽹络配置简单配置:uboot> setenv ethaddr 32:34:46:78:9A:DCuboot> setenv ipaddr 192.168.0.111uboot> setenv serverip 192.168.0.100//下载 bin ⽂件到地址 0x20000000 处。
u-boot-2011.03在TQ2440上的移植--最新uboot移植文档
u-boot-2011.03在TQ2440上的移植(1)--建立自己的demo板收藏参考文章黄刚博客/u3/101649/showart_2276917.htmltekkman博客/u1/34474/showart_2212066.html1、到ftp://ftp.denx.de/pub/u-boot/下载u-boot-2010.06.tar.bz22、解压tar jxvf u-boot-2010.06.tar.bz23、进入uboot cd u-boot-2010.064、删减uboot进入/board,留下samsung,其它全部删除进入/arch,留下arm,其它全部删除进入/arch/arm/cpu,留下arm920t,其它全部删除5、建立自己的DEMO板cd /board/samsungmkdir smdk2440cp -rf smdk2410/* smdk2440///将2410下所有的代码复制到2440下cd smdk2440//进入smdk2440目录mv smdk2410.c smdk2440.c//将smdk2440下的smdk2410.c改名为smdk2440.c然后在文件夹samsung里留下smdk2440,其它全部删除cp include/configs/smdk2410.h include/configs/smdk2440.h//建立2440头文件在include/configs下留下smdk2440.h, 其它全部删除vi board/samsung/smdk2440/Makefile//修改smdk2440下Makefile的编译项,如下:COBJS := smdk2440.o flash.o//修改第28行因在smdk2440下我们将smdk2410.c改名为smdk2440.c6、修改u-boot跟目录下的Makefile文件。
查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立my2440_config的编译选项,另外还要指定交叉编译器,修改159行CROSS_COMPILE ?= arm-linux-//指定交叉编译器为arm-linux-gccsmdk2410_config:unconfig//2410编译选项格式@$(MKCONFIG) $(@:_config=)arm arm920t smdk2410 samsung s3c24x0smdk2440_config:unconfig//修改蒂3054行,2440编译选项格式@$(MKCONFIG) $(@:_config=)arm arm920t smdk2440 samsung s3c24x0*说明:arm:CPU的架构(ARCH)arm920t:CPU的类型smdk2440 :对应在board目录下建立新的开发板项目的目录samsung:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULLs3c24x0:CPU型号*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错7、测试编译新建的smdk2440开发板项目在uboot根目录测试make smdk2440_configmake即可在uboot根目录下生成bin文件在uboot里,清除中间文件用命令make distcleanu-boot-2011.03在TQ2440上的移植(2)--初始化时钟收藏smdk2440的初始化设置1、u-boot主要的目录结构如下2、启动流程图下图由上图可知u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。
u-boot-2015.04在tq2440上的移植(使用spl引导u-boot)
u-boot-2015.04在tq2440上的移植(使⽤spl引导u-boot)使⽤⽅法:1、编译 make tq2440_defconfig make2、然后会在u-boot根⽬录下⽣成u-boot.bin,在spl⽬录下会⽣成u-boot-spl.bin,⽬前的分区是:u-boot-spl.bin(1M)u-boot.bin(1M)kernel(3M)rootfs(剩余)⾃⼰可以改动,在arch/arm/lib/crt0.S中: #if defined(CONFIG_SPL_BUILD)/* Read u-boot from Nandflash to SDRAM address $CONFIG_SYS_TEXT_BASE */ldr r0, =CONFIG_UBOOT_MTD_ADDR /*u-boot镜像在NandFlash中存储地址*/ldr r1, =CONFIG_SYS_TEXT_BASE /*u-boot在内存中的加载地址*/ldr r2, =CONFIG_UBOOT_LENGTH /*u-boot镜像的⼤⼩*/bl copy_code_to_sdramldr pc, =CONFIG_SYS_TEXT_BASE #elsebl board_init_f #endif3、⽬前⽀持NandFlash和DM9000。
4、为什么要⽤spl来引导u-boot? 对于tq2440,采⽤的是S3C2440,当从NandFlash启动时,上电时S3C2440内部固化的程序⾃动把NandFlash的前4KB 程序拷贝到⽚内SRAM,然后执⾏IRAM中的程序,同时要保证这4KB中的程序是位置⽆关码,在这4KB程序完成了内存的初始化,栈的设置,NandFlash的初始化,将u-boot镜像从NandFlash中拷贝到内存中,将PC跳转到内存中执⾏。
随着u-boot的更新,在u-boot的前4K已经⽆法完成上⾯这些事,在前4KB会执⾏位置相关码,导致u-boot⽆法正常运⾏。
uboot 命令详解
u-boot 技术文档1.U boot 命令详解1.1查看帮助命令使用help 或者?1.2环境变量打印环境变量:printenv设置环境变量:setenv(不会保存)保存环境变量:saveenv这个时候就有了1.3nandflash命令使用nand查看nandflash 所有指令擦除nand erase1.4norflash命令查看Flash信息命令: flinfo加/解写保护命令: protect擦除命令: erase1.5内存命令nm1.5USB指令使用help usb 查看usb具体指令使用usb 启动使用usb tree查看信息f atls usb 0 罗列u盘信息1.5.1实例演练usb指令烧写1.6实例演练ftp指令烧写环境变量中体现了开发板上的IP地址为192.168.0.2,网关为192.168.0.1,要求电上的tftp 服务器的IP为192.168.0.1;运行电脑上tftp服务器,指定好根目录,将内核和根文件系统放在根目录下。
注:线接上后,电脑上的本地连接可能是显示网络电缆没插好,这很正常!在使用过程中它们会自动去连接!<2>分别下载内核和根文件系统到内存0x30008000开始的空间先检查坏块nand bad再擦除坏块清理某个区域0x560000 0x3b22c00将根文件系统加载到0x30008000然后再将根文件系统写到0x560000 0x3b22c00这个位置然后重启:重复上面的步骤:nand erase 0x60000 0x267000将内核文件保存到0x60000 0x267000这块区域运行1.8系统重启指令2.U boot 内核移植在cpu/arm920t/start.S中添加以下代码在修改并添加为以下代码在include/configs/mini2440.h修改为如下:将以下代码修改为:将以下代码修改为:将以下代码修改为:在drivers/mtd/nand/s3c2410_nand.h 在最后下面代码上添加如下带码:。
jz2440开发板玩法
jz2440开发板玩法话说,开发板的资料⽬录乱得让⼈头⽪发⿇,最后发现 \开发板资料\百问⽹精智JZ2440开发板4.3⼨LCD版使⽤⼿册.pdf 是关键⽹页资料:驱动安装驱动⽂件⽬录路径别太长,否则windows会报错:系统找不到指定的⽂件百问⽹的新版 Jz2440 v3.0,插上电源线Windows:{禁⽤驱动签名} 排线⼝ (被识别成两个USB<=>JTAG&RS232+⼀个USB Serial Port)micro USB Serial 串⼝的 Prolific USB-to-Serial Comm Port 会被系统⾃动更新安装micro USB Devices 设备开机模式下的DNW驱动 SEC S3C2410X Test B/D找了很久,最后发现可以直接⽤开源⼯具全部⼀键安装。
这⾥附上2.5版本附上:驱动安装完成排线是三个 OPENJTAG设备(USB Serial Port + 100ASK JTAG + 100ASK Serial Port )靠近⽹线⼝的是 micro USB Serial 串⼝ Prolific USB-to-Serial Comm Port在usb串⼝旁边的是 Micro USB Devices SEC S3C2410X Test B/D,这个设备偶尔会报错, 且会受VMware的影响,重开开发板/虚拟机就可以了(最好是插线开机后再开虚拟机)可以调整COM端⼝号,双击设备,端⼝设置-⾼级,设置为COM1编译 Bootloader 和操作系统Bootloader选⽤ U-Boot,操作系统选⽤ Linux-arm交叉编译ARM版的U-Boot,及插桩打补丁因为虚拟⽹卡出了问题,⼜刚好有个分区没⽤到,所以直接放uboot等源码⽂件并映射成虚拟磁盘给VMware⽤了。
注意:如果按任意键召唤不了uboot菜单,那么建议断开usb,先插电开机再串⼝调试,按开发板的RESET键重启准备交叉编译环境推荐做完以下步骤后,试试⾃⼰搭建交叉编译环境及其鉴于国内垃圾GFW⽹络,在此提供官⽹下的⽆修改压缩包⽤资料提供的古⽼的ubuntu9.10.......,当然我在评论区放了Ubuntu18.04的使⽤⽅案把这个arm-linux-gcc包解压到根⽬录,然后编辑环境变量sudo tar -xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 -C /optsudo vi /etc/profile在末尾添加如下export PATH=$PATH:/opt/gcc-3.4.5-glibc-2.3.6/bin按ESC,输⼊:wq保存退出刷新环境变量配置source /etc/profile**注: ** 如果之前使⽤了其他版本的gcc,那么应该关闭终端窗⼝后重新打开,并source /etc/profile,否则make⾥的gcc变量依然是之前的版本如果希望⾃定义交叉编译环境,可以⽤export 设置仅在当然终端窗⼝⽣效的临时全局变量,或者在原 make 命令后接上如 CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- ⽤于指定编译器路径及其前缀插桩编译 Uboottar xjf u-boot-1.1.6.tar.bz2cd u-boot-1.1.6/patch -p1 < ../u-boot-1.1.6_jz2440.patch使⽤配置并⼀键编译make 100ask24x0_configmake或者指定交叉编译⼯具链前缀路径变量make ARCH=arm CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- 100ask24x0_configmake CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-插桩编译 Linux2.6tar xjf linux-2.6.22.6.tar.bz2cd linux-2.6.22.6patch -p1 < ../linux-2.6.22.6_jz2440.patchmake s3c2410_defconfig #如果不想⽤现成的config_ok,可以基于uboot提供的2410⾃⼰修改(⽅案1)cp config_ok .config #直接使⽤100ask官⽅做好的配置(⽅案2)make menuconfig #配置菜单(可选)make uImage烧写开发板⽤ oflash 烧写⼯具将U-boot.bin写⼊开发板的 Nor Flash (通过 OpenJTAG 排线接⼝)通过 USB 串⼝⽤终端命令和开发板交互(数字电路原理:信息本质都是通过电信号传输的,所以和⽹络ssh本质上也没有差别,和ssh⼀样操作命令就⾏) 记得设置波特率为115200并关闭流控(Flow Control),然后重开终端窗⼝可以通过串⼝操作Uboot,利⽤Uboot提供的 [k]Download linux kernel uImage来将嵌⼊式操作系统如Linux2.6写⼊开发板接上两根usb,⽤新建串⼝终端,>Transmit选择编译好的uImage烧写即可。
TQ2440烧写uboot全过程
39
天 嵌 科
广州天嵌计算机科技有限公司
地址:广东省广州市天河区五山路 141 号尚德大厦 A2004 室 邮编:510000 电话:020-38921445(销售) 020-22106679 (技术支持) 传真:020-38921445 www. embedsky .net 或 http://www. www.embedsky embedsky. E-mail: support@ 官方网站:http://
技
� 烧写镜像到 Nand Flash 依次选择 “0”;“0”;“0”;如下图
等待几分钟,即可成功烧写 Nand Flash:
40
天 嵌 科
广州天嵌计算机科技有限公司
地址:广东省广州市天河区五山路 141 号尚德大厦 A2004 室 邮编:510000 电话:020-38921445(销售) 020-22106679 (技术支持) 传真:020-38921445 www. embedsky .net 或 http://www. www.embedsky embedsky. E-mail: support@ 官方网站:http://
技
等待几分钟,即可成功烧写 Nor Flash :
42
天 嵌 科
广州天嵌计算机科技有限公司
地址:广东省广州市天河区五山路 141 号尚德大厦 A2004 室 邮编:510000 电话:020-38921445(销售) 020-22106679 (技术支持) 传真:020-38921445 www. embedsky .net 或 http://www. www.embedsky embedsky. E-mail: support@ 官方网站:http://
技
uboot 代码运行流程
uboot 代码运行流程U-Boot代码运行流程U-Boot(Universal Bootloader)是一个开源的引导加载程序,广泛应用于嵌入式系统中。
它负责在系统上电后初始化硬件并加载操作系统内核,是系统启动的重要一环。
下面将从U-Boot代码的运行流程方面进行介绍。
1. 启动阶段当系统上电后,处理器会从预定义的存储器地址开始运行代码。
U-Boot的启动代码通常存放在ROM中,处理器会从ROM的起始地址开始执行。
启动代码负责初始化处理器和一些外设,然后跳转到U-Boot的入口点。
2. 入口点U-Boot的入口点是指U-Boot的main()函数。
在启动代码的最后,会调用main()函数,从而进入U-Boot的主循环。
U-Boot的主循环负责处理用户输入的命令,并根据命令执行相应的操作。
3. 硬件初始化在main()函数中,首先会进行硬件的初始化工作。
这包括初始化串口、初始化存储器控制器、初始化网络接口等。
硬件初始化的目的是为了确保系统能够正常运行,并为后续的操作做好准备。
4. 系统启动硬件初始化完成后,U-Boot会尝试从存储设备(如闪存、SD卡)中加载操作系统内核镜像。
U-Boot会根据预定义的启动命令(例如bootcmd)来确定从哪个设备加载内核镜像,并执行相应的加载操作。
加载完成后,U-Boot会将控制权交给操作系统内核,进入操作系统的启动阶段。
5. 用户交互一般情况下,U-Boot会在系统启动后进入命令行界面,等待用户输入命令。
用户可以通过串口、网络等方式与U-Boot进行交互,执行各种操作,例如烧写固件、修改配置等。
U-Boot提供了丰富的命令集,可以满足不同的需求。
6. 系统重启当用户输入重启命令或系统发生异常时,U-Boot会执行系统重启操作。
重启操作包括重新初始化硬件、重新加载内核镜像等步骤,以重新启动系统。
U-Boot会将控制权交给重新加载的内核,然后进入内核的启动流程。
总结:U-Boot代码的运行流程包括启动阶段、入口点、硬件初始化、系统启动、用户交互和系统重启等几个关键步骤。
U-Boot启动过程--详细版的完全分析
(一)U-Boot启动过程--详细版的完全分析我们知道,bootloader是系统上电后最初加载运行的代码。
它提供了处理器上电复位后最开始需要执行的初始化代码。
在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。
然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动就完全由bootloader来完成。
它主要的功能是加载与引导内核映像一个嵌入式的存储设备通过通常包括四个分区:第一分区:存放的当然是u-boot第二个分区:存放着u-boot要传给系统内核的参数第三个分区:是系统内核(kernel)第四个分区:则是根文件系统如下图所示:u-boot是一种普遍用于嵌入式系统中的Bootloader。
Bootloader介绍Bootloader是进行嵌入式开发必然会接触的一个概念,它是嵌入式学院<嵌入式工程师职业培训班>二期课程中嵌入式linux系统开发方面的重要内容。
本篇文章主要讲解Bootloader 的基本概念以及内部原理,这部分内容的掌握将对嵌入式linux系统开发的学习非常有帮助!Bootloader的定义:Bootloader是在操作系统运行之前执行的一小段程序,通过这一小段程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
意思就是说如果我们要想让一个操作系统在我们的板子上运转起来,我们就必须首先对我们的板子进行一些基本配置和初始化,然后才可以将操作系统引导进来运行。
具体在Bootloader中完成了哪些操作我们会在后面分析到,这里我们先来回忆一下PC的体系结构:PC机中的引导加载程序是由BIOS和位于硬盘MBR中的OS Boot Loader(比如LILO和GRUB等)一起组成的,BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给OS Boot Loader。
如何用hjtag在nand flash中烧写boot
烧写nand flash的前提,给开发板连接好电源线、串口线和jtag(使用wiggler口)。
插好核心板跳线J5。
1.开发板上电,用H-JTAG检测CPU。
2.点击H-JTAG的菜单Flasher—>Start H-Flasher如图1图13.然后进行配置。
第一项Flash Selection,选择nand里面的s3c2440+k9f1g08,如图2注意:有的可能没有nand芯片可选,不用着急,这是你的H-JTAG版本太低了,下载一个H-JTAG_0.9.2版本的装上即可。
在H-JTAG菜单栏的Help的下拉菜单中有H-JTAG Home,即H-JTAG主页,根据提示就可以在上边下载一个H-JTAG_0.9.2版本的软件了。
图2 4.第二项Configuration,配置如图3:图35.第三、四项不用设置6.第五项Programming。
首先要检测Flash芯片,点击右上角的Check。
如果检测到则如图3篮圈部分所示:芯片的型号应和图2右侧的内容相符。
如果有需要,可以先擦除(erase)一下flash,注意,这个擦除默认是全flash擦除。
注意:在CPU还在初始化阶段可以检测多次,但当开发板启动到图4DNW所示的时候,则只能检测一次,当再次检测的时候会提示你检查FLASH型号如图5。
7.Type、Dst Addr、Src选择如图3所示。
烧写文件为2440boot.bin.图4图58.上边的一切都准备好之后则开始烧写了,点击Check下面的Program,则出现图6所示的进度条,烧好之后Close。
图69.到现在位置,Boot以基本烧写完毕,关闭电源。
10.开发板上电即可启动BOOT了如图8图7。
一步步教你移植uboot(超精华版)
#make gec2440_config #make 编译完成时最后两句如下:
arm-linux-objcopy -O srec u-boot u-boot.srec arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 表示编译成功。
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff //0x3ff,根据 2410 芯片手册,INTSUBMSK 有 11 位可用,vivi 也是 0x7ff, u-boot 则是 0x3ff,不过芯片复位后所有中断都被屏蔽,故这无影响
ldr r0, =INTSUBMSK
>> 2
广州广嵌电子科技有限公司
u-boot移植要点 我们可以总结出bootloader的两大功能:
1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。 2 是对flash芯片的读写功能。 u-boot对S3C2440已经有了很好的支持,在移植过程中主要是完善u-boot对nand flash 的读写功能。 u-boot移植前的准备工作 1.下载源码 Uboot的源码可以从以下网址下载: /u-boot/u-boot-2009.11.tar.bz2?modtime=1134 752480&big_mirror=0 我们这里下载的是u-boot-2009.11.tar.bz2 工具链使用cross-4.1.2
samsung: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。 板子起名叫gec2440,可以依自己的喜好修改
UBOOT移植操作
UBOOT移植操作1. 确定目标平台和硬件:首先需要了解目标平台的硬件架构、处理器类型、存储设备(如 Flash 或者 SD 卡)等重要信息。
同时需要获取目标平台的硬件参考手册或者相关文档。
2.设置交叉编译工具链:UBOOT是使用C和汇编语言编写的,因此需要使用交叉编译工具链来生成可在目标平台上运行的二进制可执行文件。
交叉编译工具链包括交叉编译器、链接器和调试器等工具,这些工具需要针对目标平台进行配置。
4. 配置 UBOOT 环境:进入 UBOOT 源代码目录,运行 `make menuconfig` 命令来配置 UBOOT 的环境。
这个命令会打开一个图形界面,可以在其中选择需要的功能、驱动程序和选项。
根据目标平台的硬件特性和需求,选择适当的选项。
5. 修改配置文件:UBOOT 需要一个配置文件(通常是`include/configs/<target.h>`),在这个文件中需要将目标平台的硬件配置信息填入。
这些信息包括芯片型号、Flash 存储器地址等。
还需要设置启动参数,如内核地址、根文件系统地址等。
6. 编译 UBOOT:运行 `make` 命令来编译 UBOOT。
根据配置和硬件平台的不同,可能需要选择不同的编译选项。
编译过程会生成一个 UBOOT 头文件(u-boot.bin)和其他必要的文件。
7.将UBOOT烧录到目标平台:使用烧录工具(如JTAG烧录器、USB烧录器或者SD卡等)将编译好的UBOOT烧录到目标平台的存储设备中。
具体的烧录方法和工具依赖于目标平台的配置。
8.测试和调试:将烧录好的UBOOT安装到目标平台后,通过串口或者网络连接到目标平台,使用终端工具进行测试和调试。
可以通过串口输出来查看启动过程中的日志和错误信息,或者使用调试工具来分析程序执行的问题。
9.优化和定制:根据需求对UBOOT进行优化和定制。
可以修改配置文件、增加功能模块或者修改代码,以达到更好的性能和适应特定需求的目的。
5 u-boot的使用
u-boot的命令
SD/EMMC操作命令
mmc write addr blk# cnt 将内存addr中的数据写入到起始块为blk#、大小为cnt
块中。
u-boot的命令
usb操作命令
usb start -usb reset -usb stop -usb info --
启动并扫描USB控制器 重置 停止 查看信息
从SD卡烧写u-boot到emmc的命令序列
resetenv
擦除环境变量保存的位置,让环境变量恢复 默认
u-boot的环境变量
设置环境变量
格式:setenv 变量名 变量值 注意,变量名与变量值之间没有“=”号;如果变量值是一个很长的字 符串,可以用双引号引起来。 例如:
▶setenv serverip 192.168.1.88 ▶setenv myval “help my val”
usbethaddr 开发板网口的mac地址
Байду номын сангаас
gatewayip 网关
netmask子网掩码
ipaddr
开发板网口的ip地址
serverip 服务器的ip地址(ubuntu虚拟机)
u-boot的环境变量
各个环境变量的含义:
nfsboot从网络共享挂载根文件系统的启动命令序列
wruboot2emmc
介。 u-boot通过环境变量来保存一些参数,有了环境
变量,用户可以进行更复杂的设置。
思考题
u-boot通过命令和环境变量来使用,如何设置环 境变量,修改环境变量的值,保存环境变量?
在u-boot中,传输文件的命令有什么?
u-boot的使用
u-boot的启动信息分析 u-boot的命令行
uboot学习之uboot启动流程简述
uboot学习之uboot启动流程简述⼀、uboot启动分为了三个阶段BL0、BL1、BL2;BL0表⽰上电后运⾏ROM中固化的⼀段程序,其中ROM中的程序是⼚家写进去的,所以具体功能可能根据⼚家芯⽚⽽有所不同。
功能如下:1. 初始化系统时钟、特殊设备的控制器、启动设备、看门狗、堆栈、SRAM等硬件;2. 验证B1镜像,并且加载BL1镜像到SRAM中,然后跳转到BL1镜像的地址上。
BL0需要将BL1加载到对应的RAM上,这就涉及到它的启动模式,详细如下:1.OneNand Boot模式要了解OneNAND先得了解NOR Flash和NAND Flash。
与NOR Flash相⽐,NAND Flash的读数据速度稍慢,但是擦写速度快得多,并且在容量、使⽤寿命、成本上也占有较⼤优势。
NOR Flash的编程简单,⽽NAND Flash的编程较为复杂(因为它的flash管理需要特殊的接⼝)。
NAND Flash⼀般⽤于存储数据,⽽NOR Flash⼀般⽤于存储启动代码。
NOR Flash带有SRAM接⼝,有⾜够的地址引脚来寻址,可以很容易地存取其内容的每⼀字节(有限的地址引脚是限制其容量的因素之⼀)。
NAND Flash使⽤复杂的I/O⼝来串⾏地存取数据,各个产品或⼚商的⽅法可能各不相同。
为了弥补NAND Flash的不⾜,三星公司在NAND Flash芯⽚内集成了⼀个RAM接⼝,命名为OneNAND Flash,这类Flash拥有与NOR Flash相同的简单接⼝,⽽且不受地址引脚的限制,即容量与地址引脚⽆关。
其实OneNAND 其实就是采⽤了NOR的接⼝,NAND的架构,是两者的性能得到了综合。
这就有了X-LOADER的产⽣,以前我们接触到的都是BOOTLOADER,其实这个X-LOADER也起到初始化的作⽤,因为我们的BOOTLOADER是放在NAND的架构下的,⽽CPU却是从NOR的接⼝下读取BOOTLOADER到SDRAM中的,所以现在要做⼀个⼯作就是要如何将BOOTLOADER在OneNAND的架构下从NAND复制到SDRAM中,这就是X-LOADER的功能了,它不仅初始化OneNAND,并且把U-BOOT从NAND的架构下复制到BufferRam中,再复制到SDRAM中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。
它是在操作系统内核启动之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
现在主流的bootloader有U-BOOT、vivi、Eboot等。
本次作业先做Uboot的烧写吧。
希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。
首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Li nux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot 的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOAD ER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
选择U-Boot的理由:①开放源码;②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, AR TOS, LynxOS;③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;④较高的可靠性和稳定性;④较高的可靠性和稳定性;⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEP ROM、RTC、键盘等;⑦较为丰富的开发调试文档与强大的网络技术支持;2 U-Boot主要目录结构* board 目标板相关文件,主要包含SDRAM、FLASH驱动;* common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;* cpu 与处理器相关的文件。
如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;* driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)* doc U-Boot的说明文档;* examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;* include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;* lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、A RM体系结构相关的文件;* net 与网络功能相关的文件目录,如bootp,nfs,tftp;* post 上电自检文件目录。
尚有待于进一步完善;* rtc RTC驱动程序;* tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;3 U-Boot支持的主要功能U-Boot可支持的主要功能列表* 系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统* 支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;* 基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤* Linux支持最为强劲;* 支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;* CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;* 设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、U SB、PCMCIA、PCI、RTC等驱动支持;* 上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;* 特殊功能XIP内核引导;好,基础知识了解了,就可以进行Uboot下载了。
主机环境:虚拟机V6.5/ redhat9.0移植平台:飞凌ARM9 FL2440开发板Uboot 版本:1.3.4交叉编译器:arm-linux-gcc-3.3.2烧录工具:H-JTAG1:烧写uboot.bina:开发板链接好串口线,以及jtag 线。
打开h-jtag 软件,检测cpu:图1图2点击check,检测flash 图3B:点击program,当显示successful 即烧写成功C:开发板重新上电会有如下输出:图4此时可以使用一些uboot 常用命令,如setenv、printenv、tftp setenv、nand read/writ注:第一下次启动的时候会出现警告关于bad crc,只要保存了环境变量就不会处警告了d:配置虚拟机的tftp一般默认情况是没有安装tftp 的,安装包位于安装包中,一般在第三张光盘中“tftp-0.32-4.i386.rpm”、”tftp-server-0.32-4.i386.rpm”将这两个包拷贝到虚拟机上,安装命令如下:#rpm -ivh tftp-server-0.32-4.i386.rpm#rpm -ivh tftp-0.32-4.i386.rpm (这个包是客户端登陆tftp 服务器所需要的)安装完毕之后进入/etc 下,打开tftp 服务的配置文件并进行修改:#emacs xinedt.d/tftp将该文件修改成如下:service tftp{ socket_type =dgramprotocol =udpwait=yesuser =rootserver =/usr/sbin/in.tftpdserver_args =-s /home/work/tftpboot –c //可以换成其他路径disable =noper_source =11cps =100 2flags =IPv4}保存退出然后重新开启tftp 服务#service xinetd restart //这样,tftp-server 就启动了。
你可以用查询命令看tftp 服务是否开启#netstat -a | grep tftp显示结果为udp 0 0 *:tftp *:*表明服务已经开启你可以登陆本机测试以下,命令如下:#tftp your-ip-addresstftp>puttftp>q这样你就在linux 下建立了tftp 服务器,u-boot 可以直接登录到你的主机上了,不用再切换到windows 下用tftpd32.exe 来建立服务器了。
e:下载linux 内核首先要将linux 的内核zImage 转换成uboot 可以引导的格式。
将zImage 拷贝到xx/uboot-1.3.4/tools 下运行如下命令#mkimage -n …linux-2.6.12′-A arm -O linux -T kernel -C none -a 30008 000 -e 30008000 -d zImage zImage.img然后将生成的zImage.img 拷贝到tftp 所指定的路径下#cp zImage.img /home/work/tftpboot修改uboot ip 信息#setenv ipaddr 192.168.0.235 (开发板uboot IP)# setenv serverip 192.168.0.245 (虚拟机IP)#saveenv (保存环境变量)在uboot 命令行上输入如下命令:#tftp 0x30200000 zImage.img 该命令将内核从虚拟机下载到开发板内存,0x30200000 起始为起始地址。
图5图6图7此时用bootm 就可以测试一下引导内核图8f:文件系统Yaffs 文件系统没有做到很好的支持,现在只能起网络文件系统首先将光盘上的文件系统qte_yaffs.tar.bz2 解压到虚拟机/home/work/tftpboot 文件夹下,作为开发板linux 的根目录。
开发板上设置启动网络文件系统的环境变量#setenv bootargs init=/linuxrc root=/dev/nfsnfsroot=192.168.0.245:/home/work/tftpboot/qte_yaffsip=192.168.0.235:192.168.0.245:192.168.0.201:255.255.255.0console=ttySAC0 115200 display=sam320 (上面不是回车,是段落对齐引起的) 图9设置从自启动linux 命令:#setenv bootcmd nand read 0x30200000 0x500000 0x300000\;bootm 0x30200000#saveenv (保存环境变量)开发板断电重启,如下图:图10至此linux 系统就已经启动了备注1.将/u-boot-1.3.4/board/fl2440/config.mk文件的最后一行TEXT_BASE = 0x33f80000,修改为TEXT_BASE = 0x33f80002.本文部分内容来自百度百科及飞凌嵌入式技术专区:。