uboot编译和使用

一、获取uboot源码

芯片厂商会根据uboot官方源码维护一个版本,提供更多的启动方式以及其他的功能,在自己进行硬件设计的时候可以从厂商的官网上下载。

二、uboot编译

2.1 安装ncurses

sudo apt-get install libncurses5-dev

2.2 编译源码

# make distclean:要清除所有生成的文件(更加彻底)
# make clean:仅仅是清除之前编译的可执行文件及配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
# 选择对应开发板进行配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
# 编译源码
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

ARCH变量用于选择对应的芯片架构,CROSS_COMPILE设置编译器前缀,对应着不同平台的交叉编译器,另外这些指令可能会频繁输入,可以把他们写成一个脚本,每次执行脚本即可。

下面是编译后生成的文件:
在这里插入图片描述
编译后会生成一个uboot.bin,i.mx启动时候读取的前面部分并不是代码,而是一些数据头,因此这个程序不能直接烧录到sd卡中,需要将添加好头的文件进行烧录。

三、uboot烧录

i.mx6ull 使用正点原子提供的imxdownload可以在u-boot.bin前面添加头部信息然后生成u-boot.imx,这个文件会被烧录到sd卡的扇区中。

bootloader不是普通的文件不会被文件系统管理,而是保存在存储介质的前面一个或者多个扇区,因此不能直接将文件进行拷贝,而是需要通过特殊的方式写入到固定的位置,写入时一定要看清楚自己的sd卡是哪一个设备文件,否则可能导致虚拟机无法再次启动。

sudo imxdownload u-boot.bin /dev/sdb

为了方便可以直接写入脚本。

四、uboot命令使用

命令描述
help查看uboot所支持的命令
help 命令名称查看命令使用方法
bdinfo查看板子信息
printenv显示环境变量的值
version查看uboot版本
setenv <变量名> <值>设置环境变量,如果变量中包含空格需要使用单引号包起来
如果变量以前不存在,那么就是创建了一个新的变量
如果将变量赋值为空等于删除变量
saveenv <变量名>将环境变量保存到存储器中
md[.b, .w, .l] address [# of objects]显示内存中的值
md.b 80000000 14 (显示20个字节)
md.w 80000000 14(显示20个字)
nm [.b, .w, .l] address显示内存中的值(q退出)
mm [.b, .w, .l] addressmm 命令也是修改指定地址内存值的,
使用 mm 修改内存值的时候地址会自增,
而使用命令 nm 的话地址不会自增
mw [.b, .w, .l] address value [count]向一段内存中填充数据,相当于c语言中memset
cp [.b, .w, .l] source target count将一段内存拷贝到另一个位置
cmp [.b, .w, .l] addr1 addr2 count比较一段内存是否相等
ping 查看到目标主机的链路是否畅通
dhcp从网关处获取IP地址
nfs [loadAddress] [[hostIPaddr:]bootfilename]使用nfs从服务器上下载文件到指定位置,文件路径是绝对路径
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]从tftp服务器上下载文件到指定位置,文件路径是相对于tftp工作目录的路径

五、使用nfs服务器和tftp服务器进行调试

5.1 安装相关的软件

sudo apt-get install nfs-kernel-server rpcbind tftp-hpa tftpd-hpa xinetd

5.2 设置nfs的工作目录和访问权限

echo "nfs文件夹目录 *(rw,sync,no_root_squash)" >> /etc/exports

5.3 重启nfs服务

sudo /etc/init.d/nfs-kernel-server restart

5.4 创建一个tftp服务器的工作目录,并修改访问权限

mkdir tftpboot 
chmod 777 tftpboot

5.5 配置tftp服务器

创建文件/etc/xinetd.d/tftp,模板如下只需要修改目录即可

server tftp
{ 
	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/lhq/Desktop/Linux/tftpboot/
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}

打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/lhq/Desktop/Linux/tftpboot"
TFTP_ADDRESS=":69" 
TFTP_OPTIONS="-l -c -s"

5.6 重启tftp服务器进行测试

sudo service tftpd-hpa start

在安装完成后可以进行自测,首先在tftp工作目录下创建一个文件,例如zImage:

cd tftpboot
touch zImage

然后切换到上一级目录,输入tftp+本地回环ip,使用get指令获取zImage,此时在本目录下便多了一个zImage

cd ..
tftp 127.0.0.1
tftp> get zImage
tftp> q

5.7 设置网络相关环境变量:

指令描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址。
ethaddr开发板的 MAC 地址,一定要设置。
gatewayip网关地址。
netmask子网掩码。
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咚.萌西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值