2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)
- 格式:doc
- 大小:988.00 KB
- 文档页数:18
第一部分根据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 调式方法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(详细)文章出处:/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中烧录方法
在嵌入式系统开发中,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参数设置)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上的移植(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)使⽤⽅法: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⽆法正常运⾏。
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开发板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烧写即可。
凌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.本文部分内容来自百度百科及飞凌嵌入式技术专区:。