当前位置:首页 » 文件传输 » uboot用ftp启动
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

uboot用ftp启动

发布时间: 2022-04-22 21:48:56

‘壹’ ftp://ftp.denx.de/pub/u-boot/ 这是个服务器的地址么

明显的应该把前面的ftp改成http,ftp是要登陆到别人的服务器内部,用于管理服务器的,需要用户和密码的,而http就是上网页


‘贰’ 怎么使用 UBOOT 来启动 rtems

在beagleboneblack上通过SD卡启动成功:

  1. 编译rtems代码,生成二进制文件app.exe

  2. 在ubuntu下安装u-boot-tools:

    sudo apt-get installu-boot-tools

  3. 运行make_rtems_app.sh app.exe,生成rtems-app.img

  4. 在SD卡根目录新建 uEnv.txt文件

  5. 重新启动即可

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的启动速度

1. 去掉不必要的硬件初始化,例如网络,usb等。
2. 缩写kernel image的大小。
3. 提高ARM cpu cache
4. ECC 校验去掉一些。
5,使用硬件解码。

‘肆’ 如何通过tftp烧写uboot

1、既然你已经刷了U-boot,那就用U-boot通过TFTP刷u-boot
2、通过网线连接电脑。电脑上建立TFTP服务器,简单的使用tftpd32这个软件,
要烧录的u-boot-hg255d-httpd-115200-20140828.bin放到这个软件相同目录,最好起一个简单的名字,
因为等一下你要在U-boot命令输入它,名字随意,假定为uboot.bin。
3、连接TTL,使用SecureCRT或类似的软件连接路由器,启动进入U-boot交互
4、输入命令 pri 回车,看看ipaddr和serverip两个参数,ipaddr是uboot的IP,serverip是电脑的IP,设置电脑ip跟serverip一致。
5、如果是ralink官方的Uboot改的web,那么输入命令reset
选择数字9,就是刷U-boot那个选项
输入Y 回车,回车,输入uboot.bin,等待自动完成即可
6、刷机有风险,第5步完成之后,如果你的uboot不匹配,则可能变砖,准备好编程器

‘伍’ uboot 引导程序的运行

uboot可以再很多种cpu架构上运行,同时也支持很多开发板,但是每种cpu架构之间有差别,或者开发板的资源不同,假如在某款开发板上能正常引导启动操作系统的话,并不意味着在其他款就能引导启动,建立一款统一的bootloader几乎是不可能的,但是经过大师们的努力,能够实现通过简单的配置改动,就可以实现引导启动很多操作系统(也就是bootloader移植)(uboot是bootloader中的一种,因为其源码是公开的,广受欢迎)

‘陆’ uboot是什么,在linux中干嘛用的

u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。

‘柒’ Linux和开发板之间如何传输文件啊我知道可以用insmod加载驱动,但是我得有个.ko文件才行

开发板得成功运行 uboot 。linux得启动ftp服务 或者nfs服务。uboot 可以支持ftp 或者nfs下载。开发板和pc之间有两个连接:1.得用网线连接 开发板 和pc。2.用linux的 minicom 软件和开发板进行 串口通讯。不是一两句话能解决的。
串口通讯也可以传输文件搜索这个文章:使用uboot + minicom串口协议下载镜像文件

‘捌’ uboot201407如何查看从哪启动SD卡还是EMMC

Arm板系统文件一般有三个——bootloader(uboot)、kernel(uImage)及根文件系统(rootfs)。在arm板上电后,按uboot->kernel->rootfs的顺序依次启动。由于开发板上有多种存储介质,三个文件可以放在任何可以存储的介质上,因此也就导致文件的多种启动方式。本文就来讨论,以上三个文件对应不通存放位置的不同启动配置。
一般开发板上会有flash(Nor or NAND),mmc,emmc,sd卡等。系统文件可以烧写在其中的任意一种上,因此也就对应不通的启动。在开发过程中,有时经常需要改动内核,或者修改应用程序,如果每次都修改后都重新烧写到板上的存储介质,会比较麻烦。因此,为方便调试,uImage和rootfs还可以从网络启动,即nfs启动。但uboot只能从板上介质启动。
启动过程其实是先将要启动的文件从存储位置拷贝到内存空间,再在内存中运行。因此所谓不同位置启动,也就是从不同位置拷贝而已。
下面我们以开发板启动为例,分别介绍三个文件从不同位置启动的过程方法。我使用的开发板上有emmc和两个sd卡。我们按照启动顺序,依次介绍。
首先是uboot启动。Uboot是三个系统文件中第一个启动的,对它的拷贝工作由cpu中的固件决定。固件中支持从几个位置拷贝uboot,它就能存放在几个位置上。至于每次启动具体从其中的哪里开始,硬件拨码开关决定,对应拨码在开发板手册上能查到。启动之前,先将uboot的二进制文件拷贝到对应介质。有两种不同方法烧写,如下:
1. uboot二进制文件拷贝到emmc,是通过芯片供应商的下载工具软件烧写完成;
2. 拷贝到sd卡是在linux下,通过dd命令完成的。
烧写完成后,将启动拨码拨到对应位置即可启动uboot。
然后介绍kernel文件(uImange)和rootfs的启动。如上所述,uImage和rootfs可以从emmc、sd卡或nfs拷贝到内核启动。具体的启动位置由uboot中的参数传递的内容决定。这些参数的内容在uboot中有写死的值,也可以在uboot启动阶段进入到命令输入界面,修改这些参数的值,来改变启动位置。(作者:围补)
进入uboot命令界面后,输入如下一段命令,修改启动参数,并重启。
setenv loadaddr 0x10800000

setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'

setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'

setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'

setenv bootcmd 'run bootcmd_mmc'

saveenv

run bootcmd
命令输入完后,重启开发板,即可按照上述命令中设置的参数来启动系统。
下面我们来分析一下uboot阶段输入的启动参数的意义,以便读者自己修改相关内容,让板子从自己需要的位置启动。
首先介绍几个命令。是在上面看到最多的setenv命令,该命令使用来设置或删除某个环境变量的。当setenv后面只带一个参数,该参数必须为已有的变量名,输入命令回车后该变量即被删除;当setenv后面有多个参数,将把其后第一个参数作为环境变量,后面其他参数作为该变量的值或内容。
第二个要解释的命令mmc。在uboot命令界面中敲入mmc,回车,能够看到其多个用法:
Usage:
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on currentmmc device
mmc dev [dev] [part] - show or set current mmcdevice [partition]
mmc bootpart [dev] [part] - show or set bootpartition
mmc list - lists available devices
解释一下其中几个用法:
mmc read addr blk# cnt 用来将硬盘(emmc/sd)中的内容读取到内存中。其中addr指内存中的目标位置起始地址,blk#指被拷贝内容起始存储块的块号,cnt指要被拷贝的块数。一般每个块的大小为512byte。
mmc dev [dev] [part] - show or set current mmc device [partition] 显示或设置当前设备。命令mmc dev即为显示当前是哪个device;mmc dev #意为设置“#”为当前设备。
第三个命令saveenv是保存环境变量的意思。环境变量设置后,使用该指令保存,下次重启时会按照上次保存的设置启动,就不用再次设置了。
最后,run命令比较明显,“运行”的意思。一般加在某内容为可执行命令的变量前。
再来说明一下变量。在上述参数设置命令中,参数bootargs和bootcmd是uboot的参数,其功能和名称不能被改变,其他都是用户自定义的变量,可以改变其名称。其中bootargs代表由uboot传给内核的参数;bootcmd是uboot启动时,系统自动加载的命令序列。如果设置了启动参数后,想让系统下次自动按照本次设置的方式启动,则一定要把拷贝和启动内核的语句设置为bootcmd的值,否则下次启动无法自动加载并启动内核。(作者围补)
介绍完重要的命令及uboot环境变量后,我们再来看上面的启动参数设置命令行:
setenv loadaddr 0x10800000

setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'

setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rwvideo=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'

setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'

setenv bootcmd 'run bootcmd_mmc'

saveenv

run bootcmd
按照上面对命令和参数的讲解,做一些变量的替换之后,可以看到,此处只做了两件事,一是设置环境变量bootargs的值,二是设置bootcmd的值,并保存。其中bootargs的值传递给内核,用来初始化一些设备和启动rootfs;bootcmd的值用来启动内核,即自动加载的命令序列。(最后一句run bootcmd是启动,不再是设置命令了。)
对上述命令中,采用如此多自定义变量的原因是,有些调试工具命令行输入不能过长,因此用中间自定义变量缩短一次性输入的命令行长度。我们将不必要的自定义变量做替换掉,然后来分析其内容。
setenv bootargs console=ttymxc0,115200root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24ip=dhcp

setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'

saveenv

run bootcmd
将自定义变量替代掉后,能看到,参数设置其实就是做了对两个系统环境变量赋值的工作。下面具体分析各变量值得内容。
对bootargs的赋值,对要是跟rootfs启动相关。内容是一个很大的字符串,不同项之间由空格隔开,也可以把由空格隔开的多项看做是多个参数。
第一项是console=ttymxc0,115200是选择操作台,并设置波特率。
中间几项root=/dev/mmcblk0p1 rootwait rw,是对rootfs启动位置设置root=/dev/mmcblk0p1是指从设备mmcblk0的p1分区挂载rootfs。那么mmcblk0到底是哪个设备呢?由于文件系统的挂载是在kernel启动后进行的,而内核启动后会安装linux的分配方式给现有设备分配名称,因此可对应区分设备。我使用的开发板上,emmc即为mmcblk0设备,sd安装挂载顺序依次后排。如果多个卡槽在系统启动前都插上了sd卡,系统会安装sd卡槽所在接口号依次分配设备名称号。比如,两个sd卡槽,slot2和slot3(对应总线号),只插一个sd开始,无论在哪个槽都是mmcblk1;但两个都插上sd时,在slot2中的是mmcblk1,slot3中的则是mmcblk2。Ok,至此,从哪个设备挂载rootfs已经很清楚了。后面两个参数,rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p1设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。
最后的几个参数,video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp,是做一些设备初始化的,主要是对视频设备和网络,对不需要视频设备的嵌入式系统可以不设置此项,ip也可以单独设置。
然后是第二个环境变量bootcmd的设置,主要跟kernel启动相关。
setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'
设置bootcmd内容为命令序列,用用单引号包围,命令间由分号分隔。
按照上面对mmc命令的讲解,第一个命令mmc dev 1,意思是将dev 1设置为当前设备。这里就是uImage启动(拷贝)的位置。在我使用的开发板上,dev 1指放在卡槽slot2中的sd卡。此处由于linux内核没有启动,设备名称不能按照linux分配方式确定。在我使用的开发板上,dev 2是放在卡槽slot3中的sd卡,dev3是emmc。对此句做相应修改,即可更改内核启动位置。
mmc read 0x10800000 0x800 0x2000这句大家也应该可以明白意思了,即将存储设备上从块号0x800开始的0x2000个存储块的东西拷贝到内存0x10800000开始的空间内。
bootm也是uboot命令,用于加载uboot能辨认的操作系统映像。