视频学 uboot简单使用,移植时需要

Uboot常用命令 在这里插入图片描述

Uboot是一款软件,是bootloader的一个子系统

print 打印出uboot的环境变量

变量名=变量值

setenv saveenv 设置环境变量

set只保存在RAM中,saveenv才保存到flash/Nor/Nand
在这里插入图片描述在这里插入图片描述

显示DRAM中的内容

md 20008000(memory display)

网络层ip配置

setenv ipaddr xxx.xxx.xxx.xxx (要保存)

传输层(tftp传输文件到开发板)

FTP底层是TCP协议,TFTP底层是UDP协议(简单)
uboot没有tcp协议,只有udp协议。使用的是基于udp的文件传输协议tftp
服务机和客服机模式S/C

  1. windows服务端
    直接使用软件tftpd,设置服务端ip和共享文件夹
  2. 开发板客户端
    需要知道服务端地址、端口、任务
    服务端地址:通过环境变量取得 setenv serverip xxx
    端口:tftp端口固定为69
    使用 tftp 20008000 a.txt (20008000十六进制的DRAM地址一般200xxx-300xxx)将文件a.txt的内容写到内存中
  3. linux服务端
    32位比较简单,64位默认使用ipv6,端口号也变了,需要设置
    32位直接装 sudo apt-get install tftpd-hpa
    64位,sudo apt-get install tftpd openbsc-xinetd
    查看linux服务端是否运行了tftpnetstat -ua (查看udp相关服务)
    修改服务端某个网卡的ipifconfig eth1 xxx.xxx.xxx.xxx

nand

nand分块然后分页,先擦后写。
在这里插入图片描述
nand [动词] [内存地址] [nandflash内部地址] [搬移大小] 默认16进制
将nand flash中的第5M地址块读1k到ram的21000000中。
2^10=1K
2^20=1M —> 2进制 1000…000(20个0) —>16进制 0x100000
5M=5x1M=5x(0x100000) = 0x500000
nand read 21000000 500000 1024将nand flash中的第5M地址块读1k到ram的21000000中
nand erase 500000 1024 擦除第5M块的。。。1024会被检测到第几块第几页
nand write 21000000 500000 1024将ram中的起始21000000地址的1k写到nand flash中的第5M地址块(注意先擦后写)
在这里插入图片描述

加载内核(uboot最重要的作用)

通过uboot启动内核
bootm 启动内核,用于启动uImage,常用
go 程序pc指针,将uboot主动权交给内核,启动其他格式文件
内核可执行文件的名字 uImage(包含内核和uboot关联的数据) zImage Image bzImage,头格式不一致
在这里插入图片描述
内核启动条件
内核启动条件需要 启动参数 和 文件系统
uboot去启动内核,需要借助环境变量bootargs,以什么样的方式启动,输出控制台是什么。
在这里插入图片描述

  1. 启动参数
    setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
    root= 启动的根文件系统在哪个设备中
        设备信息RAM NFS flash
    init= 内核启动后,第一个可执行init进程从哪里来
    console= 内核启动时使用什么设备作为控制台(串口最直接)
  2. 文件系统
    文件系统可以看作一个执行程序、模块。是内核和用户交互的中介。
    文件系统和内核需要介质连接,可以是nand接口、flash数据总线接口、ram总线接口、网络接口。保证内核和文件系统能够相互找得到。

文件系统的烧写

文件系统的部署方法有很多。
在这里插入图片描述

  1. Ramdisk,借助内存,内核指向那里即可
    root=/dev/ram # ram
    initrd=0x21000000,8M # ram初始地址,和文件系统需要的大小(内存基地址0x2000 0000,20008000放内核)
    init=/linuxrc # linux第一个进程
    console=ttySAC0
    总的需要的步骤:
    1.1 tftp 20008000 uImage # 下载uImage到内存地址
    1.2 tftp 21000000 initrd.img.gz # 下载文件系统到内存地址
    1.3 setenv bootargs root=/dev/ram initrd=0x21000000,8M init=/linuxrc console=ttySAC0,115200 # 设置启动参数
    1.4 bootm 20008000 # 启动内核,内核根据前面的参数加载文件系统
    通过以上步骤就可以在开发板上运行linux系统了。
  2. NFS,借助网络,与服务器连接(调试用)
    实际开发中也许flash驱动还没有完成,这时可以把网络文件系统当作root,通过网线把根文件系统挂在到内核。
    使用TCP/IP协议,还是C/S架构
    2.1 服务端
    ubuntu默认不装NFS服务
    2.1.1 安装nfs服务
    sudo apt-cache search nfs- # 搜索需要安装的服务,大致结果
    sudo apt install nfs-kernel-server # 安装nfs服务
    2.1.2 配置脚本
    在目录/etc/exports下,一般配置文件都在/etc下
    设置共享路径 哪些主机可以访问(和文件权限)
    在这里插入图片描述
    2.1.3 重启服务
    sudo /etc/init.d/nfs-kernel-server restart 重启服务。
    设置好共享文件夹之后还需要把根文件系统initrd.img.gz放进去:
     (1)首先解压gunzip initrd.img.gz得到镜像文件initrd.img,
     (2)然后将镜像文件挂在到swap交换区路径下,sudo mount -t ext2 initrd.img ./swap/ 好像只是为了得到镜像文件的内容
     (3)再把文件夹全部复制到共享路径下,注意复制时的命令参数 sudo cp -a /home/...../swap/* xxx 将swap文件的所有内容复制到xxx共享路径下。
    到此服务端的文件系统准备完成,包括数据都准备好了。
    2.2 客户端
    让内核找到服务端的具体目录的数据:一般设备文件都在/dev下
    所以要设置bootargs,root=/dev/nfs nfsroot=192..168.10.110:/home/xxx(ip:共享目录)
    但是内核启动起来之后uboot就丧失主动权了,这样内核就处于无ip状态,所以还需要设置一个ip,ip=192.168.10.112
    完整设置setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/xxx ip=192.168.10.112 init=/linuxrc console=ttySAC0,115200 # 设置环境变量
    saveenv # 保存设置的环境变量
    tftp 20008000 uImage # 下载uImage到内存
    bootm 20008000 # 启动内核,根据环境变量找文件系统等等

让系统启动后自动运行程序需要删除以下两个环境变量:
 bootdelay倒计时
 bootcmd倒计时后运行什么
系统移植的基本步骤:
uboot设置环境变量,uboot跟内核有数据交互,内核和文件系统有数据交互。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值