u-boot编译与烧录(二)

今天SD卡和TF卡都到手了,可以开始大干一场了,顺便结束掉在uboot上的纠缠。这几天查了一些资料,也解决了上一篇博客里出现的一些疑问。首先,superboot是友善独家制作的,可以写入nand作为bootloader,但是其源码不公开,也就是说除了友善的板子之外的板子无法使用superboot。superboot无法像uboot那样进入uboot模式,所以在批量刷机或者设计不涉及
摘要由CSDN通过智能技术生成
今天SD卡和TF卡都到手了,可以开始大干一场了,顺便结束掉在uboot上的纠缠。
这几天查了一些资料,也解决了上一篇博客里出现的一些疑问。


首先,superboot是友善独家制作的,可以写入nand作为bootloader,但是其源码不公开,也就是说除了友善的板子之外的板子无法使用superboot。superboot无法像uboot那样进入uboot模式,所以在批量刷机或者设计不涉及uboot、内核,从而不需要频繁烧写内核、uboot的上层应用制作中有优势,如果用来调试内核,一次次通过SD连minitools烧写是极度不方便的。


其次,Tiny210友善提供的就是superboot而没有uboot(我是指我的光盘里,网上tiny210的uboot也是很多的),所以我找不到uboot源码。


再次, 板子上电之后会有个等待时间,等待用户敲击键盘从而阻止内核加载,停留在uboot状态。之前疑惑个等待时间是怎么设定的,能不能不等待。其实这个是由uboot的环境变量所决定的。
进入uboot时,输入help可以查看所有uboot所支持的命令。
其中输入print可以查看所有的uboot环境变量:


iTOP-4412 # print
bootdelay=2
baudrate=115200
stdin=serial
stdout=serial
stderr=serial
bootcmd=movi read kernel 40008000;movi read rootfs 40df0000 100000;bootm 4000800
0 40df0000
Environment size: 160/16380 bytes
其中的bootdelay=2即表示uboot会等待两秒用户的反应,可以通过setenv修改
bootcmd即表示uboot反应时间过后执行的操作:这句话的意思就是将nand中的内核及文件系统读入内存,然后依次执行。


这里安利一个好方法,方便内核的调试,因为每次内核编译好后都通过烧写的办法是比较麻烦的,通过设置uboot的环境变量,利用uboot支持的tftp功能能很容易的调试编译好的内核:
首先,当然是要在虚拟机linux系统下搭建好tftp服务器,方法都大同小异,无非是下载所用的软件,然后写好环境变量,新建tftp服务器的路径,假定/tftp_space,重启服务,网上有很多资料,然后记住虚拟机的ip地址,假定192.168.1.2。


然后就是设置uboot的环境变量:


setenv ipaddr 192.168.1.10 //和服务器在同一网段
setenv server 192.168.1.2   //即服务器的ip地址
setenv bootcmd tftp c0008000 uImage \; bootm c0008000 //uboot起来后从tftp服务器获取uImage到内存c0008000的地址,然后运行这段内存里的内核
saveenv //保存环境变量到flash中


这里为了查看tftp设置好了没有可以在终端中使用ping指令,看看板子和虚拟机能否ping通,如果不能ping通,排除掉tftp设置及ip地址错误的基本原因之外,还有很多可能。
因为板子是通过网线和windows连接,然后window通过虚拟机连接,要确保每一层没有问题。
先将板子和window cmd下ping通 然后windows和虚拟机终端ping通,这两个没问题说明网络是通畅的
如果还是不行确保windows和虚拟机的防火墙关闭
最后还是不行的话,只能建议将pc和板子连在一个交换机上,这样可以排除最后的可能。


这样一来,每次编译出新的内核,只需把镜像文件放在之前建的/tftp_space下,上电后板子自动加载服务器的内核,就方便许多了。


有的时候在saveenv的时候会出现错误,我也不知道为什么,那么改了半天重启之后uboot的环境变量依然是老样子。
那么怎么办呢?我们可以尝试从源码直接修改uboot的环境变量,从而编译得到的uboot就具有希望的环境变量了:
在源码的common路径下的env_common.c中有这么一段:


#define XMK_STR(x) #x
#define MK_STR(x) XMK_STR(x)


uchar default_environment[] = {
#ifdef CONFIG_BOOTARGS
"bootargs=" CONFIG_BOOTARGS "\0"
#endif
#ifdef CONFIG_BOOTCOMMAND
"bootcmd=" CONFIG_BOOTCOMMAND "\0"
#endif
#ifdef CONFIG_RAMBOOTCOMMAND
"ramboot=" CONFIG_RAMBOOTCOMMAND "\0"
#endif
#ifdef CONFIG_NFSBOOTCOMMAND
"nfsboot=" CONFIG_NFSBOOTCOMMAND "\0"
#endif
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
"bootdelay=" MK_STR(10) "\0"
#endif
#if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
"baudrate=" MK_STR(CONFIG_BAUDRATE) "\0"
#endif
#ifdef CONFIG_LOADS_ECHO
"loads_echo=" MK_STR(CONFIG_LOADS_ECHO) "\0"
#endif
#ifdef CONFIG_ETHADDR
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值