Ⅰ uboot编译
把-MQ的编译选项去掉试试
Ⅱ 怎么使用 UBOOT 来启动 rtems
在beagleboneblack上通过SD卡启动成功:
编译rtems代码,生成二进制文件app.exe
在ubuntu下安装u-boot-tools:
sudo apt-get installu-boot-tools
运行make_rtems_app.sh app.exe,生成rtems-app.img
在SD卡根目录新建 uEnv.txt文件
重新启动即可
make_rtems_app.sh 文件内容如下:
executable=$1
app=rtems-app.img
base=`basename$executable`
arm-rtems4.12-obj$executable-Obinary./$base.bin
gzip-9-f./$base.bin
mkimage-Aarm-Ortems-Tkernel-a0x80000000-e0x80000000-nRTEMS-d./$base.bin.gz./$app
rm./$base.bin.gz
uEnv.txt 文件内容如下:
bootcmd=fatloadmmc00x80800000rtems-app.img;bootm0x80800000
uenvcmd=boot
Ⅲ uboot是什么
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
选择U-Boot的理由:
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持。
Ⅳ ubuntu 编译uboot需要哪些工具,哎,新手,详细点哦,亲
1.首先安装基本编译环境:sudo apt-get install build-essential
2:先把交叉编译环境包放到你的共享目录,(我这里的版本是:arm-linux-gcc-4.4.3.tar.gz)
3:进行解压 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C (要解压的路径)
比如:tar zxvf arm-linux-gcc-4.4.3.tar.gz -C ~/ (root 用户的工作目录)
4:然后设置环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
5:要想系统启动自动加载环境变量:
1:普通用户:vim .bashrc 在最后添加你的环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
2:root用户:vim .bashrc 在最后添加你的环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
Ⅳ 如何编译am335x的uboot
AM335x上u-boot启动的过程是先加载spl,spl初始化DDR之后加载u-boot。AM335x内部SRAM能加载大概100kB的spl,但是为避免调试时候乱跑,u-boot需要用-O0编译,这样spl的大小会超过内部SRAM的大小,所以需要修改代码根目录的config.mk,把spl和u-bo...
Ⅵ 如何在UBOOT里添加启动画面
方法其实很简单,只需替换u-boot的tools/logos目录中的denx.bmp,再重新编译(可能需要先执行make clean,再make,新的图片
才会起作用),图片大小不要起过你的屏的大小,色彩深度不能大于256色,即8位色深的图片。
不过,如果你不想替换denx.bmp,而要用自已的图片文件,比如,我用的是rat-linux.bmp文件,也可以。把你的文件拷贝
到/tools/logos目录中,再修改/tools目录下的makefile文件,找到以下代码段
ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetix.bmp
endif
将其中的LOGO_BMP= logos/denx.bmp改为 LOGO_BMP= logos/rat-linux.bmp即可。重新编译,你的图片就可以起作用了。
Ⅶ 怎样弄uboot编译交叉编译工具,我的xp和ubuntu间有个共享文件夹,我把交叉工具放在那里,怎样把它安装
1:先把交叉编译环境包放到你的共享目录,(我这里的版本是:arm-linux-gcc-4.4.3.tar.gz)
2:进行解压 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C (要解压的路径)
比如:tar zxvf arm-linux-gcc-4.4.3.tar.gz -C ~/ (root 用户的工作目录)
3:然后设置环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
4:要想系统启动自动加载环境变量:
1:普通用户:vim .profile 在最后添加你的环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
2:root用户:vim .bashrc 在最后添加你的环境变量:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin
自此,交叉环境彻底搭建完毕。
注意:我的交叉编译包,解压出来的路径就是:opt/FriendlyARM/toolschain/4.4.3/bin
你的版本,可能有些不同
Ⅷ qt210开发板,uboot启动内核时卡在“boot with zImage”,不知道为什么重新编译内核和uboot还是不行
1,内核的ID和uboot中支持的ID一样吗
2,比特率设置是不是正确
Ⅸ 为什么在ubuntu编译下uboot时总是出错
1.U-boot的使用:
ubuntu下基本只能用
kermit协议,进行串口通信了:
loadb
Ctrl+\,再按c,切换到C-kermit的命令行模式:
send
<文件路径>,回车。
传送完毕后,输入c,回到U-boot串口界面。
若能和PC机ping成功,则可用tftp和nfs传输文件:
dhcp:使用
DHCP/TFTP 协议获取文件
rarpboot :使用 RARP/TFTP 协议获取文件
nfs:使用 NFS
协议获取文件
tftpboot :使用 TFTP 协议获取文件
bootp:使用 BOOTP/TFTP
协议获取文件
以上命令的格式都为:指令 [目的 SDRAM 地址] [[主机 IP:]文件名]
注意:
要使用 dhcp、rarpboot 或 bootp 要路由器或 Host
支持的这些协议和服务。
如果没有输入[目的SDRAM 地址],系统就是用编译时定义的CONFIG_SYS_LOAD_ADDR
在使用如果
tftpboot 和 nfs 命令没有定义[主机 IP:],则使用 ENV 中的 serverip
其它命令必需定义[主机 IP:],否则使用提供动态 IP 服务的主机
IP。
Nand Flash
操作指令:
nand info
nand device [dev]
nand read addr off size
nand
write addr off size
nand write[.yaffs[1]] addr off size
nand erase [clean]
[off size]
nand bad
nand mp[.oob] off
nand scrub
nand markbad
off
nboot loadAddr dev offset
内存/寄存器操作指令:
nm [.b, .w, .l]
address
mm [.b, .w, .l] address
md [.b, .w, .l] address [# of
objects]
mw [.b, .w, .l] address value [count]
cp [.b, .w, .l] source
target count
Nor Flash 指令:
flinfo
(N)
md
protect
cp
USB 操作指令:
usb reset
usb
stop [f]
usb tree
usb info [dev]
usb storage
usb dev [dev]
usb
part [dev]
usb read addr blk# cnt
SD 卡(MMC)指令:
mmc init
mmc
device
FAT 文件系统指令:
fatinfo <interface>
<dev[:part]>
fatload <interface> <dev[:part]> <addr>
<filename> [bytes]
fatls <interface> <dev[:part]>
[directory]
系统引导指令:
boot 和 bootd 都是运行
ENV”bootcmd”中指定的指令
bootm [addr [arg ...]]
run 运行一个 ENV
定义的命令脚本
reset 重启 CPU
使用 U-boot
将映像文件烧写到板上的 Flash,一般步骤是:
(1)通过网络、串口、U盘、SD卡等方式将文件传输到SDRAM;
(2)使用 Nand
Flash 或 Nor Flash 相关的读写命令将 SDRAM 中的数据烧入 Flash。
内核的引导步骤如下:
(1)用
U-boot 的 mkimage 工具处理内核映像 zImage。
(2)通过网络、串口、U 盘、SD 卡等方式将处理过的内核映像传输到 SDRAM
的一定
位置(一般使用 0x30008000)
(3)然后使用”bootm"等内核引导命令来启动内核。
2.U-boot在mini2440上的移植
在U-boot根目录下:
vim Makefile
将 CROSS_COMPILE = arm-tekkaman-linux-gnueabi-
修改为CROSS_COMPILE = arm-linux-
make mini2440_config
make
注意:修改交叉编译器一定要在make之前完成!
终于完成了U-boot
的移植。以前一直掐住瓶颈的问题,居然出在这里!
至此,总算完成了U-boot+内核+rootfs根文件系统等的移植,一个嵌入式系统搭建起来了。然而在这里,基本上只是拿了人家现成的代码稍加修改而已,不值得沾沾自喜。接下来该在应用程序上进行开发了。
Ⅹ linux的uboot启动映像,zImage和uImage的区别
linux的uboot启动映像、zImage和uImage的区别
uboot启动zImage(go)和uImage(bootm)分析
1.bootm加载linux镜像是加载uIamge,uIamge是由mkimage制作而来,和zIamge的差异是uIamge是zIamge压缩过的,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动
2.bootm解压过程
---------------------------------------------------------------------------
## Booting image at 08808000 ...
Image Name: Linux-2.6.14.7
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 989172 Bytes = 966 kB
Load Address: 08008000
Entry Point:08008000
Verifying Checksum ... OK
OK uboot bootm命令对uIamge的解压操作
---------------------------------------------------------------------------
Starting kernel ...
传递内核参数将控制权交给archarmootcompressed]head.S
----------------------------------------------------------------------------
如mx1ADS班子内存的起始地址为0x0800_0000,通过tftp 下载到0x0800_8000 +offset ,offset大于0x80_0000,即tftp 0x0880_8000 然后bootm 0x0880_8000 即将0x0880_8000处的uIamge解压,解压地址即为mkimage 设置的kernel入口地址0x0800_8000。
zImage和uImage的区别一、vmlinuzvmlinuz 是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。
vmlinuz 的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于 小内核的情况,它的存在是为了向后的兼容性。
二 是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起 误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
二、 initrd-x.x.x.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
initrd 映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或 许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。
最后生成的内核镜象有两种zImage以及uImage。其中zImage下载到 目标板中后,可以直接用uboot的 命令go来 进行直接跳转。这时候内核直接解压启动。但是无法挂载文件系统,因为go命令没有将内核需要的相关的启动参数传递给内核。传递启动参数我们必须使用命令bootm来进行跳 转。Bootm命 令跳转只处理uImage的 镜象。
uboot源代码的tools/目录下 有mkimage工 具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头, 记录参数所指定的信息,这样uboot才 能识别这个映象是针对哪个CPU体 系结构的,哪个OS的, 哪种类型,加载内存中的哪个位置,入口点在内存的那个位置以及映象名是什么
用法如下:
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set image name to 'name'
-d ==> use image data from 'datafile'
-x ==> set XIP (execute in place)
参数说明:
-A 指定CPU的体系结构:
取值表示的体 系结构
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O 指定操作系统类 型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定映象类型, 可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C 指定映象压缩方 式,可以取以下值:
none 不 压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方 式
-a 指 定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载
-e 指定映象运行的 入口点地址,这个地址就是-a参 数指定的值加上0x40(因 为前面有个mkimage添 加的0x40个 字节的头)
-n 指定映象名
-d 指定制作映象的源文件
我在编译时用到的命令如下:
# make zImage//生成zImage镜象
#/usr/local/arm/k9uboot/tools/mkimage -n 'Linux 2.4.27' -A arm -O linux -T
kernel -C none -a 0x20007fc0 -e 0x20008000 -d zImage uImage
内核镜象已经准备好了,这个时候我们就要来准备文件系统了。由于时间缘故,本人暂时采用的是其他 人已经好的文件系统k9.img.gz。 这个时候我们要做的是,自己写一个简单hello.c的程序,编译通过后加入到该文件系统中,然后下载到目标板中运行。
先编写hello.c;
编译:
#/usr/local/arm/2.95.3/bin/arm-linux-gcc –o start-hello hello.c
编译后生成可执行文件start-hello
下面我们就必须把该执行文件加入到文件系统中去,步骤如下:
#gunzip k9.img.gz //解 压缩
#mount –o loop k9.img /mnt/new_disk//挂载
#cp start-hello /mnt/new_disk //将 文件拷贝到文件系统中
#cd /mnt/new_disk
#umount /mnt/new_disk //卸 载
#gzip –c –v9 k9.img > k9.img.gz//压缩生成最终的文件系统
下面我们就要下载内核以及准备好文件系统了,这边先说明我 的内存分配情况如下:
Flash:
0x10000000 ――― 0x10020000 boot
0x10020000 ――― 0x10040000 uboot
0x10040000 ――― 0x10060000 uboot env
0x10060000 ――― 0x10200000 kernel
0x10200000 ――― 0x11000000 ramdisk
Sdram:
0x20007fc0 ――― 0x20a00000 kernel
0x20a00000 ―――ramdisk
Loadb 通过串口下载数据到ram中
cp.b拷贝ram中的数据到flash中。
将kernel以及文件系统ramdisk下载完 毕之后,我们还需要设置uboot的 环境变量,这样uboot才 能够在上电启动的时候启动内核等操作。环境变量设置如下:
Set cpfltoram cp.b 10200000 20a00000 18ffff//拷贝文件系统到ram中
Set boot bootm 20007fc0//启动kernel
Set bootcmd run cpfltoker;run cpfltoram;run boot //uboot复位的执行指令
Set cpfltoker cp.b 10060000 20007fc0 f4fff //拷贝内核到ram中
Set bootargs root=/dev/ram rw initrd=0x20a00000,4M init=/linuxrc console=ttyS0,11520
0,mem=32m//uboot传 递给内核的启动参数
设置完毕后,saveenv把 环境变量存储起来。
学习心得:zImage 和uImage 都是生成的可执行内核镜像文件
2者在u-boot中启动的方式分别是 go addr 与 bootm addr 来实现启动过程的
即对于zImage是通过 go 来进行引导 而uImage是通过bootm来进行引导的
zImage 和 uImage 2者的关系 是 uImage 是zImage通过mkimage (u--boot下面tools下的工具)来生成的
结果是后者比前者在头部多了64个byte,这多余的64 个byte是用来通知给u-boot用的;将相关信息告知u-boot;
这样做的结果在u-boot引导内核时存在2个地址:loadaddress 和entry address 2者的差值刚好是0x40(64byte)的大小
这样在使用bootm loadaddress 时u-boot会根据相应的loadaddress进行调整,有2中情况;
1)、当loadaddress与mkimage时传送的一致时:
那么在加载 ldr pc,entry address时,会选择mkinage 时的entry地址;即pc=loadaddress + 4;然后由pc来控制流程跳转倒ram中去执行;
2)、当loadaddress与mkimage时传送的不一致时:
那么,u-bbot会进行地址比较 后,将当前的loadaddress减去64byte后,将真正的内核映像(去掉64byte头部的内核)拷贝倒预先制定的loadaddress,然后 直接从这个loadaddress来引导内核运行;
总结,那么上面2中情况实际区别呢?其实就是最终代码执行时,如果地址与mkinage时指定的 不符,那么u-boot将进行去头后,拷贝内核代码,直接执行;而如果不处理,则会将 loadaddress+0x40来执行内核;
通过tftp服务来下载 zImage或者uImage;
loadb 在tftp不成功的情况下使用串口来下载内核 希望不要用这个方法
cp【.b.w.l】 完成 内存之间 内存向flash之间进行拷贝
最后可以设置 bootcmd 环境变量可以实现 u-boot自动引导内核启动
至于文件系统的2中方式:ramdisk 以及nfs 推荐开发者使用nfs方便修改;
当使用ramdisk时,
#gunzip k9.img.gz //解压缩
#mount –o loop k9.img /mnt/new_disk//挂 载
#umount /mnt/new_disk //卸载
#gzip –c –v9 k9.img > k9.img.gz//压 缩生成最终的文件系统
这四条命令不要忘记,对于你来说多么强大
不要你去再建立根文件系统。