文档库 最新最全的文档下载
当前位置:文档库 › 编程器固件、uboot、fullflash

编程器固件、uboot、fullflash

编程器固件、uboot、fullflash
编程器固件、uboot、fullflash

编程器固件、uboot、fullflash

root@DD-WRT:~# cat /proc/mtd

dev: size erasesize name

mtd0: 00020000 00010000 "RedBoot"

mtd1: 007c0000 00010000 "linux"

mtd2: 00270000 00010000 "rootfs"

mtd3: 00410000 00010000 "ddwrt"

mtd4: 00010000 00010000 "nvram"

mtd5: 00010000 00010000 "board_config"

mtd6: 00800000 00010000 "fullflash"

mtd7: 00020000 00010000 "fullboot"

root@DD-WRT:~#

DDWRT备份成编程器固件命令(前提是有fullash分区)

root@DD-WRT:~# dd if=/dev/mtd6 of=/tmp/741_fullflash.bin

16384+0 records in

16384+0 records out

root@DD-WRT:~#

刷成编程器固件命令(前提是有fullash分区)

root@DD-WRT:~# mtd -r write fullflash /tmp/741_fullflash.bin 16384+0 records in

16384+0 records out

root@DD-WRT:~#

编程openwrt固件时修改mach-tl-mr3x20.c(对应3420)增加一个fullash

}, {

.name = "fullflash",

.offset = 0,

.size = 0x800000,

.mask_flags = MTD_WRITEABLE,

}

.size = 0x800000, 这个是flash大小8M

去掉 .mask_flags = MTD_WRITEABLE,是分区可以写,否者只可读

编程器固件包含uboot+内核固件+art/board_config (适用于ar 3240固件等)

一、准备uboot、内核固件(firmware)、art/board_config

1、登录路由

2、切换到tmp目录,

3、使用dd命令备份uboot、firmware、art/board_config,

4、使用cat命令将文件合并,假设新文件名为xxx.bin

5、使用WinSCP将文件复制到电脑

root@OpenWrt:~# cd /tmp

root@OpenWrt:/tmp# cat /proc/mtd

dev: size erasesize name

mtd0: 00020000 00010000 "u-boot"

mtd1: 00140000 00010000 "kernel"

mtd2: 00690000 00010000 "rootfs"

mtd3: 00460000 00010000 "rootfs_data"

mtd4: 00010000 00010000 "art"

mtd5: 007d0000 00010000 "firmware"

root@OpenWrt:/tmp# dd if=/dev/mtd0 of=uboot.bin

root@OpenWrt:/tmp# dd if=/dev/mtd5 of=firmware.bin

root@OpenWrt:/tmp# dd if=/dev/mtd4 of=art.bin

root@OpenWrt:/tmp# cat uboot.bin firmware.bin art.bin > fullflash.bin 相当于windows下 copy /b 1.txt+2.txt 3.txt

区分固件是否带uboot 用Uedit32打开固件

这个是有uboot的

这个是有没有uboot的的openwrt固件

去掉固件的uboot (也就是删除固件前成128k数据) 这个是有uboot的

128K*1024 =131072

固件加uboot

copy /b uboot.bin+固件.bin 新固件.bin

uboot下刷机

打开tftpd32 把固件放tftpd32设置的目录下打开SecureCRT 波特率115200

这是7240 uboot下刷4M的固件

ar7240> printenv

ar7240> setenv ipaddr 192.168.1.2

ar7240> setenv serverip 192.168.1.100

ar7240> tftpboot 0x80000000 150r.bin

ar7240> erase 0x9f000000 +0x3fffff

ar7240> cp.b 0x80000000 0x9f000000 0x3fffff ar7240> bootm

ubnt uboot刷机

tftpboot 0x80000000 1508m.bin

erase 0xbf000000 +0x3fffff

cp.b 0x80000000 0xbf000000 0x3fffff

bootm

普通的uboot 和 ubnt的uboot的刷机都搞定了

普通的uboot一个是 0x9f000000开始

,ubnt是 0xbf000000开始

UBOOT命令详解

常用U-boot命令详解(z) 2010-09-30 15:05:52| 分类:学习心得体会|字号订阅 U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的 U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [u-boot@MINI2440]# version U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# v U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# base Base Address: 0x00000000 [u-boot@MINI2440]# ba Base Address: 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或? 功能:查看当前U-boot版本中支持的所有命令。 [u-boot@MINI2440]#help ?- alias for'help' askenv - get environment variables from stdin base - print or set address offset bdinfo - print Board Info structure bmp - manipulate BMP image data boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol

Tiny6410_Uboot移植步骤详解

Uboot_for_Tiny6410_移植步骤详解 一、设计要求 1.目的 1)掌握U-boot剪裁编写 2)掌握交叉编译环境的配置 3)掌握U-boot的移植 2.实现的功能 1)U-boot编译成功 2)移植U-boot,使系统支持从NAND FLASH启动 二、设计方案 1.硬件资源 1)ARM处理器:ARM11芯片(Samsung S3C6410A),基于ARM1176JZF-S核设 计,运行频率533Mhz,最高可达 667Mhz 2)存储器:128M DDR RAM,可升级至 256M;MLC NAND Flash(2GB) 3)其他资源:具有三LCD接口、4线电阻 触摸屏接口、100M标准网络接口、标准DB9 五线串口、Mini USB2.0接口、USB Host 1.1、3.5mm音频输入输出口、标准TV-OUT

接口、SD卡座、红外接收等常用接口;另外 还引出4路TTL串口,另1路TV-OUT、 SDIO2接口(可接SD WiFi)接口等;在板的 还有蜂鸣器、I2C-EEPROM、备份电池、A D 可调电阻、8个中断式按键等。 2.软件资源 1)arm-linux-gcc-4.5.1(交叉编译) 2)u-boot-2010.09.tar.gz arm-linux-gcc-4.5.1-v6-vfp-20101103.t gz 三、移植过程 1.环境搭建 1)建立交叉编译环境 2)去这2个网站随便下载都可以下载得到最 新或者你想要的u-boot。( https://www.wendangku.net/doc/433231301.html,/batch.viewl ink.php?itemid=1694 ftp://ftp.denx.de/pub/u-boot/ )

uboot下载内核和文件系统的步骤

uboot 下载内核和文件系统的步骤 1)下载linux到系统的SDRAM运行(仅做测试之用,断电或退出后就会消失) 1>运行Uboot,设置环境变量 Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 启动系统环境变量 Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址 Uboot>setenv ipaddr [目标板 ip 地址] 目标板 ip 地址 Uboot>setenv serverip [主机 ip 地址] 主机 ip 地址 2>下载linux内核,文件系统 打开tftpserver应用程序,设置根目录路径,将内核、文件系统等拷贝到所设置的根目录下。 Uboot>tftp 21100000 ramdisk.gz 下载文件系统 Uboot>tftp 21000000 uImage 下载 linux 内核 Uboot>bootm 21000000 启动 linux 然后linux操作系统就开始运行。 2)烧写 Linux 到系统的 Flash 运行 1>设置运行Linux的环境变量 Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv image cp.b 10020000 21000000 b0000 拷贝内核到sdram Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷贝文件系统到sdram Uboot>setenv boot bootm 设置变量boot Uboot>setenv bootcmd run ramdisk\;run image\;run boot 设置默认变量bootcmd Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址 Uboot>setenv ipaddr 目标板 ip 地址目标板 ip 地址,由你自己决定Uboot>setenv serverip 主机ip地址主机ip地址,就是你的PC的ip Uboot>saveenv 保存环境变量 2>烧写Linux内核到Flash Uboot>tftp 21100000 ramdisk.gz Uboot>cp.b 21100000 100d0000 226000

UBoot移植详解

u-boot 移植步骤详解 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux 系统的引导,当前,它还支持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系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择U-Boot的理由: ①开放源码; ②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④较高的可靠性和稳定性; ④较高的可靠性和稳定性; ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦较为丰富的开发调试文档与强大的网络技术支持; 2 U-Boot主要目录结构 - board 目标板相关文件,主要包含SDRAM、FLASH驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本) ?开发平台:i.MX 6UL ?最新系统: u-boot2015.04 + Linux4.1.15_1.2.0 ?交叉编译工具:dchip-linaro-toolchain.tar.bz2 源码下载地址: U-Boot: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.wendangku.net/doc/433231301.html,/git/cgit.cgi/imx/uboot-imx.git/ Kernel: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.wendangku.net/doc/433231301.html,/git/cgit.cgi/imx/linux-2.6-imx.git/ 源码移植过程: 1、将linux内核及uBoot源码拷贝到Ubuntu12.04系统中的dchip_imx6ul目录下; 2、使用tar命令分别将uboot和kernel解压到dchip_imx6ul目录下; 3、解压后进入uboot目录下,新建文件make_dchip_imx6ul_uboot201504.sh,且文件内容如下: ################################################################### # Build U-Boot.2015.04 For D518--i.MX6UL By FRESXC # ################################################################### #!/bin/bash export ARCH=arm export CROSS_COMPILE=/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi - make mrproper # means CLEAN make mx6ul_14x14_evk_defconfig make2>&1|tee built_dchip_imx6ul_uboot201504.out 4进入kernel目录下,新建文件make_dchip_imx6ul_linux4115120.sh,且文件内容如下: ###################################################################

【免费下载】am335x uboot移植

AM335x uboot 移植 2013-06-11 22:36:39| 分类:am335x-艾默生 | 标签:uboot am335x 移植|举报|字号订阅 uBOOT的编译命令 直接一次性编译 make O=am335x CROSS_COMPILE=arm-arago-linux-gnueabi ARCH=arm am335x_evm 配置 make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- am335x_evm_config 编译 make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-清理 make clean ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-make distclean ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-编译器环境变量的设置 这个环境变量是TI的SDK包里面带的编译器,不是之前的arm-gcc-export PATH=$PATH:/mnt/disk1/ti-sdk-am335x-evm-05.05.00.00/linux-devkit/bin/ UBOOT里面的MLO(u-boot-spl) 如果使用NAND启动,那么这个文件就是相当于NBOOT,进行第一次的引导 这个MLO实际上就是u-boot-spl.bin生成的, 在编译完uboot后,SPL的目录里面会产生了许多的.o文件,这里文件就是uboot的文件, 可以打开Makefile,有一些对应的宏定义,可以取消,减少MLO文件的大小 UBOOT的链接脚本lds UBOOT\arch\arm\cpu\armv7\u-boot.lds 正常运行UBOOT的lds UBOOT\arch\arm\cpu\armv7\omap-common\u-boot.lds 这个是nboot,加载uboot用 有2个lds,不同的作用,注意要区别开 增加新的单板支持 在boards.cfg文件中,找到加入,例如 单板名字 arm armv7 对应board的目录 ti ti81xx 以后就可以执行make 单板名字来生成uboot,这里被ti改写了,所以不是原版的uboot 生成方法 一些代码的定位 u-boot-2011.09-psp04.06.00.08/arch/arm/cpu/armv7 这个目录下的几个文件,start.s这个是程序的入口执行文件 u-boot-2011.09-psp04.06.00.08/arch/arm/cpu/armv7/omap-common u-boot-2011.09-psp04.06.00.08/arch/arm/cpu/armv7/ti81xx 这2个目录是和平台板子相关,AM335X是ti81xx的版本 以上都是和CPU有关 u-boot-2011.09-psp04.06.00.08/arch/lib ARM平台的公用代码 u-boot-2011.09-psp04.06.00.08/lib 通用的库代码,无论什么平台都编译 board/ti/xxx 这个目录就是单板的配置

uboot移植步骤介绍

uboot移植过程 1.修改Makefile 首先给要建立的S3C2410开发板取名为TE2410, 移植uboot时以smdk2410为模板, 修改Makefile #tar xvjf u-boot-1.1.3.tar.bz2 #cd u-boot-1.1.3 #vi Makefile scb9328_config : unconfig @./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx smdk2400_config : unconfig @./mkconfig $(@:_config=) arm arm920t smdk2400 NULL s3c24x0 smdk2410_config : unconfig @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 SX1_config : unconfig @./mkconfig $(@:_config=) arm arm925t sx1 te2410_config : unconfig @./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0 蓝色字体是添加的内容。其中,te2410_config : unconfig意思是为TE2410建立一个编译项,@./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0中的arm表示CPU的架构是基于ARM体系结构的;arm920t表示CPU类型是arm920t;te2410是开发板的型号;NULL表示开发商或经销商的名称为空;s3c24x0表示是基于s3c24x0的片上系统。 2.在uboot的board目录下建立te2410开发板子目录 #cp –fr board/smdk2410 /board/te2410 #cd board/te2410 #mv smdk2410.c te2410.c 还要修改board/te2410/Makefile文件, OBJS := smdk2410.o flash.o -------- OBJS := te2410.o flash.o 3.在include/configs目录下建立te2410.h头文件 #cd include/configs #cp –fr smdk2410.h te2410.h 4.指定交叉编译器的路径 选择支持softfloatpoint的交叉编译器,在etc/bashrc文件中添加一行 export PATH=/home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linu x-gnu/bin:$PATH 其中, /home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu /bin是交叉编译器路径

ZLG IMX280A - 五步曲之三:uboot2017.09移植(下篇)

csv M X28_DDR2_regis…1.xlsx 101.25KB 16100: 1*16 32200: 2*32 16400: 4*16 16800: 8*16 32400: 4*32 16160: 16*16

表格信息: *上面需要准确填写的是行列地址总线宽度,bank数,CS数,数据总线宽度,时钟频率。

*tFAW不小于tRRD4倍,所以设置40ns。 *tRPA:如果数据手册不能找到tRPA,那么这么位置填入tRP。 *CASLAT:设置CAS LATCH周期,这个周期在ddr初始化时由ddr控制器对ddr设置。 *根据信号线计算ram大小,如下2 ^ (1cs + 3bank + 15row + 12col + 1datapath width) = 4GB: 2、下载源码与建立baseline: 2.1 源码下载略。 2.2 选择一个相近的平台,编写试编译通过: ./setenv.sh make mx28evk_defconfig

make u-boot.sb *这里的sb文件是加密文件,而elftosb工具生成的可以通过-z参数选择是否加密。*如果编译器是32位,但是系统是64位,那么安装32位兼容库即可: sudo apt install libc6-dev-i386 lib32z1 2.3 复制文件与修改配置: cp configs/mx28evk_defconfig configs/imx280a_defconfig cp configs/mx28evk_defconfig configs/imx280a_mmc_defconfig mkdir board/zlg/ && cp -rf board/freescale/mx28evk/ board/zlg/imx280a/ mv board/zlg/imx280a/mx28evk.c board/zlg/imx280a/imx280a.c vim board/zlg/imx280a/Kconfig vim board/zlg/imx280a/Makefile cp include/configs/mx28evk.h include/configs/imx280a.h vim include/configs/imx280a.h *vim ./arch/arm/include/asm/mach-types.h *从mx28手册可以得到内存起始物理地址:

uboot移植实验

一、移植环境 ?主机:UBUNTU ?开发板:飞凌2440 ?编译器:arm-linux-gcc-4.3.2.tgz ?u-boot:u-boot-2009.03.tar.bz2

3)修改u-boot根目录下的Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立mini2440_config的编译选项,另外还要指定交叉编译器 4)测试编译新建的mini2440开发板项目

到此为止,u-boot对自己的mini2440开发板还没有任何用处,以上的移植只是搭建了一个mini2440开发板u-boot的框架,要使其功能实现,还要根据mini2440开发板的具体资源情况来对u-boot源码进行修改。 3. 根据u-boot启动流程图的步骤来分析或者修改添加u-boot源码,使之适合mini2440开发板(注:修改或添加的地方都用红色表示)。 1)mini2440开发板u-boot的stage1入口点分析。 一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。那么我们的my2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:

知道了程序的入口点是_start,那么我们就打开mini2440开发板u-boot第一个要运行的程序cpu/arm920t/start.S(即u-boot的stage1部分),查找到_start的位置如下: 从这个汇编代码可以看到程序又跳转到start_code处开始执行,那么再查找到start_code 处的代码如下:

UBoot实验2、uboot使用实验

Uboot的使用 一、 实验目的 在实验平台上使用uboot常用命令及使用Tftp工具传输文件。 二、 实验资源 硬件资源 CPU Samsung S3C2440A Nand flash Samsung K9D1208V0M 64M RAM64M 软件资源 bootloader uboot Tftp server tftpd32.exe 三、 实验前的准备 1、一台PC机。 2、实验平台。 3、串口线、网络线。 4、tftpd32.exe软件。 四、 实验步骤 1、实验前的准备 a)将串口线、网络线连接到实验平台与PC机上。 b)在PC机上运行超级终端串口软件。

2、进入Uboot命令输出状态 实验平台上电,在超级终端串口软件中按空格键进入Uboot命令输出状态。 3、查看Uboot命令 运行help命令显示uboot提供的所有命令。

4、学习U-Boot的几个常用的命令 根据每一条命令的帮助信息,说明这些命令的功能、参数和用法。 z bootm => help bootm bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...'; when booting a Linux kernel, 'arg' can be the address of an initrd image bootm 命令可以引导启动存储在内存中的程序映像。这些内存包括RAM 和可以永久保存的Flash。 第1 个参数addr 是程序映像的地址,这个程序映像必须转换成U-Boot 的格式。 第2 个参数对于引导Linux 内核有用,通常作为U-Boot 格式的RAMDISK 映像存储地址;也可以是传递给Linux内核的参数(缺省情况下传递bootargs环境变量给内核)。 例如: ——从内存地址0x300000启动 0x300000 bootm z cp => help cp cp [.b, .w, .l] source target count - copy memory cp命令可以在内存中复制数据块,包括对Flash的读写操作。 第1 个参数source是要复制的数据块起始地址。 第2 个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot 写Flash就使用这个命令,当然需要先把对应Flash区域擦干净。 第3 个参数count是要复制的数目,根据cp.b cp.w cp.l分别以字节、字、长字为单位。 例如: cp.b 0x300000 0xFE040000 0x180000将1.5M数据从内存拷到flash 0xFE040000位

嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一) 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux 的朋友提供方便。如有错误之处,谢请指正。 ?共享资源,欢迎转载:https://www.wendangku.net/doc/433231301.html, 一、移植环境 ?主机:VMWare--Fedora 9 ?开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 ?编译器:arm-linux-gcc-4.3.2.tgz ?u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 本次移植的功能特点包括: ?支持Nand Flash读写 ?支持从Nor/Nand Flash启动 ?支持CS8900或者DM9000网卡 ?支持Yaffs文件系统 ?支持USB下载(还未实现) 1.了解u-boot主要的目录结构和启动流程,如下图。

u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。各个部分的流程图如下:

2. 建立自己的开发板项目并测试编译。 目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM 处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。 1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫my2440 2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改

uboot环境变量设置(大地小神之个人收藏)

u-boot的环境变量 u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot 自己定义的,更改这些名字会出现错误,下面的表中我们列出了一些常用的环境变量: 上面只是一些最基本的环境变量,请注意,板子里原本是没有环境变量的,u-boot的缺省情况下会有一些基本的环境变量,在你执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

U-boot的环境变量值得注意的有两个:bootcmd 和bootargs ◆b o o t c m d 前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。 ◆b o o t a r g s bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。bootargs的种类非常非常的多,我们平常只是使用了几种而已,感兴趣的可以看看这篇文章说的很全:https://www.wendangku.net/doc/433231301.html,/u2/79570/showart_1675071.html。bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法,甚至你也可以不设置bootargs,而直接将其写到内核中去(在配置内核的选项中可以进行这样的设置),正是这些原因导致了bootargs使用上的困难。 下面介绍一下bootargs常用参数,bootargs的种类非常的多,而且随着kernel的发展会出现一些新的参数,使得设置会更加灵活多样。 A.r o o t 用来指定r o o t f s的位置,常见的情况有: root=/dev/ram rw root=/dev/ram0 rw 请注意上面的这两种设置情况是通用的,我做过测试甚至

uboot移植笔记

u-boot-2015-01移植笔记 一、修改编译器路径 修改顶层Makefile文件,查找CROSS_COMPILE =,注释掉if判断,增加一行CROSS_CMPILE = arm-linux- (根据编译器不同这个自行添加,在这里感谢胡茂晓同学)。 二、复制平台相近board 1、进入board子目录下的samsung子目录,复制trats2文件夹为自己平台名字的文件夹(这里笔者使用iTop4412)。 2、进入iTop4412子目录,修改为。 3、修改Makefile,将trats2改为iTop4412。 三、修改板子相应配置 1、从源码根目录下进入include/configs目录,复制为。 2、从源码根目录下进入configs目录,复制trats2_defconfig为iTop4412_defconfig。 3、修改iTop4412_defconfig,将CONFIG_DEFAULT_DEVICE_TREE="exynos4412-trats2"改为CONFIG_DEFAULT_DEVICE_TREE="exynos4412-iTop4412"。

四、增加自己的Device Tree Source 1、从源码根目录下进入arch/arm/Dts目录,复制 exynos4412- 。 2、修改当前目录下的Makefile文件,将 dtb-$(CONFIG_EXYNOS4) += \ \ \ \ \ 修改成 dtb-$(CONFIG_EXYNOS4) += \ \ \ \ \ \

五、制作顶层.config文件 1、在源码根目录下使用命令make menuconfig(貌似刚支持图形界面配置)。 2、先配置基本的,Architecture select 选项选择ARM architecture,architecture选项的子选项Target select选择Samsun EXYNOS;EXYNOS board select选项选择Exynos4412 Trat2 board。 3、在Device Tree Control选项下,y(yes)Run-time configuration via Device Tree,选择Provider of DTB for control 为Embedded DTB for DT control,在Default Device Tree for DT control选项下输入exynos4412-iTop4412,退出。 4、保存退出,在源码根目录下会生成.config文件,需要用命令ls –a 查看。 5、在源码根目录下使用命令vim .config,修改.config文件。将CONFIG_SYS_BOARD="trats2" 修改成CONFIG_SYS_BOARD="iTop4412";将CONFIG_SYS_CONFIG_NAME="trats2"修改成CONFIG_SYS_CONFIG_NAME="iTop4412";将CONFIG_DEFAULT_DEVICE_TREE=""修改成CONFIG_DEFAULT_DEVICE_TREE="exynos4412-iTop4412"。(注意:每次使用make menuconfig后都要修改本条)

uboot环境变量总结

Common目录下面与环境变量有关的文件有以下几个:env_common.c,env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c,env_nowhere.c,env_nvram.c,environment.c。 env_common.c中包含的是default_environment[]的定义; env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c, env_nvram.c 中包含的是相应存储器与环境变量有关的函数:env_init(void),saveenv(void),env_relocate_spec (void),env_relocate_spec (void),use_default()。至于env_nowhere.c,因为我们没有定义CFG_ENV_IS_NOWHERE,所以这个文件实际上没有用。 environment.c这个文件时是我真正理解环境变量的一个关键。在这个文件里定义了一个完整的环境变量的结构体,即包含了这两个ENV_CRC(用于CRC校验),Flags(标志有没有环境变量的备份,根据CFG_REDUNDAND_ENVIRONMENT这个宏定义判断)。定义这个环境变量结构体的时候还有一个非常重要的关键字: __PPCENV__,而__PPCENV__在该.c文件中好像说是gnu c编译器的属性,如下: # define __PPCENV__ __attribute__ ((section(".text"))) 意思是把这个环境变量表作为代码段,所以在编译完UBOOT后,UBOOT的代码段就会有环境变量表。当然,这要在我们定义了ENV_IS_EMBEDDED之后才行,具体而言,环境变量表会在以下几个地方出现(以nand flash为例): 1、UBOOT中的代码段(定义了ENV_IS_EMBEDDED), 2、UBOOT中的默认环 境变量, 3、紧接UBOOT(0x0 ~ 0x1ffff)后面:0x20000 ~ 0x3ffff 之间,包括备份的环境变量,我们读取,保存也是对这个区域(即参数区)进行的。3、SDRAM中的UBOOT中,包括代码段部分和默认部分,4、SDRAM中的melloc分配的内存空间中。 Environment.c代码如下: env_t environment __PPCENV__ = { ENV_CRC, /* CRC Sum */ #ifdef CFG_REDUNDAND_ENVIRONMENT 1, /* Flags: valid */ #endif { #if defined(CONFIG_BOOTARGS) "bootargs=" CONFIG_BOOTARGS "\0" #endif #if defined(CONFIG_BOOTCOMMAND) "bootcmd=" CONFIG_BOOTCOMMAND "\0" #endif #if defined(CONFIG_RAMBOOTCOMMAND) "ramboot=" CONFIG_RAMBOOTCOMMAND "\0"

UBOOT分析移植

ARM 平台下的U-boot 移植 u-boot 移植 嵌入式BootLoader 的引导过程 图 1-1给出了嵌入式系统中的一般的引导过程,一般来说,引导程序都是保存在非易失的存储介质(如Flash 等)中,因为引导程序运行的时候需要对数据进行读写操作,所以引导程序的RW 段必须放到RAM 中,所以一般的引导程序初始化的第一件事情就是要在初始化完内存控制器后将其RW 段拷贝到RAM 中,同时开辟一段内存用于其ZI 段。如果引导过程是放置在不可原位执行的存储介质,如NAND Flash 上的时候,引导程序还必须将其自身也拷贝到RAM 中。 一般来说大概的步骤可以分为两个步骤: Stage1 ? 硬件设备初始化(内存控制器的设置); ? 为加载BootLoader 的stage2部分的代码准备RAM 空间; ? 拷贝BootLoader 的stage2部分的代码到RAM 空间中,并跳转执行; ? 设置好堆栈,Heap 等; ? 跳转到 stage2 的 C 入口点; Stage2 ? 初始化本阶段要使用到的硬件设备(net ,flash 等); ? 将OS 映像从 flash 上读到 RAM 空间中; ? 为OS 设置启动参数; ? 跳转到OS 内核image 的入口点。 图1-1 嵌入式系统引导

u-boot简介 U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch 的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot 和ARMboot停止维护。 U-Boot支持的处理器构架包括PowerPC(MPC5xx, MPC8xx, MPC82xx, MPC7xx,MPC74xx, 4xx), ARM(ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等,U-Boot (Universal Bootloader)是在GPL下资源代码最完整的一个通用Boot Loader。 U-Boot提供两种操作模式:启动加载(Boot loading)模式和下载(Downloading)模式,并具有大型Boot Loader的全部功能。主要特性为: ●SCC/FEC以太网支持 ●BOOTP/TFTP引导 ●IP,MAC预置功能 ●在线读写FLASH,DOC, IDE,IIC,EEROM,RTC ●支持串行口kermit,S-record下载代码 ●识别二进制、ELF32、pImage格式的Image,对Linux引导有特别的支持 ●监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等 ●脚本语言支持(类似BASH脚本) ●支持WatchDog,LCD logo,状态指示功能等 U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便。 u-boot的目录树结构 1.1.1 Borad目录 包括大量的Board dependent files的代码文件,每一个开发板都以一个子目录出现在当前目录中,每个board目录下至少包括这样几个文件 1.config.mk:其中至少包括TEXT_BASE这个一个Makefile的变量,这个变量指出了被编译的可执行uboot image应该放在RAM中的位置,也就是该image的执行位置;2.flash.c:这里主要还是对NorFlash的操作,flash的基本操作; 3.lowlevel_init.S:提供lowlevel_init函数供u-boot在第一阶段调用,一般是针对SDRAM 控制器的初始化,如设置SDRAM的刷新率,等待时钟等,一般来说,如果需要将第二阶段代码和数据拷贝到SDRAM中,这个操作是必须的; 4.Makefile:编译board目录下的代码所使用的makefile; 5.board.c:和板级相关的初始化函数,如设置GPIO,设置时钟,设置总线时序等;6.u-boot.lds:针对开发板的情况编写的连接脚本,通过连接脚本,一般应该将u-boot的stage1的代码放在image的开始的地方; 1.1.2Common目录 该目录下实现uboot支持的命令和公用函数,每一条命令都对应一个文件。例如bootm 命令对应就是cmd_bootm.c。

u_boot初始化流程

U-Boot启动代码分析 U-boot的启动顺序分为stage1和stage2两部分,见下图。依赖于CPU体系结构的代码(如设备初始化代码等)通常放在stage1中用汇编语言实现,而在stage2则通常由C语言实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。以下主要梳理了stage2阶段函数的调用顺序以及每个函数的功能。 U-boot的启动顺序 C语言代码部分lib_arm/board.c中的start_armboot既是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个U-boot的主函数,该函数只要完成如下操作。 (1)调用一系列的初始化函数。 (2)初始化Flash设备。 (3)初始化系统内存分配函数 (4)如果目标系统拥有NAND设备,则初始化NAND设备 (5)如果目标系统有显示设备,则初始化该类设备。 (6)初始化相关网络设备,填写IP、MAC地址等。 (7)进入命令循环(即整个Boot的工作循环),接收用户从串口输入的命令,然后进行相应的工作。 下面结合源码分析函数调用顺序以及函功能: 代码: void start_armboot (void) { init_fnc_t **init_fnc_ptr; char *s; int mmc_exist = 0;

#if defined(CONFIG_VFD) || defined(CONFIG_LCD) unsigned long addr; #endif 注释:从U-boot stage1中start.s程序调到这里执行start_armboot函数,这一段代码进行了变量声明,其中定义了一个名为init_fnc_ptr的双重指针。如果CONFIG_VFD或者CONFIG_LCD被定义了则声明一无符号长整型变量addr,本开发板中没有定义无需声明addr。 代码: /* Pointer is writable since we allocated a register for it */ gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t)); /* compiler optimization barrier needed for GCC >= 3.4 */ __asm__ __volatile__("": : :"memory"); //内存屏障,告诉编译器内存被修改过了 memset ((void*)gd, 0, sizeof (gd_t)); gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); //指向gd之前 memset (gd->bd, 0, sizeof (bd_t)); // gd->flags |= GD_FLG_RELOC; monitor_flash_len = _bss_start - _armboot_start; //u-boot映像的大小其中_armboot_start为code start ,_bss_start为code + data end == BSS start. 注释: gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t));//内存强制转换,gd为全局环境变量,gd指向uboot之前的地址; memset ():void * memset(void * s,char c,size_t count)将指针s所指地址以及之后count个地址中数值赋值为c。memset ((void*)gd, 0, sizeof (gd_t))的作用为:gd整个地址的值初始化为0;memset (gd->bd, 0, sizeof (bd_t))的作用为bd地址的值初始化为0。 代码: for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { if ((*init_fnc_ptr)() != 0) { //相当于调用指针中的一个函数,如果不为0就表示死机 hang (); } } 注释:

相关文档